<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Juan Escalada — Dev Log</title><description>A working engineer’s daily log of debugging sessions, feature work and hard-won fixes — building GitProxy in the open.</description><link>https://jescalada.com/</link><language>en</language><item><title>Vitest 4 tests pass locally but fail in CI</title><link>https://jescalada.com/blog/2026-06-05-vitest-4-tests-pass-locally-fail-ci/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-06-05-vitest-4-tests-pass-locally-fail-ci/</guid><description>Bumping Vitest from 3 to 4 turned my git-proxy CI red while local stayed green. Stale node_modules, broken class mocks, and port clashes. Here&apos;s how I fixed each.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate><category>vitest</category><category>testing</category><category>mocking</category><category>ci</category><category>GitProxy</category></item><item><title>Auto-triage GitHub issues with an AI agent and Actions</title><link>https://jescalada.com/blog/2026-04-12-auto-triage-github-issues-ai-agent-actions/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-04-12-auto-triage-github-issues-ai-agent-actions/</guid><description>Build a GitHub Actions bot that triages issues and PRs with an LLM: label, dedupe, security-scan, and run it on Claude, GPT, or Gemini. Here&apos;s how I did it.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>github-actions</category><category>automation</category><category>llm-agents</category><category>litellm</category><category>GitProxy</category></item><item><title>Switching to npm trusted publishers: mind the Node version</title><link>https://jescalada.com/blog/2026-02-01-switching-npm-trusted-publishers-mind-node-version/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-02-01-switching-npm-trusted-publishers-mind-node-version/</guid><description>Moving GitProxy&apos;s npm publish from a token to OIDC trusted publishers took a few lines, except for one thing that kept failing.</description><pubDate>Sun, 01 Feb 2026 00:00:00 GMT</pubDate><category>trusted-publishing</category><category>npm</category><category>github-actions</category><category>oidc</category><category>GitProxy</category></item><item><title>A Vitest toThrow test that misses a JSON.parse error</title><link>https://jescalada.com/blog/2026-01-20-vitest-tothrow-test-misses-json-parse-error/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-01-20-vitest-tothrow-test-misses-json-parse-error/</guid><description>A Vitest test using expect().toThrow() let a JSON.parse SyntaxError escape and fail the run instead of catching it. Here&apos;s why, and the fix.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><category>vitest</category><category>testing</category><category>async</category><category>javascript</category><category>GitProxy</category></item><item><title>Moving a Git tag to a newer commit</title><link>https://jescalada.com/blog/2026-01-14-moving-git-tag-newer-commit/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-01-14-moving-git-tag-newer-commit/</guid><description>Moving a Git tag to a newer commit takes a force push, or Git rejects it because the tag already exists. Here&apos;s how, plus the gotcha that bites teammates.</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate><category>git</category><category>git-tag</category><category>git-push</category><category>github</category></item><item><title>Docker EACCES: permission denied, mkdir as a non-root user</title><link>https://jescalada.com/blog/2026-01-09-docker-eacces-permission-denied-mkdir-non-root-user/</link><guid isPermaLink="true">https://jescalada.com/blog/2026-01-09-docker-eacces-permission-denied-mkdir-non-root-user/</guid><description>A containerized Node app failed with EACCES: permission denied, mkdir &apos;./.data&apos; after dropping to a non-root user. Here&apos;s the cause and the fix.</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><category>docker</category><category>node</category><category>permissions</category><category>GitProxy</category><category>dockerfile</category></item><item><title>Migrating GitProxy&apos;s tests from Mocha and Chai to Vitest</title><link>https://jescalada.com/blog/2025-12-05-migrating-gitproxy-tests-mocha-chai-vitest/</link><guid isPermaLink="true">https://jescalada.com/blog/2025-12-05-migrating-gitproxy-tests-mocha-chai-vitest/</guid><description>How to fix all the ESM mocking errors when moving GitProxy&apos;s test suite from Mocha, Chai, Sinon and proxyquire to Vitest + TypeScript</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><category>vitest</category><category>mocha</category><category>testing</category><category>typescript</category><category>GitProxy</category></item><item><title>Setting NODE_ENV in npm scripts on Windows</title><link>https://jescalada.com/blog/2025-11-05-setting-node-env-npm-scripts-windows/</link><guid isPermaLink="true">https://jescalada.com/blog/2025-11-05-setting-node-env-npm-scripts-windows/</guid><description>Why &quot;NODE_ENV=test mocha&quot; fails on Windows, and the one-line fix with cross-env.</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><category>debugging</category><category>npm</category><category>Windows</category><category>cross-env</category><category>GitProxy</category><category>open-source</category></item><item><title>From proxyquire to Vitest: fixing &quot;undefined&quot; is not valid JSON</title><link>https://jescalada.com/blog/2025-09-14-proxyquire-vitest-fixing-undefined-not-valid-json/</link><guid isPermaLink="true">https://jescalada.com/blog/2025-09-14-proxyquire-vitest-fixing-undefined-not-valid-json/</guid><description>A git-proxy test failed with &apos;undefined&apos; is not valid JSON after moving from proxyquire to Vitest. Let&apos;s look at the cause and how to fix.</description><pubDate>Sun, 14 Sep 2025 00:00:00 GMT</pubDate><category>vitest</category><category>testing</category><category>async</category><category>javascript</category><category>GitProxy</category></item><item><title>Starting a public debugging log for GitProxy</title><link>https://jescalada.com/blog/2025-09-10-welcome-to-the-log/</link><guid isPermaLink="true">https://jescalada.com/blog/2025-09-10-welcome-to-the-log/</guid><description>I&apos;ve decided to share every debugging session and feature while building GitProxy in the open.</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate><category>meta</category><category>GitProxy</category><category>open-source</category></item></channel></rss>