Repository navigation
refactor(plugin-calendar,plugin-gantt)!: retire the flat fallback read; the calendar and gantt renderers read the block only - #27026
Conversation
…d; the calendar and gantt renderers read the block only getCalendarConfig and getGanttConfig read the `calendar` / `gantt` block and nothing flat. The package-local ObjectCalendarFlatFields / ObjectCalendarHandoff types are gone; ObjectGanttFlatFields shrinks to ObjectGanttSearchFields (the `search` / `searchableFields` pair ListView writes at runtime). A flat node reaches the configuration-required screen, which names the block, and the gantt dev warning names every flat key it did not read. The renderer tests that authored flat nodes move to the block form. The spec's object-calendar / object-gantt refusals drop the clause that the renderer still reads the flat spelling, and three comment polishes from the item-1 review land with it. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzevL8Q6rTfGz2XHXGT
…s binding in the calendar block Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzevL8Q6rTfGz2XHXGT
…nderer and mirror nodes to the block; read the unread flat keys with Reflect.get An after-change census found five more test nodes written flat (a gantt expand test, the console filter-token sweep, a calendar invalidation test and two @object-ui/types mirror pins). They now write the block. Three comments that still said the renderer reads the binding flat are rewritten. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzevL8Q6rTfGz2XHXGT
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 147 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Contract reviewServed-tier: Inputs read: card #25923 body and all 21 comments (in particular 6437594464, 6448239783, 6456306486, 6456384663, 6456494843, 6458717005); the census file ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: FAIL |
…h, name the item-1 sentences it supersedes, drop an unused import Metadata-protocol none takes patch under ruling A. This PR's changeset now names the sentences of the item-1 changeset that the retirement makes false, in the same release, instead of editing that note. One calendar test title now matches its block-authored body, and ObjectCalendar.tsx no longer imports ObjectCalendarBlockConfig, which only the removed hand-off types used (the Lint UI error). Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzevL8Q6rTfGz2XHXGT
Contract reviewServed-tier: Inputs read: the PR as it stands (head ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS |
…list and plugin-view changelogs The item-1 changeset compiles into those three changelogs too, so this note lands beside it at patch in every changelog it reaches. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WGufzevL8Q6rTfGz2XHXGT
|
Generated by Claude Code |
维护者速读 (席位终稿)
席位意见:接受。契约复核第 1 轮 FAIL(6458913292),原因是 changeset 把两个插件标成 席位核对 · ACCEPT ·
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40640960283 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by Yibo Wang · project thread
Part of #25923
Clause-②: no (narrowing)
Metadata-protocol: none
Skills-docs: none — skills/objectstack-ui/rules/list-views.md:290-301 and skills/objectui/guides/page-builder.md:291-305 already teach the block only
维护者速读
calendar/gantt配置块读取字段绑定,不再读取写在节点顶层的平铺字段;规范里两条拒收提示同步改掉了“渲染器仍会读取平铺写法”这半句。ObjectGantt/ObjectCalendar组件并写平铺字段的宿主会看到“需要配置”提示而不是图表;回滚即还原本 PR,无存储数据迁移。ui/packages/plugin-gantt/src/ObjectGantt.tsx(getGanttConfig与warnOnFlatGanttKeys)、ui/packages/plugin-calendar/src/ObjectCalendar.tsx(getCalendarConfig)、packages/spec/src/ui/component.zod.ts(两条拒收提示)。cd ui && pnpm exec vitest run packages/plugin-gantt/src/ObjectGantt.blockPrecedence.test.tsx packages/plugin-calendar/src/ObjectCalendar.unconfiguredRefusal-7029.test.tsx,预期全绿:平铺节点被拒并提示配置块,配置块节点正常绘制。What changes
@object-ui/plugin-calendar:getCalendarConfigreads thecalendarblock only. A node that writesstartDateField/endDateField/titleField/colorField/allDayFieldflat with no block reaches the "Calendar configuration required" screen, whose hint names thecalendarblock. The package-localObjectCalendarFlatFieldsandObjectCalendarHandofftypes are removed;ObjectCalendarProps['schema']is the publishedObjectCalendarSchema.@object-ui/plugin-gantt:getGanttConfigreads theganttblock only. FlatGanttConfigkeys with no block reach "Gantt configuration required", which now names theganttblock. The dev warningwarnOnFlatGanttKeysnames every flat key the chart did not read, with or without a block beside it. The legacy singulardependencyFieldis read nowhere.ObjectGanttFlatFieldsis replaced byObjectGanttSearchFields, which carries only thesearch/searchableFieldspair thatListViewwrites at runtime.@objectstack/spec: only the false clause of theobject-calendarandobject-ganttflat-key refusal texts is rewritten (they said the renderer still reads the flat spelling). The prescription itself, write the keys in the block, is unchanged.calendar-flat-color-allday-8466.test.tsmerged and its read-census rows inverted;objectql.tsgantt block note; theobjectql.zod.tsbinding bullet and view-level arms note.Tests
ObjectCalendar.unconfiguredRefusal-7029,ObjectGantt.blockPrecedence), with a CONTROL that the same keys moved into the block draw.ganttHandoff-25923.test.ts(renamed fromganttHandoffFlatFields-25923) pins that the hand-off type carries only the search pair and that a flatstartDateFieldis a compile error.ObjectGantt.dependencyAliaspins the singular alias as not read when written flat and refused by name inside the block.Acceptance notes
packages/spec/src/kernel/functional-completeness.tsandpackages/spec/liveness/view.jsonare in the amended surface but were not edited: their calendar/gantt rows are dated readings pinned at objectuib9814b334, and no sentence in them becomes false with this change..changeset/25923-calendar-gantt-flat-keys-handoff.md, left as written.@object-ui/types,@object-ui/plugin-listand@object-ui/plugin-viewcarry apatchentry. Their code changes are only comments and tests (in@object-ui/types), or none at all, but the item-1 changeset compiles into their changelogs too. So the Supersedes paragraph has to land beside it there as well.patch:Metadata-protocol: nonetakes patch under ruling A. The BREAKING banner and the ADR-0087 marker stay.25923-calendar-gantt-flat-keys-handoff.mdsays the renderers still read the flat spelling. This PR does not edit it, becausecheck-empty-changesetrefuses a change to a changeset the merge base already carries. This PR's own changeset instead names the sentences it supersedes, in the same release.sys_metadatarows, cloud.FormFieldindex signature, theimmutablerender-or-refuse follow-up, work item 2, and the listoptionsbag (PR 2 closes the spec door with an ADR-0087 fold; PR 3 deletes the objectui readers).Verification
ui tests (os-verify-lock)
Test Files 818 passed | 3 skipped (821)·Tests 18599 passed | 211 skipped· VERDICT command-exit 0Test Files 75 passed (75)·Tests 1693 passed | 12 skipped· VERDICT command-exit 0Test Files 5 passed (5)·Tests 111 passed· exit 0Reflect.getfix:Test Files 101 passed | 1 skipped (102)·Tests 768 passed | 114 skipped· exit 0type-check and spec tests
pnpm --filter @object-ui/types --filter @object-ui/plugin-calendar --filter @object-ui/plugin-gantt --filter @object-ui/plugin-list --filter @object-ui/app-shell run type-check(each runstsc --noEmitandtsc -p tsconfig.test.json): VERDICT command-exit 0pnpm --filter @objectstack/spec test:Test Files 738 passed (738)·Tests 22130 passed | 1 todo· exit 0dispatch gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 84 commands, each run with its exit code recorded.--ran: 84 derived, 83 run, 1 NOT-MEASURED, 0 UNRUN. All 83 measured exit 0.pnpm check:dual-build-cjs-loadsexit 3 (prerequisite: a fullpnpm build; no package it judges is in this diff). CI runs it.node scripts/check-platform-checklist.mjs --changed-from origin/main: OK, exit 0.review rounds (heads 25a73f4, 0226b9c)
ObjectCalendar.tsximportedObjectCalendarBlockConfig, which only the removed hand-off types used; the import is dropped.pnpm --filterlint over types, plugin-calendar, plugin-gantt, plugin-list, app-shell and console: 0 errors, exit 0.check-changeset-no-major.mjs --base origin/mainwith this PR body as the event: exit 0 (exit 1 on 6001470, theminorgrades).check-adr-0087-registration,check-empty-changeset,check:changeset-fixed,check:changeset-gate-self-tests,check:nul-bytes: exit 0.patch. The same changeset checks all exit 0 again.Test Files 64 passed (64)·Tests 458 passed | 95 skipped, then plugin-calendar type-check: VERDICT command-exit 0.dogfood battery
Head
6001470dc, closurepnpm --filter '@objectstack/dogfood^...' build(exit 0), thenpnpm --filter @objectstack/dogfood testunder the lock: VERDICT command-exit 1 ·Test Files 1 failed | 343 passed | 3 skipped (347)·Tests 2 failed | 2782 passed | 20 skipped (2804).The two failures are both in
test/packaged-action-disabled-dispatch-live.dogfood.test.ts(#26572): acceptance[0] read the showcase task'sdoneas true before the disabled action ran, and acceptance[5]/[2] found a row id where it expected none. That file passes alone on the same head (Test Files 1 passed (1),Tests 8 passed (8), exit 0). This diff touches no server, action or showcase package. It is the known flake #26952: the test picks an unorderedshowcase_task?$top=1and fails when that seed task is already done, and it is red on main too.Generated by Claude Code