fix(spec): correct GanttConfig.timeZone describe — date fields don't persist as real instants - #20495
Conversation
…persist as real instants The `GanttConfig` `timeZone` member's `.describe()` said "persisted data stays real instants" unconditionally. That is false for a `Field.date` column: per the spec's own storage rule (`temporalStorageForm` / ADR-0053), a gantt drop on a `date` field writes the calendar day it landed on as a timezone-naive `YYYY-MM-DD`, while a `datetime` field still writes the real instant. Only the false clause is replaced with the true wording; the rest of the describe is unchanged. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
…scribe fix pnpm --filter @objectstack/spec gen:docs — content/docs/references/ui/view.mdx (x3) and component.mdx (x1), the four generated occurrences of the corrected describe. check:generated is green (15/15). Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
…ntt-timezone-describe
…ing origin/main os-regen-merge.sh step 3: the merge driver deferred this generated path (both sides changed it) and kept main's side; pnpm --filter @objectstack/spec gen:schema && gen:docs re-derives it on the merged tree, carrying forward both this branch's timeZone describe fix and main's #20474 round-trip-key docs. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 1 package(s): ⛔ 2 release-owned page(s) name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 137 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 9d2ff7252a2528a00c9644dbc5dc9b6629bcc4ee && git checkout 9d2ff7252a2528a00c9644dbc5dc9b6629bcc4ee
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin fc0db22bcfdbdb778945317fc4de6dc46aab966d 192aba113686efc4293a8844fdce27df856d7789 && git checkout -B drift-repro fc0db22bcfdbdb778945317fc4de6dc46aab966d && git merge --no-ff 192aba113686efc4293a8844fdce27df856d7789
node scripts/docs-audit/affected-docs.mjs --json fc0db22bcfdbdb778945317fc4de6dc46aab966d
|
Contract reviewServed-tier: Inputs read: card #20466 (body; comments 5873772768 triage, 5874985593 claim, 5876538219 os-dev-report), PR #20495 (body, its one comment 5876509376, file list, net diff ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #20466
Clause-②: no
What changed
packages/spec/src/ui/view.zod.ts, theGanttConfigtimeZonemember's.describe(): replaced only the false clause "persisted data stays realinstants" with the card's true wording — a datetime value is still written
as the real instant, and a date value as the calendar day it was dropped on
in this zone's calendar (
YYYY-MM-DD). Nothing else in the describe moved.Verified against the spec's own storage rule
(
packages/core/src/utils/temporal-storage-form.ts, ADR-0053):datetimestores canonical UTC ISO text;
datestores a timezone-naiveYYYY-MM-DDcalendar day. The new sentence is true of the contract, not of one renderer.
No mention of objectui's DST shim defect (objectstack-ai/objectui#10866
slice 5) — that stays a renderer bug, per triage.
Regenerated the reference docs that carried the old sentence verbatim
(
content/docs/references/ui/view.mdx×3,component.mdx×1) viapnpm --filter @objectstack/spec gen:schema && gen:docs— never by hand.Grepped the exact phrase across the whole repo; the only other copies were
those four generated doc occurrences (plus the JSON-Schema manifest, which
only ratchets schema names, not prose). No hand-written copy found, no test
pins the old text.
Verification record
pnpm --filter @objectstack/spec build— green (36/36 declared.d.ts, 130 declaration files, 394/394 relative references resolved).pnpm --filter @objectstack/spec check:generated— 15/15 generated artifacts green (onlycheck:docswas stale beforegen:docs, now current).pnpm --filter @objectstack/spec typecheck(tsc --noEmit+ scripts + test-layer) — green.pnpm --filter @objectstack/spec test— 572 test files, 16789 tests passed, 1 todo (unrelated pre-existing todo).view.test.ts+view-gantt-tree-config-closed-15469.test.ts— 502 tests passed. No test pins the old describe text; none needed updating.packages/spec's own build closure (pnpm --filter '@objectstack/spec^...' build) is EMPTY — nothing in this repo depends on@objectstack/specas a workspace package the wayturbo's graph tracks it here, so ① has nothing to build.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 102 gate commands from the diff (4 files, +25/-5, 30 changed lines). Ran all 102:check:doc-authoring(no tracker number in the describe),check:nul-bytes,check:merge-driver,check:changeset-no-major,check:empty-changeset,check:issue-citations/check:closing-keyword-parity(theFixes #20466line), and everypackages/speccheck:*gate the diff touches.PREREQUISITE NOT MET(exit 3, not a finding):check:skill-examples(client SDK surface needs@objectstack/client-react+@objectstack/clientbuilt),check:dual-build-cjs-loads(needs ~80 packages'dist/, effectively a whole-repo build) andcheck:lean-entry-closure(needs@objectstack/objectqlbuilt). None is inpackages/spec's own build closure (which is empty); building them locally would mean rebuilding most of the monorepo for a single-clause prose fix. Deferred to CI's full build, which measures all three.check:doc-formula-expressions,check:doc-security-posture,check:docs-transcript-drift) needed only@objectstack/formula+@objectstack/lintbuilt — built those two directly and reran: all green.origin/main(view.zod.ts carried seat 4's landed feat(spec): declare the console's round-trip keys on the stored view wire (#20456) #20474view-console-round-trip-keyschange past my region) viabash scripts/pm/os-regen-merge.sh: the driver deferredcontent/docs/references/ui/view.mdx(both sides changed it), regenerated withgen:schema && gen:docson the merged tree, verified#20474's symbols and prose survived byte-for-byte (git grepagainstorigin/main), then committed the regeneration as its own commit per the runbook.git diff origin/main HEAD -- packages/spec/src/ui/view.zod.tsshows exactly the one-clause change, nothing else.git log HEAD..origin/main -- <the 3 touched paths>— empty).Acceptance notes
@object-ui/typeszod mirror (stripImportedDefaults(SpecGanttConfigSchema).shape.timeZone) is a spec-derived reuse of this describe. Per triage's direction, objectui is not edited here — its mirror picks up the corrected text at its next spec bump.Generated by Claude Code