Skip to content

chore(deps): security maintenance and CI/deploy hygiene - #40

Merged
jacksonkasi1 merged 3 commits into
mainfrom
chore/security-maintenance
Oct 21, 2026
Merged

jacksonkasi1 merged 3 commits into
mainfrom
chore/security-maintenance

Conversation

@jacksonkasi1

@jacksonkasi1 jacksonkasi1 commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Security: regenerated bun.lock so every dependency resolves to its latest in-range patched version. bun audit goes from 236 advisories (6 critical, 100 high) to 4. The remaining 4 have no safe fix: braces has no patched release, esbuild's issue only affects dev servers, and cookie's is low severity.
    • Includes Next.js 16.4.2 (critical RCE/SSRF fixes), express/proxy-addr, hono, axios, devalue, undici, path-to-regexp and picomatch.
  • vitest ^4.1.11 in all workspaces. @tablecraft/client was still on vitest 2.x, which pulled in vulnerable tinypool and Vite 5.
  • Root overrides pins uuid ^11.1.1, which exceljs uses transitively.
  • Lockfile keeps configVersion: 0 (hoisted layout). Bun 1.3 gives a freshly created lockfile the isolated layout by default, which breaks shared type resolution and the Vercel install.
  • CI: actions/checkout@v5 replaces v4, which ran on the deprecated Node 20 runtime.
  • Fly.io deploy is now opt-in (vars.ENABLE_FLY_DEPLOY == 'true'). The FLY_API_TOKEN secret was never set, so the job failed on every push. The backend deploys through Koyeb.

No runtime API changes and no major-version upgrades. Breaking upgrades such as zod 4 and react-table 9 are left out on purpose, because many downstream teams depend on these packages.

Validation (local, Node 22 + Bun 1.3.14, mirroring CI)

  • bun install --frozen-lockfile ✅
  • bootstrap builds + bun run typecheck ✅
  • bun run test: engine 377, table 120, adapter-sveltekit 26, client 19, plus all other packages ✅
  • bun run build (all packages and apps) ✅

🤖 Generated with Claude Code

Summary by Sourcery

Harden dependency and automation maintenance while keeping deployments and CI reliable without changing runtime APIs.

Bug Fixes:

  • Refresh dependency resolutions to address known security vulnerabilities across the dependency tree.
  • Prevent the Fly.io deployment workflow from failing when Fly.io credentials are not configured.

Enhancements:

  • Standardize workspace testing on Vitest 4.1.11 and pin the transitive uuid dependency to a patched version.

Build:

  • Regenerate the Bun lockfile while preserving the hoisted dependency layout required by the project.

CI:

  • Upgrade GitHub Actions checkout steps to v5 and disable credential persistence during checkout.

Deployment:

  • Make Fly.io deployment opt-in through the ENABLE_FLY_DEPLOY repository variable.

- regenerate bun.lock so all deps resolve to their latest in-range
  patched versions (bun audit: 236 -> 4 advisories, none fixable)
  incl. next 16.4.2, express/proxy-addr, hono, axios, devalue, undici
- bump vitest to ^4.1.11 everywhere (client was on 2.x pulling in
  vulnerable tinypool/vite 5); override uuid to ^11.1.1 for exceljs
- add bunfig.toml pinning the hoisted linker (Bun 1.3 defaults fresh
  lockfiles to isolated, which breaks shared type resolution)
- actions/checkout v4 -> v5 (Node 20 runtime deprecation)
- make the Fly.io deploy opt-in via vars.ENABLE_FLY_DEPLOY; it had no
  FLY_API_TOKEN and failed on every push (backend deploys via Koyeb)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Reviewer's Guide

This maintenance PR refreshes the Bun lockfile to substantially reduce dependency advisories while preserving in-range and workspace-compatible versions, standardizes Vitest and transitive uuid resolution, and pins Bun’s hoisted install layout. It also updates checkout actions and prevents unconfigured Fly.io deployments from failing every push; no runtime API or intentional major-version changes are introduced.

File-Level Changes

Change Details Files
Regenerated dependency resolution to apply patched in-range versions and enforce workspace dependency hygiene.
  • Updated the lockfile across the dependency tree, including security fixes for Next.js, express/proxy-addr, hono, axios, devalue, undici, path-to-regexp, and picomatch.
  • Standardized Vitest on ^4.1.11 across workspaces, including upgrading the client from the 2.x line.
  • Added a root uuid ^11.1.1 override for the transitive exceljs dependency.
  • Added Bun configuration forcing the hoisted linker to preserve shared type resolution.
bun.lock
bunfig.toml
package.json
apps/hono-example/package.json
apps/sveltekit-example/package.json
packages/adapter-elysia/package.json
packages/adapter-express/package.json
packages/adapter-hono/package.json
packages/adapter-next/package.json
packages/adapter-sveltekit/package.json
packages/client/package.json
packages/codegen/package.json
packages/engine/package.json
packages/plugin-cache/package.json
packages/table/package.json
Modernized CI and made Fly.io deployment explicitly opt-in.
  • Moved checkout actions from v4 to v5 to avoid the deprecated Node 20 runtime.
  • Gated the Fly.io deploy job on ENABLE_FLY_DEPLOY being true, while exposing FLY_API_TOKEN at the job level.
  • Retained the existing Fly remote deployment command without changing application runtime behavior.
