Joshua Shay Kricheli NeuroSymbolic AI
v2 v1

Release · v3.14.32

Cache the gems, and stop the log hiding the real…

perf(netlify): cache the gems, and stop the log hiding the real problem

perf v3.14.32 August 18, 2026 Joshua Shay Kricheli 9cb2eff

Details

Could not read the Netlify logs directly — there is no Netlify token on this
machine, in the environment, or in the repo secrets, and the deploy log URLs
need auth. So the build was reproduced locally with netlify.toml's own command
and profiled from there. Three findings, two of them fixed here.
**98 gems were reinstalled on every build.** `github-pages` pulls in 98 gems,
95 MB. Netlify caches `vendor/bundle` between builds and nothing else where gems
might land — and `.bundle/config`, which sets that path locally, is git-ignored,
so Netlify was installing to the default system path and starting from scratch
every time. `BUNDLE_PATH` is now set in `[build.environment]`, which is the only
place it can go given the ignore rule.
**The log's own noise was hiding things.** Every install printed pnpm's
"Update available! 10.34.4 -> 11.22.0" box; nothing acts on it and the version
is pinned by `packageManager`. `update-notifier=false` in a new `.npmrc` turns
it off everywhere, CI included.
**A missing token degrades silently into a slow build.** Reproducing the build
surfaced `GitHub Metadata: No GitHub API authentication could be found` — the
warning appears whenever `JEKYLL_GITHUB_TOKEN` is empty, and then both
`jekyll-remote-theme` and `jekyll-github-metadata` hit the anonymous GitHub API
limit of 60 requests an hour, per build IP, shared across Netlify. That is what
`faraday-retry` is in the Gemfile for, and a build that spends its time backing
off against a 403 looks exactly like a slow build. netlify.toml now says so in
the log, by name, with the fix.
Deliberately a warning and not a hard failure: if the variable is currently
unset, builds are succeeding slowly, and turning that into a red build would be
a worse trade than saying so plainly.
Also ruled out while looking: the build is fully deterministic — two consecutive
builds of the same tree produce byte-identical output across all 1032 files — so
Netlify is not re-uploading unchanged pages. 939 of those 1032 files are
generated change-log pages, and they cannot be skipped on previews: the version
of every page is a function of the whole history, so producing even the index
needs the same history the full set does.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DAJJ63FFnLoD5XLpu6yJaG

Files changed (2)

.npmrc +4 −0
netlify.toml +16 −0