Repository navigation
docs(types,plugin-calendar): teach object-calendar's field-name keys inside the calendar block; the flat spelling is the runtime handoff (objectui#8831) - #11308
Conversation
…s inside the calendar block, and name the flat spelling as the runtime handoff (objectui#8831) The spec refuses startDateField / endDateField / titleField / colorField / allDayField written flat on an object-calendar node and prescribes the calendar block; 17.5.0 declares all five there. The README's two object-calendar examples now write the block, the calendar-view sentence is scoped to calendar-view (it has no calendar block), and the types' flat member descriptions call the flat spelling the read-only handoff. No accept set moves: the flat members stay declared because the renderer reads them. The 8466 README pin is inverted to the new teaching, and the 8466 changeset gets a dated note. Claude-Session: https://claude.ai/code/session_01VhxTqosz7wn54ahqyxgERT 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
|
…es, and allDayField is a spec key since 17.5.0 (objectui#8831) The plugin-calendar docs page said neither published face of ObjectCalendarSchema declares the calendar container; both have since objectui#8651. The paragraph now states what the two faces and the spec check inside the block, measured on the installed 17.5.0. Three pending changesets (8026, 8830, olive-buckets-scream) still described allDayField as objectui-local or refused by the spec, which objectui#11073's bump made false; olive-buckets-scream also said the dateField / endField rungs are kept, which objectui#8355 made false. Each gets a dated, append-only correction with its frontmatter unchanged. Claude-Session: https://claude.ai/code/session_01VhxTqosz7wn54ahqyxgERT 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: Reviewed at 2026-10-01T02:19Z. Inputs: card #8831 (body and all 15 comments), PR #11308 (body, 10-file list, net diff against ① Derived judgmentsEach published-face change the diff implies, judged against 17.5.0 and the tree on
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS |
Fixes #8831
Clause-②: no
What changes
@objectstack/specrefusesstartDateField/endDateField/titleField/colorField/allDayFieldwritten flat on anobject-calendarnode. Its diagnostic prescribescalendar: { startDateField, endDateField, titleField, colorField, allDayField }. Since 17.5.0 the spec'sCalendarConfigSchemadeclares all five,allDayFieldincluded. This PR is ruled direction (a): objectui stops teaching the flat spelling at theobject-calendarposition and teaches the container.packages/plugin-calendar/README.mdobject-calendarsnippets ("With ObjectQL Integration" and "ObjectQL Integration") now write the five keys insidecalendar, withallDayFieldin the block. Both are compiled bycheck:doc-snippets.ObjectView/ListViewemit, whichgetCalendarConfigreads only when the node has nocalendarblock. It is declared because the renderer reads it, and it is not a second authorable spelling (Prime Directive [WIP] Enhance UI components for forms and layouts #12).packages/types, both faces ofObjectCalendarSchema.describe()text (one shared helper,objectCalendarFlatField) and TS docblocks call them the FLAT spelling, read but not authored, and point atcalendar.KEY.calendarmember's text calls the block the authored spelling.allDayFielddocblock no longer says the key is objectui-local. It records that 17.5.0 declares it.ObjectCalendarBlockConfigSchema's.extend({ allDayField }). Only its description and comment changed: it no longer says the spec refuses the key. See H2.Pin. The
calendar-flat-color-allday-8466row "the README still teaches all five together, which is what makes them authorable" is inverted. It now reads the README's authoredobject-calendarnodes by brace matching and asserts:calendarblock carries all five;calendar-viewnode is seen writingtitleFieldflat.The file's header gets a dated note.
Changesets. New
.changeset/8831-calendar-flat-teaching-face.md(@object-ui/typespatch,@object-ui/plugin-calendarpatch). The pending.changeset/8466-calendar-color-allday-fields.mdsays the README "already teaches" the flat keys, which this release makes false. It gets a dated, append-only note, and its frontmatter is byte-identical (md5 of the first three lines unchanged).What is NOT changed
ObjectCalendarreads them andObjectView/ListViewemit them.ObjectCalendarSchema.objectNameandrequireRecordSource(held by objectui#11117), theCalendarViewSchemadeclarations,navigation, andregistry-inputs-spec-parity.test.ts(held by objectui#11168).Premises, re-measured in this worktree (base
1ccb5ba7d, installed@objectstack/spec17.5.0, single store copy){ startDateField }parses (true), and{ startDateField, bogusKeyZz }is refused (false,unrecognized_keysnamingbogusKeyZz). Shape keys:allDayField, colorField, endDateField, startDateField, titleField.ComponentPropsMap['object-calendar']refuses the README's old first snippet:unrecognized_keyson all five, and the message starts "Write this as a key of thecalendarconfig object instead".calendar-viewsite.ComponentPropsMaphas nocalendar-viewrow (55 rows; theobject-calendarcontrol is present), andCalendarViewSchemahas nocalendarcontainer. So the flat keys are that element's only spelling, and the container cannot be taught there.calendar-view("on acalendar-viewnode ... here the flat keys are the only spelling"), and point to theobject-calendarblock in the next section.CalendarViewNodelisting and the "Calendar Event Structure" fence arecalendar-view's and stay..extend({ allDayField }). It is now an identity. The spec'sCalendarConfigSchema.partial()member and the localz.string().optional()agree on 8 of 8 values: two strings,undefined,42,true,null,{}, an array. On the TS side,ObjectCalendarSchema['allDayField']equalsCalendarConfig['allDayField']; a tsc probe checked this, and its control fired.zod-mirror-parityledger comment names this extension, and that file is outside this claim.object-calendarsnippet oncontent/docs/plugins/plugin-calendar.mdxalready writescalendar: { ... }, and its Schema API fence lists no flat key.git grepfound no othercontent/docs/**,examples/**orskills/**site that authorsobject-calendarwith a flat key. The flat keys incontent/docs/api/schema-reference.mdand the schema-catalog JSON arecalendar-view's. ⇒ no docs page changed.@objectstack/spec17.4.0 installed then", and the test body's 17.5.0 row explains the move. A reader does not take it as current.SchemaRendererand registry, and was deleted afterwards (tree clean):Unscheduled (2), and no refusal screen;calendarblock renders "Calendar configuration required".Verification, all at HEAD
bac7f8789Run from the worktree; heavy runs went through the shared verify lock. The verdict lines are quoted.
turbo run buildovercheck:doc-snippets --build-filter(36 packages,--concurrency=2)Tasks: 35 successful, 35 total,VERDICT command-exit 0pnpm check:doc-snippetsSemantic phase: 698 of 698 block(s) judged, 0 failed.pnpm check:readme-exportscheck-readme-exports: OK (... 554 real, 0 wrong-path, 0 fabricated ...)pnpm --filter @object-ui/types type-check(the script echoed:tsc --noEmit && tsc -p tsconfig.examples.json && tsc -p tsconfig.test.json)tsc -p tsconfig.test.json --listFilescounts the 8466 file once, so the test face is in itpnpm exec vitest run --maxWorkers=2 packages/types/ packages/plugin-calendar/src/readme-calendar-view-schema.test.tsTest Files 302 passed (302),Tests 7605 passed (7605),VERDICT command-exit 0--no-inline-config)no-explicit-anywarningscheck:doc-types,check:doc-fences,check:doc-example-ids,check:installed-pin-claims,check:new-line-citations,check:control-bytes,check:test-path-roots,check:pending-changeset-literals,check:vi-mock-specifiers,check:vi-mock-inherit,check:vi-mock-override-shape,check:spec-symbols,check:component-surface-parity,check:designer-field-key-parity,check:element-data-source-declarationcheck-changeset-presence/-no-major/-fixed3 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)markdown-test-inputs --audit107 candidate test files, all adjudicated; 78 declared entries, all present.check:comment-mask-corpuscheck:changeset-claims,check-changeset-overwrite(report-only)check-governed-queue-guard --testover the six pathsNOT GOVERNEDThe repo-wide
pnpm lintand the full CI matrix are left to CI.dispatch-gates.mjs --repo objectstack-ai/objectuirefuses (exit 2), as it does for any objectui card, so this list is hand-derived from the diff.Reverse verification (one-shot; each mutation landed through
ablation-replace.mjs, which checks the anchor count and the blob hash, and was restored to the HEAD blob withgit diff HEADempty)titleFieldwas put back on the README's secondobject-calendarnode.× the README authors the five INSIDE the calendar block ...,AssertionError: a README object-calendar node writes titleField flat,Tests 1 failed | 18 passed. Direction as expected: red.check:doc-snippetsjudges the README block's values.allDayField: 'isAllDay'was changed toallDayField: 42inside the block.[semantic] packages/plugin-calendar/README.md ... TS2322: Type 'number' is not assignable to type 'string'.,698 of 698 block(s) judged, 1 failed. Red, as expected.Round 2 (
a86a6afdb)Two findings from round 1, folded in on the seat's order. They are this card's own subject (what the published faces teach about the
calendarcontainer andallDayField), and neither could ride anywhere else.content/docs/plugins/plugin-calendar.mdx, section "CalendarConfig": the paragraph that said neither published face ofObjectCalendarSchemadeclares thecalendarcontainer (false since objectui#8651) now says what holds on the installed 17.5.0:calendar: { startDateField: 42 }is refused, anddateField/endFieldare refused by name (objectui#8355)..passthrough(), so any other key parses.object-calendar, the spec declares thecalendarkey but not its shape..changeset/8026-objectcalendar-alldayfield-honoured.md: its "Not spec surface" paragraph. Made false by objectui#11073..changeset/8830-calendar-doc-key-set.md: "objectui's ownallDayField". Made false by objectui#11073..changeset/olive-buckets-scream.md: "the fourCalendarConfigSchemanames plus objectui'sallDayField", made false by objectui#11073; and the keptdateField/endFieldrungs and the parsingcalendar.dateField, made false by objectui#8355..changeset/7928-listviews-by-reference-fold.md, whose list of refused named-view keys is labelled "Measured on 17.4.0".a86a6afdb, all exit 0:check:doc-snippets(698/698 judged, 0 failed),check:doc-types,check:doc-fences,check:doc-example-ids;check-changeset-presence/-no-major/-fixed/-overwrite,check:changeset-claims,check:pending-changeset-literals;check:new-line-citations,check:control-bytes,check:installed-pin-claims,check-doc-links.Acceptance notes
None of these was changed here. Each one is drift, outside this claim, or both:
packages/plugin-calendar/src/ObjectCalendar.tsx, theObjectCalendarConfigdocblock, still saysallDayFieldis not a spec key. That sentence is already astaleentry incheck-installed-spec-pin-claims.mjs's ledger. Carrier: none.apps/console/src/__tests__/registry-inputs-spec-parity.test.tspin text callsallDayField"an objectui-local extra key" and the spec side "exactly the four documented keys". Carrier: objectui#11168, which holds that file this round.packages/types/src/__tests__/zod-mirror-parity.test.ts, the ledger comment besideobjectql.zod.ts#ObjectCalendarSchema, still speaks of the "four-key calendar config vocabulary" and objectui's "single local knob". Removing the now-identityallDayFieldextension would make it fully false, which is why that removal is not in this PR. Carrier: none; objectui#6152 (another seat) holds that file.packages/types/src/zod/objectql.zod.ts, the list-view mirror note (".passthrough()is kept ... because the renderers grow config knobs ahead of the protocol (calendar'sallDayField, for one)") cites an example that has been out of date since 17.5.0. The list-viewCalendarConfigmirror now takesallDayFieldfrom the spec. The note sits outside this card's region (PR feat(types)!:showFiltersis retired onobject-grid, refused by name with the list view'suserActions.filternamed (objectui#11068) #11306 and objectui#11117 hold neighbouring regions). Carrier: none.plugin-calendar.mdxand the three pending changesets were folded into round 2 above.Generated by Claude Code