.github/workflows/ci.yml
.github/workflows/deploy-hono.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 7 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3b56d5e5-39f2-41a4-82cb-0c5e54dfd33d
📥 Commits

Reviewing files that changed from the base of the PR and between 33e0eb1 and 0712e54.

⛔ Files ignored due to path filters: 1
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing: 15
  • .github/workflows/ci.yml
  • .github/workflows/deploy-hono.yml
  • apps/hono-example/package.json
  • apps/sveltekit-example/package.json
  • package.json
  • packages/adapter-elysia/package.json
  • packages/adapter-express/package.json
  • packages/adapter-hono/package.json
  • packages/adapter-next/package.json
  • packages/adapter-sveltekit/package.json
  • packages/client/package.json
  • packages/codegen/package.json
  • packages/engine/package.json
  • packages/plugin-cache/package.json
  • packages/table/package.json
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@vercel

vercel Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
tablecraft-demo Ready Ready Preview Oct 21, 2026 7:46pm UTC

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 3 issues

Fixed security issues:

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path=".github/workflows/deploy-hono.yml" line_range="19-20" />
<code_context>
     env:
       DATABASE_URL: postgres://tablecraft:tablecraft@localhost:5432/tablecraft_test
     steps:
</code_context>
<issue_to_address>
**Fly credentials reach third-party actions**

When the Fly deploy job runs with `FLY_API_TOKEN` configured, `setup-flyctl` inherits the job-level token and can exfiltrate it, enabling unauthorized Fly.io deployments.

Move `FLY_API_TOKEN` from job-level `env` to only the deploy step's `env`.
</issue_to_address>

### Comment 2
<location path="package.json" line_range="20" />
<code_context>
     "@types/react": "^19.2.13"
+  },
+  "overrides": {
+    "uuid": "^11.1.1"
   }
 }
</code_context>
<issue_to_address>
**UUID override remains vulnerable**

When a consumer reaches one of the affected UUID functions with a custom buffer, `uuid@11.1.1` remains below the fixed version cited for GHSA-w5hq-g745-h8pq. When a caller uses `uuid.v3()`, `uuid.v5()`, or `uuid.v6()` with a custom buffer, the missing bounds check permits out-of-bounds writes, so the dependency override does not fully remove this advisory.

Use a release at or above the advisory’s fixed version if compatible, or otherwise avoid claiming this override clears the advisory and mitigate the vulnerable path.
</issue_to_address>

### Comment 3
<location path="bunfig.toml" line_range="1" />
<code_context>
+[install]
+# Keep the hoisted node_modules layout the workspace packages rely on for
+# shared type definitions (Bun 1.3 defaults fresh lockfiles to "isolated").
</code_context>
<issue_to_address>
**Configuration-only pushes skip deployment**

When a push changes only `bunfig.toml`, the Fly workflow path filter does not match, so no deployment starts and the production app keeps the previous configuration.

Add `bunfig.toml` to the Fly workflow's path filters.

Also at `bunfig.toml:4`.
</issue_to_address>

Sourcery assessment

Approval pending. 3 findings to address first.

Blocking findings: .github/workflows/deploy-hono.yml:20, package.json:20, bunfig.toml:1


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread .github/workflows/deploy-hono.yml Outdated
Comment thread package.json
"@types/react": "^19.2.13"
},
"overrides": {
"uuid": "^11.1.1"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Medium · UUID override remains vulnerable

When a consumer reaches one of the affected UUID functions with a custom buffer, uuid@11.1.1 remains below the fixed version cited for GHSA-w5hq-g745-h8pq. When a caller uses uuid.v3(), uuid.v5(), or uuid.v6() with a custom buffer, the missing bounds check permits out-of-bounds writes, so the dependency override does not fully remove this advisory.

Use a release at or above the advisory’s fixed version if compatible, or otherwise avoid claiming this override clears the advisory and mitigate the vulnerable path.

Prompt for AI agents
In `package.json` at line 20:

**UUID override remains vulnerable**

When a consumer reaches one of the affected UUID functions with a custom buffer, `uuid@11.1.1` remains below the fixed version cited for GHSA-w5hq-g745-h8pq. When a caller uses `uuid.v3()`, `uuid.v5()`, or `uuid.v6()` with a custom buffer, the missing bounds check permits out-of-bounds writes, so the dependency override does not fully remove this advisory.

Use a release at or above the advisory’s fixed version if compatible, or otherwise avoid claiming this override clears the advisory and mitigate the vulnerable path.

Comment thread bunfig.toml Outdated
jacksonkasi1 and others added 2 commits October 22, 2026 01:12
Vercel's install rejected the configVersion 1 lockfile/bunfig combo;
configVersion 0 is the format main already deploys with.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jacksonkasi1
jacksonkasi1 merged commit 429385a into main Oct 21, 2026
7 checks passed
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