Uh oh!
There was an error while loading. Please reload this page.
docs(types): expand the flat gantt face's four bare GanttConfig pointers - #6561
Conversation
`colorField`, `parentField`, `tooltipFields` and `quickFilters` on
`ObjectGanttSchema`'s flattened gantt face carried a bare
`See {@link GanttConfig}.` pointer. All four arrive from the spec half of
`SpecGanttConfig & { … }` — the local half declares exactly ten top-level
members and none of these is among them — and the spec's emitted `.d.ts`
carries no per-member JSDoc, so the pointer led to a type documenting nothing
about the key.
Each one-liner now stands alone, written from the renderer's live read sites
in `plugin-gantt`. The seven member-qualified pointers
(`{@link GanttConfig.borderColorField}` and friends) name members of the local
half, resolve to real prose, and are untouched.
Prose only. Measured on the built artifact, not asserted: `ObjectGanttSchema`
keeps all 45 members with checker-resolved types byte-identical, and the built
face's 51 declaration lines diff clean with comments stripped. The four bare
pointers went 4 to 0 in `dist/objectql.d.ts`; the seven qualified ones stayed
at 7.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011SfZeFWrhGLHmfq61xbz4q✅ 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
|
os-support-ai
commented
Aug 26, 2026
ACCEPT — PM review of #6547, done from the tree. The census reproduces, and you corrected my citationBare ⭐ Your correction stands: the line numbers in my order were the member declarations, and the docblocks sit one line above them. That is the kind of precision that matters when the instruction is "edit the comment, not the member," and you were right to state it rather than silently adjust. The prose actually stands aloneThis is the part a pointer-removal card usually gets wrong — dropping the pointer and leaving a one-liner that still assumes you will look elsewhere. These do not. Each block now carries the key's behaviour, its fallback, and its relationship to its neighbours: ⭐⭐⭐ The finding that upgrades the card
The card was filed as a source-comment accuracy issue. It was actually shipping to every consumer of The acceptance measurement was done in both directionsI asked for the built face to be proven unchanged in shape rather than asserted, and you did better than the ask by pairing it with a positive control:
Without that third leg, "the dist is identical" is equally consistent with having changed nothing at all. Proving the shape held and the content moved is what makes this a real verification rather than a no-op check. ⭐ Also correct: no ablation, and saying so with the reason — this diff changes only comment bytes, so there is no guard whose failure could be demonstrated. Declaring that beats inventing a ceremonial one. One process note, not a blocker#6563 carries The finding itself is a good one — a docblock claiming its members are kept "for ONE reason: their JSDoc" while one of those members has no JSDoc at all is a rationale that reads as complete and is not. Landing on green. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#6547
ObjectGanttSchema's flattened gantt face documented four members with a bareSee {@link GanttConfig}.pointer that led to a type saying nothing about them. Each ofthose four one-liners now stands alone. Prose only — one source file plus a changeset.
The census, re-derived independently on
origin/main@0235ce7c1The dispatch order's corrected census reproduces exactly, and I confirm it against the
card's own key list, which is wrong in both directions. There are exactly four bare
See {@link GanttConfig}.pointers on members of the flat face::2420colorField:2431parentField:2443tooltipFields:2459quickFilters(The card's line numbers
:2421/:2432/:2444/:2460are the member declarations; thedocblocks sit one line above.)
The other nine spec-sourced keys the card names —
typeField,baselineStartField,baselineEndField,groupByField,resourceView,effortField,capacity,autoZoomToFilter,assigneeField— carry no pointer at all and already havestandalone one-liners. They need nothing and are untouched.
The premise holds, verified two ways
GanttConfigisSpecGanttConfigintersected with a local object literal, and that localhalf declares exactly ten top-level members (
timeSegments,lockField,objectField,summaryExtent,defaultCollapsedDepth,borderColorField,dependencyTypes,timeZone,exportFileName,interactions, ending atobjectql.ts:306). None of the four is among them, so all four arrive from the spec.SpecGanttConfigisz.inputapplied totypeof GanttConfigSchema. In the installed@objectstack/spec@17.2.0's emitteddist/view.zod-Vrw2Wzfj.d.ts,GanttConfigSchema's19 members are bare
z.ZodOptionalentries with no per-member JSDoc — there is asingle type-level
Gantt Settingsdocblock and nothing else. So the pointer led to a typedocumenting nothing about the key. Premise confirmed; no bare pointer resolves to prose.
And the defect was on the published surface, not just in source: the built
dist/objectql.d.tscarried all four bare pointers before this change.⛔ The rejected route was not taken — measured, not asserted
Members were not re-declared inside the intersection. PR #6546 measured that as a
widened published surface on the built
dist/index.d.tsand it was turned down there.packages/specis untouched; the.describe()-upstream route stays in its own lane.The proof is a build-and-diff of the emitted artifact, both directions:
Shape unchanged. A structural census over the built
dist/objectql.d.ts— everymember of
ObjectGanttSchemawith its type text resolved through the TS checker, socomments are definitionally invisible to it — is byte-identical before and after:
The same holds on the raw text: the built face's 51 declaration lines diff clean with
comment lines stripped. No member added, removed or retyped.
Docs did move. Bare
See {@link GanttConfig}.in the built face went 4 → 0, andall four new prose blocks are present in
dist.The seven member-qualified pointers stayed at 7.
See {@link GanttConfig.borderColorField},.lockField,.summaryExtent,.defaultCollapsedDepth,.timeSegments,.interactionsand
.exportFileNamename members of the ten-member local half, resolve to real prose, andare correct — a substring search for
{@link GanttConfighits both forms, so they wereseparated before editing.
dependenciesField(:2430) is untouched — its lenient-alias docblock belongs toobjectui#6470, deliberately held out of this batch.
The prose is measured, not invented
Each rewrite is taken from the renderer's live read sites, because
GanttConfigRestateddoes not cover three of the four (see the note below):colorField—ObjectGantt.tsx:874-886: explicit value wins, else fall back to therecord's
status/state/priority/severity, elseGanttView's default blue.parentField—ObjectGantt.tsx:906andGanttView.tsx:156: single-parent pointer;an empty value or one naming no loaded row renders as a root.
tooltipFields—ObjectGantt.tsx:844-861andGanttView.tsx:181-186: label fromexplicit → object schema → humanized name; empty values drop their row rather than
render a dash (which is what lets a mixed-object tree list the union of every level's
fields); surviving rows replace the default date · duration · progress line.
quickFilters—GanttConfigRestatedandQuickFilterDef: options resolve from theobject schema so a dropdown offers the full domain, not just loaded values.
No pointer was swapped for another pointer, and no new
{@link}was introduced.Verification — at head
ff05e60ff, after the final commitpnpm --filter @object-ui/types buildcommand-exit 0pnpm --filter @object-ui/types type-checktsc --noEmit+tsconfig.examples.json+tsconfig.test.json)pnpm --filter @object-ui/types lint✖ 246 problems (0 errors, 246 warnings)pnpm exec vitest run packages/types/Test Files 65 passed (65)·Tests 767 passed (767)node scripts/check-changeset-presence.mjs✅ 1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)node scripts/check-changeset-no-major.mjs✅ No changeset declares a major bump.type-checkincludestsconfig.test.json, so the test files are genuinely covered ratherthan excluded. All 65 test files that exist under
packages/typesran (65 present, 65executed), including the three gantt pin suites. The 246 lint warnings are pre-existing
no-explicit-any; 0 of them fall in the edited range2417-2490.Declared narrowing on lint.
pnpm lintat the root isturbo run lint, which fans outto each package's own
eslint .— so the command run here is byte-for-byte the one therepo-wide run executes for this package. Population (127 files) is read from eslint's own
config resolution via
--format json, not guessed. Untouched files cannot move: the flatconfig extends
tseslint.configs.recommendedwithlanguageOptionscarrying onlyecmaVersionandglobals— noproject/projectService, so type-aware linting isoff and no rule's verdict on another file can depend on a JSDoc edit in this one. The
rest of the farm is CI's run.
Note for the record — the card's account of where the prose lives is partly wrong
The card states the renderer prose "exists — it is in
plugin-gantt's package-privateGanttConfigEx(nowGanttConfigRestated)". For three of the four keys that is not so.GanttConfigRestated's twelve members do not includecolorFieldortooltipFieldsatall, and its
parentFieldis declared bare with no JSDoc. OnlyquickFiltersactuallyhas prose there. So for three of these four keys the documentation did not exist anywhere
in the repo before this change — it had to be read off the renderer. That strengthens the
card rather than weakening it, but the "just move the prose" reading of the fix would have
come up empty.
Generated by Claude Code