refactor(types)!: rename the declarative Kanban trio, leaving the bare names to plugin-kanban - #7643
Merged
Merged
Conversation
…e names to plugin-kanban (objectui#6172) `KanbanSchema` / `KanbanColumn` / `KanbanCard` were declared twice with disagreeing shapes — once in `@object-ui/types` and once in `@object-ui/plugin-kanban`. The 2026-08-31 maintainer ruling (决裁批 #14, option A) settled the authority: the plugin keeps the bare names, because all four registered kanban renderers consume that dialect, and objectui#6086 measured that auto-importing the copy no renderer reads produces a confident empty board rather than an abstention. The `@object-ui/types` trio becomes `DeclarativeKanbanSchema` / `DeclarativeKanbanColumn` / `DeclarativeKanbanCard`, and its Zod mirror follows the package's `<TypeName>Schema` convention. Pure rename: no member, no optionality and no accept/reject behaviour moves. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3
This was referenced Sep 4, 2026
Contributor
✅ 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
|
This was referenced Sep 4, 2026
os-warren
marked this pull request as ready for review
September 4, 2026 14:46
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #6172
Executes the 2026-08-31 maintainer ruling (comment 5474954379, director seat, 第 6 场决裁批 #14, verbatim 「其他同意」) — option A.
@object-ui/plugin-kanbankeeps the bareKanbanSchema/KanbanColumn/KanbanCard; the@object-ui/typestrio is renamed.Spelling chosen under the latitude the ruling grants ("执行席可在同义命名内定拼写"): the ruling's own exemplar family,
DeclarativeKanbanSchema/DeclarativeKanbanColumn/DeclarativeKanbanCard, because "declarative" names what actually survives here — the authoring shape and its Zod mirror, which is the'kanban'arm ofComplexSchema→AnyComponentSchema→safeValidateSchema.The ruling's stop-condition: measured, and it does NOT fire
The ruling makes option D (retire the trio outright) an escalation during execution, not a choice:
The named discriminating keys do read zero, and that reproduces. Reader census over
packages/{plugin-kanban,components,core,react,app-shell}/src, non-test, same query shape for target and control:.draggable.onColumnAdd.onCardAdd.onCardMove.onCardClick.columnsinplugin-kanban/src.cardsinplugin-kanban/src.titleinplugin-kanban/srcThe instrument is lit: the same query that returns 0 for the three keys returns 8 / 23 / 13 for their neighbours, so those zeros are readings rather than a dead probe.
But the condition is "无任何保留价值" — no retained value at all — and the copy has plenty. Four measured, load-bearing consumers:
zod/complex.zod.ts's mirror is the'kanban'arm of theComplexSchemadiscriminated union, an arm ofAnyComponentSchema, which is whatsafeValidateSchemaruns — andpackages/cli/src/commands/{validate,check}.tscall it. Retiring the trio would orphan or remove the only validation arm every{ "type": "kanban" }document is judged against.SchemaRegistry['kanban'](registry.ts:186) — publishedComponentTypekeyspace.ComplexSchemaunion arm — published type.onCardClickis declared only here.plugin-kanban/src/index.tsx:194forwardsschema.onCardClick, and the plugin's ownKanbanSchemadoes not declare it — it type-checks solely throughBaseSchema's index signature. The declarative copy is the only declaration of a key the live renderer reads.⇒ Renamed, not retired. Reporting the measurement rather than the conclusion, per the ruling.
What moved
Six published names are removed, not three. The ruling's break line says "types 侧三个已发布名消失", which is the type trio; its landing-point list also names the Zod mirror, the Zod barrel and the demo — and those three are touched only if the mirror consts are renamed too. This repo's mirror convention is
TypeName+Schema, so leavingKanbanSchemaon a mirror ofDeclarativeKanbanSchemawould mint exactly the name-derived-pairing hazardzod-mirror-parity.test.ts's own header warns about. Flagging the count explicitly since it exceeds the ruled wording.@object-ui/typesKanbanSchemaDeclarativeKanbanSchema@object-ui/typesKanbanColumnDeclarativeKanbanColumn@object-ui/typesKanbanCardDeclarativeKanbanCard@object-ui/types/zodKanbanSchemaDeclarativeKanbanSchema@object-ui/types/zodKanbanColumnSchemaDeclarativeKanbanColumnSchema@object-ui/types/zodKanbanCardSchemaDeclarativeKanbanCardSchemaPure rename: no member, no optionality, no accept/reject behaviour moves.
plugin-kanbanis 0 files touched.Landing points re-derived from the tree rather than inherited — the ruling's list plus three it did not name, found by grepping for name-keyed logic:
handler-keys-json-refusal-6124.test.ts(type-level pins and the mirror labels),component-docs-retired-handler-keys-7340.test.ts(itsCONTROLrows key on the doc heading), and the in-page anchor[…](#kanbanschema)onschema-reference.md.The shrink-only baseline
one-authority-per-exported-name-6273.test.tsloses all three rows: 36 → 33, re-derived by counting the array, not inherited.Verification
Exit codes captured by redirect before any pipe; every verdict quoted from the gate's own line. Union re-run on the final commit
c7ea4147, tree clean.packages/types/ packages/plugin-kanban/ examples/schema-catalog/+ the baseline test +check-doc-component-types.test.ts—Test Files 154 passed (154) / Tests 3980 passed (3980), exit 0.turbo run type-checkrepo-wide —Tasks: 81 successful, 81 total, exit 0. This is the net that matters for removing published names, and it found no consumer of the removed six.handler-keys-json-refusal-6124.test.tsholdsExpect(RetiredIsNever(DeclarativeKanbanSchema['onColumnAdd']))and three siblings. Those are erased at runtime, so vitest's green says nothing about them — the instrument istsc -p packages/types/tsconfig.test.json, chained from that package'stype-check. Membership proved with--listFiles: the test file,src/complex.tsandsrc/zod/complex.zod.tsare all in the program (1 hit each), exit 0.examples/zod-validation-example.tslikewise sits intsconfig.examples.json's program.check:control-bytesexit 0 — "OK (scanned 6242 tracked text file(s); skipped 85 binary)" ·check:doc-typesexit 0 — "Every documented component type is registered." ·check:doc-fencesexit 0 (227 documents) ·docs:check-linksexit 0 — "Links are valid across 17 scan roots." ·check:doc-snippetsexit 0 — "Semantic phase: 452 of 452 block(s) judged, 0 failed." ·check:readme-exportsexit 0 — 421 self-imports judged, 0 wrong-path, 0 fabricated · changeset presence exit 0 — "9 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)" ·check:changeset-no-majorexit 0 · pluscheck:self-import,check:phantom-deps,check:esm-specifiers,check:spec-symbols,check:docs-route-closure,check:vi-mock-specifiers,check:vi-mock-inherit,check:side-effects-array,check:entry-guard,check:dist-completeness— all exit 0.api/schema-reference.mdappears 0 times incheck-doc-snippet-types.mjs's declaredUNGATED_DOCS, so the 452/452 green genuinely covers the page whose import line this PR rewrote.check:sdui-registration-pinsandcheck:eager-closureboth exit 2 with their own precondition text ("No console build to weigh atapps/console/dist/assets"). They need anapps/consoleproduction build this branch never produces, and this diff is type-level only. CI runs them regardless.turbo run buildfor the snippet gate's own--build-filterset reported a cache hit, sodistmaterialisation was verified in this worktree before anything was trusted —packages/types/dist/complex.d.ts, mtime from this run, carriesDeclarativeKanban*7 times and zero bare trio names outside my own prose.no-explicit-anyon lines this PR does not touch. Repo-widepnpm lintwas narrowed deliberately, and the narrowing is measured: (i) population read from eslint's own config, which reports the 5.md/changeset paths as "File ignored because no matching configuration was supplied"; (ii) 10 of 15 files in population, counted from--format json; (iii)eslint.config.jsdeclares noprojectService/project/parserOptions, so linting is not type-aware and no untouched file's verdict can move on this diff.Ablation — three legs, direction predicted in writing first
Each leg: predict, mutate, prove the mutation on disk (anchored count and
git hash-objectoff the HEAD blob), observe, restore viagit checkout HEAD -- ABSOLUTE_PATHundertrap … EXIT INT TERM, prove the restore both ways (blob back to the HEAD value and emptygit diff HEAD). No rebuild needed on any leg: the ratchet is a text scan over source and the link gate reads markdown.KanbanCard / KanbanColumn / KanbanSchema — no longer collides at:, 1 failed / 10 passed.KanbanSchemadeclaration incomplex.tswith the rows deleted reds as a new collision. Observed exactly — exit 1,KanbanSchema — a NEW colliding name, 1 failed / 10 passed.check-doc-linkswould red on the pre-rename anchor. It exits 0. Two-arm control on the same file proves the instrument is alive and the gap is specific: a broken file-path link → exit 1 with the gate'srelative:message; a broken in-page anchor (#totally-not-a-heading-xyz) → exit 0, silent. ⇒ The anchor correction in this PR is real but held by no gate; filed as a finding rather than fixed here.Deliberately not changed
packages/plugin-kanban/**— untouched, which is the ruling.content/docs/api/schema-reference.md's kanban example body. finding(docs):schema-reference.md'sKanbanSchemaexample mixes both dialects —cardsfrom the plugin copy withcolor/draggablefrom the types copy, so it matches no declaration #6973 owns that page and stays its own card. Worth recording for its triage: the "hybrid matching neither declaration" premise looks stale — 24 catalog entries failsafeValidateSchemabecause the Zod mirror names a key its renderer never reads (8 components) #6939 renamedKanbanColumn.itemstocardson both halves, so the example'scards+draggable+ columncoloris now a consistent read of the declarative copy. Only its type name was updated here..changeset/6124-…,6939-…,6172-markdown-kanban-one-authority.md) still spell the old names. They are past-tense release notes for changes that landed under those names, and they ship in the same release as this PR's changeset, which announces the rename.packages/components/src/renderers/complex/README-KANBAN.mddocuments the plugin dialect (badges, columnclassName) in a package that ships no kanban renderer — unaffected by this rename, and not this card.packages/cli/src/__tests__/check-validity-recogniser.test.ts:212— a historical account of objectui#6939, accurate for its time; editing it would pull a second package into this changeset for no contract reason.Clause-② — yes
Six published names are removed from
@object-ui/typesand@object-ui/types/zod: the published surface narrows.needs:contract-reviewis on both carriers; stays draft, not enqueued, parked for the director seat atCONTRACT_REVIEW_TIER.@objectstack/specresolved 17.2.0 at this SHA (what the lockfile gives; 17.3.0 is out but nothing was bumped). Nothing in this diff is spec-dependent.🤖 Generated with Claude Code
https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3
Generated by Claude Code