Skip to content

chore: hygiene close-out -- resizable-table proper fix, golangci-lint second pass, ls-lint node_modules ignore (BACKLOG 10/11) - #53

Merged
alicoding merged 1 commit into
mainfrom
chore/lint-second-pass
Aug 13, 2026
Merged

chore: hygiene close-out -- resizable-table proper fix, golangci-lint second pass, ls-lint node_modules ignore (BACKLOG 10/11)#53
alicoding merged 1 commit into
mainfrom
chore/lint-second-pass

Conversation

@alicoding

Copy link
Copy Markdown
Owner

Summary

  • resizable-table.spec.ts drag-timing flake, PROPER fix (Standing Goal 0011 design section (research delivered; build gated on wt-lists decision) #10, third recurrence post-hardening): test.describe.configure({ mode: 'serial' }); waitForStableBoundingBox (poll for the handle's box being identical across two consecutive reads, not just non-null); the synthesized drag moved from one batched page.mouse.move(..., { steps: N }) to discrete individually-awaited moves (browsers coalesce rapid pointermove events within one CDP command); two more expect.polls wait for the drag's actual DOM effect and the localStorage persist to land before the next step depends on them. A keyboard-resize alternative was checked and ruled out (no keyboard path exists in the component; building one would be a feature addition, not a test fix).
  • golangci-lint second pass (Standing #11b): gocritic/prealloc/contextcheck/sqlclosecheck enabled, triaged to zero findings on both build-tag variants — 14 real findings fixed (1 gocritic, 13 prealloc), zero contextcheck/sqlclosecheck findings.
  • .ls-lint.yml root node_modules ignore (Standing #11c), with a comment on the root-scoped-recursive-rule interaction that caused the original gap.
  • BACKLOG.md updated in the same change (Standing Goal 0011 design section (research delivered; build gated on wt-lists decision) #10/Lists maturation: typed datasets + List Search (goal 0011) #11 checked off).

Test plan

  • go vet . ./internal/..., golangci-lint run . ./internal/... (0 issues on both build tags), go test . ./internal/... -race -cover, both go build variants
  • scripts/check-loc.sh, ls_lint
  • npx tsc --noEmit, npx vitest run (260/260), npm run lint (0 errors), npm run boundaries (0 violations)
  • resizable-table.spec.ts verified via 5 separate fresh npx playwright test invocations (10/10 passed) — the more representative CI-realistic methodology after an in-process --repeat-each stress loop turned out to be self-confounding (accumulating same-worker/browser degradation across dozens of rapid iterations, not a real CI condition)
  • Local lefthook pre-commit suite green

🤖 Generated with Claude Code

https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh

… second pass, ls-lint node_modules ignore (BACKLOG 10/11)

resizable-table.spec.ts (Standing #10, third recurrence post-hardening):
structural fix, not another timeout bump. test.describe.configure({
mode: 'serial' }) makes the file's never-interleave requirement
explicit; waitForStableBoundingBox polls for the handle's bounding box
being IDENTICAL across two consecutive reads (a non-null box mid-reflow
was always possible the old check couldn't see); the synthesized drag
moved from one batched page.mouse.move(..., { steps: N }) call to
discrete, individually-awaited moves (browsers coalesce rapid
pointermove events within one CDP command -- real, documented browser
behavior via PointerEvent.getCoalescedEvents()); two more expect.polls
wait for the drag's actual DOM effect and the localStorage persist to
land before the next step depends on them. A keyboard-resize
alternative was checked and ruled out -- shared/ResizableTable.tsx has
no keyboard path at all, building one would be a feature addition, not
a test fix. Verified via 5 separate fresh playwright invocations
(10/10) -- an in-process --repeat-each stress loop turned out to be a
self-confounding methodology (accumulating same-worker degradation,
not representative of a real CI run).

golangci-lint second pass (Standing #11b, named future work in goal
0028): gocritic/prealloc/contextcheck/sqlclosecheck enabled. Triaged to
zero findings on both build-tag variants -- 14 real findings fixed (1
gocritic assignOp, 13 prealloc slice-capacity hints), zero
contextcheck/sqlclosecheck findings, no rule needed a scoped tweak or
nolint suppression this pass.

.ls-lint.yml (Standing #11c): root ignore: list gains node_modules,
with a comment on the root-scoped-recursive-rule interaction that
caused the original gap.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh
@alicoding
alicoding enabled auto-merge (squash) August 13, 2026 06:32
@alicoding
alicoding merged commit 0cc73a2 into main Aug 13, 2026
16 checks passed
alicoding added a commit that referenced this pull request Aug 13, 2026
… second pass, ls-lint node_modules ignore (BACKLOG 10/11) (#53)

resizable-table.spec.ts (Standing #10, third recurrence post-hardening):
structural fix, not another timeout bump. test.describe.configure({
mode: 'serial' }) makes the file's never-interleave requirement
explicit; waitForStableBoundingBox polls for the handle's bounding box
being IDENTICAL across two consecutive reads (a non-null box mid-reflow
was always possible the old check couldn't see); the synthesized drag
moved from one batched page.mouse.move(..., { steps: N }) call to
discrete, individually-awaited moves (browsers coalesce rapid
pointermove events within one CDP command -- real, documented browser
behavior via PointerEvent.getCoalescedEvents()); two more expect.polls
wait for the drag's actual DOM effect and the localStorage persist to
land before the next step depends on them. A keyboard-resize
alternative was checked and ruled out -- shared/ResizableTable.tsx has
no keyboard path at all, building one would be a feature addition, not
a test fix. Verified via 5 separate fresh playwright invocations
(10/10) -- an in-process --repeat-each stress loop turned out to be a
self-confounding methodology (accumulating same-worker degradation,
not representative of a real CI run).

golangci-lint second pass (Standing #11b, named future work in goal
0028): gocritic/prealloc/contextcheck/sqlclosecheck enabled. Triaged to
zero findings on both build-tag variants -- 14 real findings fixed (1
gocritic assignOp, 13 prealloc slice-capacity hints), zero
contextcheck/sqlclosecheck findings, no rule needed a scoped tweak or
nolint suppression this pass.

.ls-lint.yml (Standing #11c): root ignore: list gains node_modules,
with a comment on the root-scoped-recursive-rule interaction that
caused the original gap.


Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
alicoding added a commit that referenced this pull request Aug 15, 2026
… second pass, ls-lint node_modules ignore (BACKLOG 10/11) (#53)

resizable-table.spec.ts (Standing #10, third recurrence post-hardening):
structural fix, not another timeout bump. test.describe.configure({
mode: 'serial' }) makes the file's never-interleave requirement
explicit; waitForStableBoundingBox polls for the handle's bounding box
being IDENTICAL across two consecutive reads (a non-null box mid-reflow
was always possible the old check couldn't see); the synthesized drag
moved from one batched page.mouse.move(..., { steps: N }) call to
discrete, individually-awaited moves (browsers coalesce rapid
pointermove events within one CDP command -- real, documented browser
behavior via PointerEvent.getCoalescedEvents()); two more expect.polls
wait for the drag's actual DOM effect and the localStorage persist to
land before the next step depends on them. A keyboard-resize
alternative was checked and ruled out -- shared/ResizableTable.tsx has
no keyboard path at all, building one would be a feature addition, not
a test fix. Verified via 5 separate fresh playwright invocations
(10/10) -- an in-process --repeat-each stress loop turned out to be a
self-confounding methodology (accumulating same-worker degradation,
not representative of a real CI run).

golangci-lint second pass (Standing #11b, named future work in goal
0028): gocritic/prealloc/contextcheck/sqlclosecheck enabled. Triaged to
zero findings on both build-tag variants -- 14 real findings fixed (1
gocritic assignOp, 13 prealloc slice-capacity hints), zero
contextcheck/sqlclosecheck findings, no rule needed a scoped tweak or
nolint suppression this pass.

.ls-lint.yml (Standing #11c): root ignore: list gains node_modules,
with a comment on the root-scoped-recursive-rule interaction that
caused the original gap.


Claude-Session: https://claude.ai/code/session_018pkViCNAuZp2vBv2K9AbUh

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant