Skip to content

Cross-workspace correctness fixes and lint cleanup#155

Merged
kalevski merged 5 commits into
mainfrom
chore/correctness-lint-sweep
Jun 24, 2026
Merged

Cross-workspace correctness fixes and lint cleanup#155
kalevski merged 5 commits into
mainfrom
chore/correctness-lint-sweep

Conversation

@kalevski

Copy link
Copy Markdown
Owner

Bug fixes:

  • base/BPlusIndex: collect leaf IDs via authoritative tree descent instead of the post-COW-unreliable nextPageId sibling chain; normalize -0 → +0 on number deserialize.
  • base/Vec2.negate: avoid producing -0 for zero components.
  • base/SpatialHash.nearest: return null on empty set; honor maxDist as a hard ring-search cutoff.
  • base/formatByteSize: treat sub-1-byte values as "0 Bytes".
  • base/slugify: keep underscores as word separators.
  • logging/StreamReporter: rotate only after the first line and on >= maxBytes.
  • node/oidc: thread caller fetchImpl/headers/timeout/retry into JWKS retrieval via fetchWithOptions + createLocalJWKSet; bypass shared cache for custom headers too (confused-deputy/SSRF guard).
  • web-components/dialog-base: include self + parent chain when collecting inert ancestors.

Lint/style:

  • eslint: scope scripts glob to /scripts/; relax namespace/empty-interface rules for generated react-types.ts.
  • Replace value-returning ternaries with if/else, let → const, function exprs → arrows; annotate intentional no-this-alias / empty-catch / require.
  • Drop stale react-hooks/exhaustive-deps disables.

Tests:

  • Stub navigator/crypto via Object.defineProperty (getter-only on modern Node).
  • Mock phaser in GameObjectComponent test to avoid browser-global init.
  • Correct Color luminance (#767676 ≈ 0.1812), DisjointSet count, PageCache LRU expectations.

kalevski and others added 5 commits June 24, 2026 23:21
Bug fixes:
- base/BPlusIndex: collect leaf IDs via authoritative tree descent instead
  of the post-COW-unreliable nextPageId sibling chain; normalize -0 → +0 on
  number deserialize.
- base/Vec2.negate: avoid producing -0 for zero components.
- base/SpatialHash.nearest: return null on empty set; honor maxDist as a
  hard ring-search cutoff.
- base/formatByteSize: treat sub-1-byte values as "0 Bytes".
- base/slugify: keep underscores as word separators.
- logging/StreamReporter: rotate only after the first line and on >= maxBytes.
- node/oidc: thread caller fetchImpl/headers/timeout/retry into JWKS retrieval
  via fetchWithOptions + createLocalJWKSet; bypass shared cache for custom
  headers too (confused-deputy/SSRF guard).
- web-components/dialog-base: include self + parent chain when collecting
  inert ancestors.

Lint/style:
- eslint: scope scripts glob to **/scripts/**; relax namespace/empty-interface
  rules for generated react-types.ts.
- Replace value-returning ternaries with if/else, let → const, function
  exprs → arrows; annotate intentional no-this-alias / empty-catch / require.
- Drop stale react-hooks/exhaustive-deps disables.

Tests:
- Stub navigator/crypto via Object.defineProperty (getter-only on modern Node).
- Mock phaser in GameObjectComponent test to avoid browser-global init.
- Correct Color luminance (#767676 ≈ 0.1812), DisjointSet count, PageCache LRU
  expectations.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
package-lock.json only carried darwin-arm64 native binaries (written by a
partial `npm install <pkg>` on macOS, which prunes non-host optional deps —
npm/cli#4828). `npm ci` on the Linux CI runner then failed to install
@rollup/rollup-linux-x64-gnu, breaking the build step. Regenerated via a
clean install so all platform binaries (rollup, esbuild, sharp, swc,
lightningcss, tailwind-oxide) are recorded.

Also fixed 2 unhandled promise rejections in withTimeout.test.ts that would
fail the test step once the build was unblocked: the `expect(p).rejects`
assertion was attached after advancing fake timers, leaving p's rejection
momentarily unhandled. Attach the assertion before advancing timers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
taskforge's @toolcase/base + web-components deps are file:../ workspace
siblings consumed from their gitignored built lib/, so context: taskforge
left them unreachable and the Next build died with module-not-found.

- Dockerfile: monorepo multi-stage build (npm ci links the file: deps,
  build base then web-components then taskforge); runtime stage mirrors
  Next's nested standalone layout (taskforge/server.js).
- .dockerignore (root): excludes node_modules, published lib/ outputs,
  .next, examples/dist + carries over taskforge secret/state excludes
  (.workspace, .claude-accounts, *.db*, .env). Keeps taskforge/lib (source).
- workflow: context: . + file: taskforge/Dockerfile; broaden paths to
  rebuild on base/web-components/lockfile changes.
@kalevski kalevski merged commit 4d177ca into main Jun 24, 2026
2 checks passed
@kalevski kalevski deleted the chore/correctness-lint-sweep branch June 24, 2026 22:30
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