Found in a browser pass over a real application's gantt view (objectstack-ai/duly#62). Filed unassigned, not claiming.
Measured on @objectstack/console 17.2.0 (objectui 190fbd01d061) in Chromium 1194. Re-checked against current main84ffdbcbb33762b5488742fb902faf45a3742e93: both functions below are unchanged there.
Symptom
Every task name truncates to about seven characters. Two rows reading Emis… and Emis… with different dates are not distinguishable, which defeats the view.

Measurement
Same page, two viewport widths, read from the DOM (all values px):
| viewport | task-list panel | name cell | Start col | End col | open btn | chart area | title span client / needed |
|---|
| 1440 | 320 | 99 | 80 | 80 | 24 | 864 | 53 / 260 |
| 1920 | 320 | 99 | 80 | 80 | 24 | 1344 | 53 / 260 |
Site environmental audit — Northgate needs 260px and is given 53px. The panel does not grow with the viewport: at 1920 the chart gains 480px and the name column gains nothing.
Two contributors, both on current main
1. The default caps at 320px regardless of how much room exists.
functiontaskListWidthForContainer(width: number){if(width<640)return140;if(width<1024)return220;return320;}2. At that default, the Start/End sub-columns switch on and take 160 of the 320.
// Show the Start/End sub-columns only when the task list is wide enough that// the title still has room. Below this threshold the title would collapse to// a few pixels (issue: bars rendered but names invisible).functionshowStartEndColumns(taskListWidth: number){returntaskListWidth>=280;}This is the sharper half, and its own comment states the intent it inverts. The threshold protects the narrow cases (140 and 220) and then produces the very outcome it names at the default wide case: 320 clears the threshold by 40px, and the columns it admits cost 160px. The title is left with 53px — "a few pixels", by the comment's own standard.
Worth noting the 160px buys a second copy of information already on the row: each row renders 8/26 → 9/2 as a sublabel directly under the title.
Proof that width is the whole story
Dragging the splitter to 580px gives the title exactly the 260px it asked for, and every name becomes readable — same data, same page, same build:

Measured across that drag: panel 320 to 580, title client width 53 to 260, needed 260 throughout.
Why an application author cannot ship the fix
taskListWidth is only ever seeded from the persisted layout — that is, from a previous user drag in that browser's localStorage. There is no authorable path to it: the spec's GanttConfigSchema declares 19 keys (startDateField, endDateField, titleField, progressField, dependenciesField, colorField, parentField, typeField, baselineStartField, baselineEndField, groupByField, resourceView, assigneeField, effortField, capacity, tooltipFields, quickFilters, autoZoomToFilter, viewMode) and none of them is a width. So today the remedy exists per user, per browser, and cannot be shipped with the app.
The gantt block is a passthrough object, so an invented gantt.taskListWidth would pass author-time validation and be silently ignored. That is precisely why this is filed rather than authored around.
Reproduction
- Any gantt view whose
titleField holds real-world names (25 to 40 characters). - Load it at 1280px or wider.
- Every name truncates in the first two words while the chart area holds 850px or more of empty grid.
Suggested directions — maintainer's call, none proposed as decided
- A. Size the default from the container rather than capping it — a share of the width, clamped, so a 1920px screen spends some of its extra 480px on names.
- B. Raise the Start/End threshold so the two date columns appear only when the title genuinely has room after paying for them (their combined 160px plus a legible title, so roughly 440px, not 280px) — and consider whether they should default off at all, given the row already prints the same dates as a sublabel.
- C. Declare a width key on the gantt block so an author can ship a sensible default for their own data. Weakest on its own: it makes every author configure their way out of a bad default, but it is the one that also serves apps whose names are unusually long.
A and B are independent and both cheap; either alone lifts the title above the "few pixels" the comment already identifies as the failure.
Related: #7070 (gantt/timeline date-axis findings).
Found in a browser pass over a real application's gantt view (objectstack-ai/duly#62). Filed unassigned, not claiming.
Measured on
@objectstack/console17.2.0 (objectui190fbd01d061) in Chromium 1194. Re-checked against currentmain84ffdbcbb33762b5488742fb902faf45a3742e93: both functions below are unchanged there.Symptom
Every task name truncates to about seven characters. Two rows reading
Emis…andEmis…with different dates are not distinguishable, which defeats the view.Measurement
Same page, two viewport widths, read from the DOM (all values px):
Site environmental audit — Northgateneeds 260px and is given 53px. The panel does not grow with the viewport: at 1920 the chart gains 480px and the name column gains nothing.Two contributors, both on current main
1. The default caps at 320px regardless of how much room exists.
2. At that default, the Start/End sub-columns switch on and take 160 of the 320.
This is the sharper half, and its own comment states the intent it inverts. The threshold protects the narrow cases (140 and 220) and then produces the very outcome it names at the default wide case: 320 clears the threshold by 40px, and the columns it admits cost 160px. The title is left with 53px — "a few pixels", by the comment's own standard.
Worth noting the 160px buys a second copy of information already on the row: each row renders
8/26 → 9/2as a sublabel directly under the title.Proof that width is the whole story
Dragging the splitter to 580px gives the title exactly the 260px it asked for, and every name becomes readable — same data, same page, same build:
Measured across that drag: panel 320 to 580, title client width 53 to 260, needed 260 throughout.
Why an application author cannot ship the fix
taskListWidthis only ever seeded from the persisted layout — that is, from a previous user drag in that browser's localStorage. There is no authorable path to it: the spec'sGanttConfigSchemadeclares 19 keys (startDateField,endDateField,titleField,progressField,dependenciesField,colorField,parentField,typeField,baselineStartField,baselineEndField,groupByField,resourceView,assigneeField,effortField,capacity,tooltipFields,quickFilters,autoZoomToFilter,viewMode) and none of them is a width. So today the remedy exists per user, per browser, and cannot be shipped with the app.The
ganttblock is a passthrough object, so an inventedgantt.taskListWidthwould pass author-time validation and be silently ignored. That is precisely why this is filed rather than authored around.Reproduction
titleFieldholds real-world names (25 to 40 characters).Suggested directions — maintainer's call, none proposed as decided
A and B are independent and both cheap; either alone lifts the title above the "few pixels" the comment already identifies as the failure.
Related: #7070 (gantt/timeline date-axis findings).