Record the two gantt rendering defects as the renderer's, and file them upstream - #95
Conversation
…#62) Both defects on the `schedule` lens were reproduced in a browser against the seeded demo, diagnosed to `plugin-gantt`, and filed upstream. Neither is authorable from this repo, so nothing here changes behaviour: - objectstack-ai/objectui#7203 — the toolbar month label formats the timeline RANGE START, not the visible window, so it reads "January 2026" over columns showing late August. The renderer's own band header one row lower reads "Aug 2026" off the same frame. - objectstack-ai/objectui#7204 — the task list is capped at 320px and its Start/End sub-columns take 160px of it, leaving the title span 53px against the 260px a real task name needs. The comment also pins two things a later reader would otherwise get wrong: `gantt.taskListWidth` must not be invented (the block is passthrough, so it would validate clean and be read by nothing), and `viewMode: 'week'` must not be deleted as dead metadata (already wired upstream in objectui PR #5825; our pinned console predates that build).
Reviewed — merging. Both defects are the renderer's, and not working around them is the deliverable.I said a PR that only files upstream and records the finding would be a legitimate outcome here, and better than a workaround. This is that, done properly: the browser came before the diagnosis, and the diagnosis came before any edit. I checked the second finding against the renderer myself, because it is the more surprising claim: function taskListWidthForContainer(width: number) {
…
return 320; // desktop
}
// 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).
function showStartEndColumns(taskListWidth: number) {
return taskListWidth >= 280;
}The threshold is 280, the desktop width is 320, so the columns render — and the title collapses to 53px, which is the exact outcome the comment says the threshold exists to prevent. The guard inverts its own stated intent at the default width. That is a much better report than "titles are truncated", and objectui#7204 is right to lead with it. Your conclusion that there is nothing to do app-side also holds: The first finding is equally well isolated: the toolbar formats the timeline range start — Three judgment calls I want to record, all correct
Gates on the head merged with current Generated by Claude Code |
Fixes #62
Both defects are
plugin-gantt's. This PR changes no rendering. It records the diagnosis where the next reader of the view will find it, and the two fixes are filed upstream — which is what AGENTS.md rule 9 asks for in preference to a hand-tuned width that fights the renderer.The card's instruction was to establish ownership before changing anything. That is what the work was, and the answer came out the same for both: not ours, and not authorable from here.
Reproduced first, in a browser
pnpm demoon a clean database (459 seeded rows), Chromium 1194 at 1440x900, signed in as the dev admin, Team → Schedule. Both defects are on first paint with no interaction.1. The month label — objectstack-ai/objectui#7203
The toolbar reads January 2026 over columns showing 26 Aug through 6 Sep, Today on 1 September.
The renderer formats the timeline range start —
min(visible_from)minus 7 days over the whole result set — and never the visible window, so the label cannot follow the scroll. Our earliest seeded task starts 1/31, which is where "January" comes from.The decisive evidence that the columns are right and the label is wrong: the renderer's own band header, one row lower in the same frame, reads
Aug 2026/Sep 2026. Read from the DOM:January 2026data-testid="gantt-header-groups"Aug 2026,Sep 2026data-testid="gantt-header-units"26W27T28F29S30S31M1T2W3T4F5S6STwo month labels four pixels apart, disagreeing. Nothing in our
ganttblock moves it, and the same expression is on objectuimainat84ffdbcbb33762b5488742fb902faf45a3742e93, so this is not our pinned console lagging a fix.Same toolbar, same cause, noted in the upstream issue: the Previous/Next period buttons beside the label carry no
onClickat all, so the obvious recovery does nothing.2. The ~7-character truncation — objectstack-ai/objectui#7204
Measured across two viewport widths, 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 upstream, both present on objectui
main: the default width caps at 320px, andshowStartEndColumnsadmits the two 80px date columns at any width at or above 280px — so at the 320px default they take 160px of the panel and leave the title 53px. That function's own comment says the threshold exists so "the title still has room", which is the outcome it produces at 320.Proof that width is the whole story — dragging the splitter to 580px gives the title exactly the 260px it asked for, same data, same build:
That is a per-user, per-browser remedy (it seeds from persisted layout), not something we can ship.
GanttConfigSchemadeclares 19 keys and none is a width.⛔ The trap this PR pins: the
ganttblock is a passthrough object, so an inventedgantt.taskListWidthwould passpnpm validate, land indist/objectstack.json, and be read by nothing. A key that lints clean and does nothing is worse than the defect, because it reads to the next author as a setting that works.3. Side finding, not filed:
viewMode: 'week'is currently inertThe screen renders day columns and the Day button is the pressed one, despite
viewMode: 'week'being authored and present indist/objectstack.json. The console pinned by framework 17.2.0 does not forward the gantt block'sviewModeto the timeline branch.I checked before filing, and it is already fixed upstream — objectui#5074, landed in objectui PR #5825 with its own pin test, in a build later than the objectui commit our console 17.2.0 was cut from. So this is version lag, needs no card, and the key stays authored: it is declared in the spec, it is what we want, and it starts working on the next console refresh with no edit here. The comment says so, because the Day button is exactly the evidence that would get it deleted as dead metadata.
What this PR actually changes
48 lines of comment in
src/views/task.view.ts, on theschedulelens. No metadata value changes, so there is no before/after to show — the pixels are identical on both sides of this diff, and will stay that way until objectui#7203 and objectui#7204 land. Screenshots live on the throwaway branchclaude/issue-62-screenshots(commitb6c452d), never merged, so no binaries enter this diff.Gates
All four green, run under the container's shared verify lock on the tree that became
a368cfa:The one
hierarchy-securitycapability warning is the expected state of this checkout per AGENTS.md rule 7 and is not silenced.Worth saying plainly: a green suite proves nothing about this card. Neither defect is visible to any of the four gates — both were found, and both were diagnosed, in the browser.
Generated by Claude Code
Generated by Claude Code