Uh oh!
There was an error while loading. Please reload this page.
refactor(plugin-gantt): delete the taskListWidth tombstone, keep the one fact it held - #7511
Merged
os-project-manager merged 1 commit intoSep 3, 2026
Merged
Conversation
…one fact it held `GanttView` carried `const taskListWidth_LEGACY_REMOVED = null` in its body, left behind by the finished task-list-width refactor. Measured on `origin/main` `a27d153c2`: the identifier occurred exactly once in the repo — its own declaration — and zero times in a read position, in a probe run where the same shape returned 20 read sites for the live `taskListWidth` and 360 for `rowHeight`. Nothing in objectstack declared it either (0 files, controls `gantt` 94 and `rowHeight` 34 fired in that run). It bound `null`, so it carried no state, no side effect and no contract surface. What it did carry was a false signal: a name spelling `_LEGACY_REMOVED`, sitting a few hundred lines below the real derivation, reads as a seam retained for a reason recorded elsewhere, and the next reader goes looking for that reason. Its trailing comment held one fact worth keeping — the width now comes from the container `useResizeObserver` — and that fact was stated nowhere at the observer call site. It moves there instead of dying with the line: the observed container width is named as the source the auto-sized row height, base column width and task-list pane width all derive from. Pure deletion of an inert binding plus a comment: no behaviour changes, so the changeset declares an empty frontmatter (releasing nothing). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EMrWaQw3XS5DxTHxp4yRyC
Contributor
✅ 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
|
This was referenced Sep 3, 2026
os-project-manager
marked this pull request as ready for review
September 3, 2026 16:01
Uh oh!
There was an error while loading. Please reload this page.
os-project-manager
deleted the
claude/issue-7421-tasklistwidth-tombstone
branch
September 3, 2026 16:22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#7421
Head sha
73ef5ec7a. Every reading below was taken on that tree.What changed
Two lines out, two lines in, one file:
const taskListWidth_LEGACY_REMOVED = null;from theGanttViewbody (and the whitespace-only line it left behind).useResizeObservercall site now names the observed container width as the source the auto-sized row height, base column width and task-list pane width all derive from. Triage asked for exactly this: "the trailing comment records where the value went. If that fact is not already stated at theuseResizeObservercall site, carry it there rather than deleting it with the line." It was not stated there — checked at the call site,GanttView.tsx:875, which had no comment at all.Plus an empty-frontmatter changeset:
packages/plugin-gantt/srcis released source, so the presence gate wants a declaration, and there is nothing to release.Liveness probe, with the control that fired
The premise holds. Probed the declaration form and the read sites separately, never the bare word:
git grep -E '\b(const|let|var|function|class|interface|type|enum)\s+taskListWidth_LEGACY_REMOVED\b'packages/plugin-gantt/src/GanttView.tsx:2323, its own bindingtaskListWidthrowHeightBoth controls fired in the same run as the zero, so the zero is a reading. objectstack was swept too: 0 files / 0 lines for
taskListWidth_LEGACY_REMOVEDand for the baretaskListWidth, in a run where the controlsgantt(94 files / 359 lines) androwHeight(34 / 74) fired — no spec, zod or type declaration of this key exists in the platform repo.The word-count trap this card sits on, measured rather than trusted: in
GanttView.tsx,\btaskListWidth\bgoes 21 to 20 across this diff, not 21 to 0, because the tombstone's own comment saidtaskListWidthonce. A word count would read that as "the key survives". The declaration-form count goes 1 to 0.Reverse verification
Committed first, then mutated: the pre-fix file restored from the base commit under
trap … EXIT INT TERMwith an absolute path.756df02d3becomes96033b44f; the deleted text greps 0 to 1, the injected comment greps 1 to 0.756df02d3, byte-equal to HEAD's;git diff HEADprints nothing; the greps read 0 and 1 again.packages/plugin-gantt/srcthrough the root config), so nodist/sits between the mutation and the reading.What moved, and what stayed:
eslint .on the packageGanttView.tsx17GanttView.tsx162323:9 warning 'taskListWidth_LEGACY_REMOVED' is assigned a value but never used @typescript-eslint/no-unused-vars'currentDate' is assigned a value but never usedvitest run packages/plugin-gantt/src@typescript-eslint/no-unused-vars. It never failed CI because unused vars sit at warning severity in this repo, while #7332 lifted only unused imports to error. The card's conclusion is unaffected — but the line was not invisible to the tooling, it was one row inside a 353-warning backlog.No behavioural pin exists here and none was invented. The deleted binding was
nullwith zero readers, so nothing observable distinguishes the two trees — and the table shows it: the suite is 485-green on both sides. The honest red/green is the lint reading above, from a rule that already existed.Gates, each quoted from its own verdict line
Dependency closure built first (
pnpm --filter '@object-ui/plugin-gantt^...' build, exit 0), so nothing below is a could-not-run.pnpm --filter @object-ui/plugin-gantt type-check— exit 0, runningtsc --noEmit && tsc -p tsconfig.test.json(both, the second being the test project).pnpm --filter @object-ui/plugin-gantt lint— exit 0:✖ 353 problems (0 errors, 353 warnings), all pre-existing, none in the lines this diff touches.pnpm exec vitest run --maxWorkers=2 packages/plugin-gantt/srcfrom the repo root (a package-cwd run is refused, objectui#3378) —Test Files 62 passed (62)/Tests 485 passed (485).node scripts/check-changeset-presence.mjs—✅ 1 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s) … Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate.node scripts/check-changeset-no-major.mjs—✅ No changeset declares a 'major' bump.node scripts/check-control-bytes.mjs—✅ check-control-bytes: OK (scanned 6195 tracked text file(s); skipped 85 binary).Declared narrowing. The repo lint job is
turbo run lint, i.e. per-packageeslint .; only the one package this diff touches was linted. The three readings that make that a measurement rather than a skip: the population comes from ESLint's own config resolution, not from my guess —eslint . --format jsonreports 92 files linted inpackages/plugin-gantt; the counts above are that run's; andeslint.config.jsconfigures no type-aware linting (noparserOptions.project, noprojectService), so this diff cannot move the verdict of any file it does not contain. CI runs the full farm regardless.Not in scope
Clause-②: no. The diff removes a function-local
constand adds a comment — no exported symbol, prop, type, zod schema or spec key moves, so nothing on the published accept surface changes. The declaration check was derived, not assumed from the_LEGACY_REMOVEDspelling; the sweep is in the claim comment on the card.#7228 — the same file's other dead sizing arm,
columnWidthForContainerreturning 110 from all three branches — is deliberately untouched here and remains open.🤖 Generated with Claude Code
https://claude.ai/code/session_01EMrWaQw3XS5DxTHxp4yRyC
Generated by Claude Code