Measured while implementing #5903 (declare the cast-read gantt keys). Filed
unassigned, observational — recording a measurement, not proposing the fix.
The fact
#5903 counted the keys ObjectGantt reads through (schema as any).K. An
AST enumeration of every top-level key read off the schema prop in
packages/plugin-gantt/src/** (non-test) finds 47 distinct keys. Eleven were
the cast reads #5903 handled. Of the remaining 36, twenty-four are read bare
by getGanttConfig (ObjectGantt.tsx:350-381) and are declared by neither
ObjectGanttSchema nor ObjectGridSchema:
dependenciesField colorField borderColorField parentField
typeField lockField objectField summaryExtent
defaultCollapsedDepth tooltipFields baselineStartField baselineEndField
groupByField resourceView assigneeField effortField
capacity quickFilters autoZoomToFilter timeSegments
interactions exportFileName timeZone dependencyTypes
These are the "flattened ObjectGanttSchema style" branch — the same
GanttConfig members the { gantt: { … } } block carries, spelled at the top
level.
Why it is the same defect with a different mechanism
#5903's eleven were invisible because a cast erased the type. These twenty-four
are invisible because BaseSchema carries [key: string]: any (#5155's
structural ceiling), so a bare schema.colorField type-checks as any with no
cast needed. Same outcome — nothing connects read to declaration — reached
without any syntax to grep for. That is why they score zero on the cast-aware
sweep #5903 published, and why an enumeration has to be AST-based to see them at
all.
What is different, and why this is not just "#5903 times two"
Most of the twenty-four are already modelled by the spec's GanttConfigSchema
(or by objectui's GanttConfig extension for timeSegments). So the question
here is not "invent a declaration" — it is whether the flattened top-level
spelling is a sanctioned second authoring form for GanttConfig, or whether
authors should be moved to the gantt block. That is a ruling, and it decides
whether the resolution is "declare 24 keys" or "retire the flat branch".
Related: #4631 is the on-hold CLASS card. This is not an attempt to reopen it —
#5903's triage said doing the gantt instance does not reopen the class, and this
card is the same instance's remainder, filed so the measurement is not lost.
Reproduce
The cast-aware regex in #5903 scores every one of these 0. An AST walk that
treats an expression as schema-rooted after stripping as / parenthesis /
non-null wrappers, and follows local aliases, finds all 47; the same walk finds
the legitimately declared objectName, viewMode, startDateField and label,
which is the counter-probe that it is not blind.
Generated by Claude Code
Measured while implementing #5903 (declare the cast-read gantt keys). Filed
unassigned, observational — recording a measurement, not proposing the fix.
The fact
#5903 counted the keys
ObjectGanttreads through(schema as any).K. AnAST enumeration of every top-level key read off the
schemaprop inpackages/plugin-gantt/src/**(non-test) finds 47 distinct keys. Eleven werethe cast reads #5903 handled. Of the remaining 36, twenty-four are read bare
by
getGanttConfig(ObjectGantt.tsx:350-381) and are declared by neitherObjectGanttSchemanorObjectGridSchema:These are the "flattened
ObjectGanttSchemastyle" branch — the sameGanttConfigmembers the{ gantt: { … } }block carries, spelled at the toplevel.
Why it is the same defect with a different mechanism
#5903's eleven were invisible because a cast erased the type. These twenty-four
are invisible because
BaseSchemacarries[key: string]: any(#5155'sstructural ceiling), so a bare
schema.colorFieldtype-checks asanywith nocast needed. Same outcome — nothing connects read to declaration — reached
without any syntax to grep for. That is why they score zero on the cast-aware
sweep #5903 published, and why an enumeration has to be AST-based to see them at
all.
What is different, and why this is not just "#5903 times two"
Most of the twenty-four are already modelled by the spec's
GanttConfigSchema(or by objectui's
GanttConfigextension fortimeSegments). So the questionhere is not "invent a declaration" — it is whether the flattened top-level
spelling is a sanctioned second authoring form for
GanttConfig, or whetherauthors should be moved to the
ganttblock. That is a ruling, and it decideswhether the resolution is "declare 24 keys" or "retire the flat branch".
Related: #4631 is the on-hold CLASS card. This is not an attempt to reopen it —
#5903's triage said doing the gantt instance does not reopen the class, and this
card is the same instance's remainder, filed so the measurement is not lost.
Reproduce
The cast-aware regex in #5903 scores every one of these 0. An AST walk that
treats an expression as schema-rooted after stripping
as/ parenthesis /non-null wrappers, and follows local aliases, finds all 47; the same walk finds
the legitimately declared
objectName,viewMode,startDateFieldandlabel,which is the counter-probe that it is not blind.
Generated by Claude Code