<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Engineering notes</title><link>https://sites.zyp2.gig-io.com/blog/</link><description>Tips, patterns and practice from building software with AI agents.</description><item><title>Uncommitted changes are part of the build</title><link>https://sites.zyp2.gig-io.com/blog/uncommitted-changes-are-part-of-the-build/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/uncommitted-changes-are-part-of-the-build/</guid><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate><description>A fingerprint built from the commit at HEAD ignores edits in the working tree. We added a hash of the diff and the untracked source files, and a test that edits, adds and reverts.</description></item><item><title>When git cannot answer, rebuild</title><link>https://sites.zyp2.gig-io.com/blog/when-git-cannot-answer-rebuild/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/when-git-cannot-answer-rebuild/</guid><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate><description>A fingerprint that falls back to a plain string when git fails can match a stored release. We made an unknown fingerprint read stale and force a rebuild, and wrote tests for both outcomes.</description></item><item><title>Hand the designer what ships</title><link>https://sites.zyp2.gig-io.com/blog/hand-the-designer-what-ships/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/hand-the-designer-what-ships/</guid><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate><description>When a design tool needs to show your pages, export the build's own resolved output, not your templates and content. A versioned, deterministic directory of exactly what ships is the only preview that cannot drift from the site.</description></item><item><title>Preview with the gate's own code</title><link>https://sites.zyp2.gig-io.com/blog/preview-with-the-gates-own-code/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/preview-with-the-gates-own-code/</guid><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><description>A preview that estimates what the gate will do is a second implementation of the gate, and it will drift. Make the preview call the gate's own function, so a clean preview is the build passing.</description></item><item><title>The default that failed open</title><link>https://sites.zyp2.gig-io.com/blog/the-default-that-failed-open/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/the-default-that-failed-open/</guid><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><description>An optional argument with a safe-looking default is a guard that a forgetful caller can skip. For anything that protects a boundary, make the argument required and let the compiler refuse the caller.</description></item><item><title>Two seats per task</title><link>https://sites.zyp2.gig-io.com/blog/two-seats-per-task/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/two-seats-per-task/</guid><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate><description>One agent builds each task and a fresh one reviews it before the next task starts; one scoped re-review per fix; one whole-branch review at the end. The shape matters more than the model.</description></item><item><title>A plan the next session can run</title><link>https://sites.zyp2.gig-io.com/blog/a-plan-the-next-session-can-run/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/a-plan-the-next-session-can-run/</guid><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate><description>An implementation plan written for an agent with no memory of the design conversation needs exact code in every step, a brief per task and a ledger that outlives the session.</description></item><item><title>Refuse, don't warn</title><link>https://sites.zyp2.gig-io.com/blog/refuse-dont-warn/</link><guid isPermaLink="true">https://sites.zyp2.gig-io.com/blog/refuse-dont-warn/</guid><pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate><description>A build that warns about a leak will ship the leak. Make every check a refusal with a name, prove each one with a red case first, and let the build fail closed.</description></item></channel></rss>
