<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Andrey Gaag - Field Notes &amp; Articles</title><description>Field notes and long-form articles on AI agents, LLM systems, and agent reliability.</description><link>https://andreygaag.com/</link><language>en</language><item><title>An API Schema Describes Vendor Intent, Not Client Behavior</title><link>https://andreygaag.com/notes/2026-08-14-api-schema-describes-vendor-intent/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-14-api-schema-describes-vendor-intent/</guid><description>A documented hash in a VK button broke mini-app navigation; comparing three links found the cause where another schema-based hypothesis did not.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item><item><title>A Dynamic Tail in the System Prompt Disables the Provider Cache</title><link>https://andreygaag.com/notes/2026-08-14-dynamic-system-prompt-tail-breaks-cache/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-14-dynamic-system-prompt-tail-breaks-cache/</guid><description>A timestamp and memory near the start of a 92K-token agent request made every call cold; a stable prefix and cached-token metric made the defect testable.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item><item><title>CUDA PTX vs. SASS: Toolchain and GPU Architecture Decide Whether the Model Runs</title><link>https://andreygaag.com/notes/2026-08-13-cuda-ptx-vs-sass/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-13-cuda-ptx-vs-sass/</guid><description>Why a fresh llama.cpp build still crashed on Blackwell and how native SASS removed the incompatible PTX JIT path.</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate></item><item><title>A Stupid Mistake That Broke the Agent&apos;s Context</title><link>https://andreygaag.com/notes/2026-08-10-oldest-images-break-agent-context/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-10-oldest-images-break-agent-context/</guid><description>A slice taken from the wrong end made a multimodal agent receive the oldest images instead of the newest ones.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Postgres, Partitions, and Missing Posts</title><link>https://andreygaag.com/notes/2026-08-07-insert-rowcount-is-not-a-delivery-signal/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-07-insert-rowcount-is-not-a-delivery-signal/</guid><description>The data reached its partitions, but cursor.rowcount returned zero and prevented the processing pipeline from starting.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>hash() Is Stable Only Within a Single Process</title><link>https://andreygaag.com/notes/2026-08-07-python-hash-is-process-local/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-07-python-hash-is-process-local/</guid><description>One source generated a new post_id for the same URL on every process start and bypassed deduplication.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Semantic Decisions Belong to the Model; Critical Invariants to Code</title><link>https://andreygaag.com/notes/2026-08-02-semantic-decisions-model-invariants-code/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-08-02-semantic-decisions-model-invariants-code/</guid><description>In an agent system, the model should interpret requests and choose actions while code preserves guarantees, safety, and irreversible invariants.</description><pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Critical Links Should Not Depend on One External Domain</title><link>https://andreygaag.com/notes/2026-07-14-telegram-domain-outage/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-07-14-telegram-domain-outage/</guid><description>When an external Telegram domain temporarily stopped working, every link to a bot, channel, or user failed at once.</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Delayed Execution Should Be a Separate Tool</title><link>https://andreygaag.com/notes/2026-07-09-delayed-tool-execution/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-07-09-delayed-tool-execution/</guid><description>When scheduling is embedded in every tool, new channels inflate the codebase; a shared scheduling tool keeps that logic in one place.</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate></item><item><title>JWT Refresh Broke After a Service Migration</title><link>https://andreygaag.com/notes/2026-07-07-jwt-refresh-mismatch/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-07-07-jwt-refresh-mismatch/</guid><description>After a service move, users were logged out because access and refresh tokens became unsynchronized and configuration silently fell back to defaults.</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate></item><item><title>The Payment Succeeded, but the Plan Was Not Applied</title><link>https://andreygaag.com/notes/2026-07-06-payment-without-tariff/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-07-06-payment-without-tariff/</guid><description>The payment flow assumed that a plan already existed: update-only logic must create the state when a concurrent trial operation has not created it yet.</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate></item><item><title>I Ran a Coding Agent on Two Consumer GPUs. Speed Wasn&apos;t the Bottleneck.</title><link>https://andreygaag.com/blog/north-mini-code/</link><guid isPermaLink="true">https://andreygaag.com/blog/north-mini-code/</guid><description>North Mini Code crossed the usefulness threshold under supervision, but not the trust threshold, on a local two-GPU coding-agent setup.</description><pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate></item><item><title>LLM Context Is Not a Database</title><link>https://andreygaag.com/blog/llm-context-is-not-a-database/</link><guid isPermaLink="true">https://andreygaag.com/blog/llm-context-is-not-a-database/</guid><description>Large tool outputs turn the prompt into an accidental data store; reliable agents keep growing data external, bounded, and retrievable.</description><pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate></item><item><title>A Client Loop Caused a Threefold Database Connection Spike</title><link>https://andreygaag.com/notes/2026-07-02-database-connection-spike/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-07-02-database-connection-spike/</guid><description>Even successful repeated requests can exhaust a connection pool: the server needs rate limits, and the client needs a guard against loops after streaming failures.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Keep Alembic revision ids under 32 characters</title><link>https://andreygaag.com/notes/2026-06-30-alembic-revision-length/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-30-alembic-revision-length/</guid><description>Alembic stores the current revision in a VARCHAR(32) column, so long human-authored revision ids overflow and break migrations.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate></item><item><title>App Store Review Exposed Unfinished Product Requirements</title><link>https://andreygaag.com/notes/2026-06-29-app-store-review/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-29-app-store-review/</guid><description>The iOS rejection showed that technical readiness is not enough without account deletion, appropriate authentication, safe screenshots, and a clear payment model.</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Do Not Share Local and Container Environments</title><link>https://andreygaag.com/notes/2026-06-17-zed-ruff-environment/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-17-zed-ruff-environment/</guid><description>Ruff stopped launching in Zed because the local project used a Linux binary from a container virtualenv.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Unbounded Conversation History Can Exceed the Context Window</title><link>https://andreygaag.com/notes/2026-06-16-agent-context-compact/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-16-agent-context-compact/</guid><description>The harness capped retrieved memory but left active conversation history unbounded; recovery after a restart suggested, but did not prove, context overflow.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate></item><item><title>User Data Should Be Soft-Deleted</title><link>https://andreygaag.com/notes/2026-06-11-soft-delete-chats/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-11-soft-delete-chats/</guid><description>When a user deletes a chat by mistake, soft deletion with controlled recovery is safer than immediate physical deletion.</description><pubDate>Thu, 11 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The Canon Has Not Yet Formed</title><link>https://andreygaag.com/blog/agentic-engineering-canon/</link><guid isPermaLink="true">https://andreygaag.com/blog/agentic-engineering-canon/</guid><description>The engineering discipline of agentic systems is taking shape before our eyes: core computer science principles remain, but the canon of agent engineering does not yet exist.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Qwen3.5:32B and OpenCode Compatibility Is a Contract</title><link>https://andreygaag.com/notes/2026-06-08-opencode-model-compatibility/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-08-opencode-model-compatibility/</guid><description>A local coding-agent session can stop because of an incompatible reasoning format even after the model loads and changes files successfully.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>CI Should Not Depend on One Package Registry</title><link>https://andreygaag.com/notes/2026-06-08-package-registry-outage/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-08-package-registry-outage/</guid><description>External PyPI timeouts can break container builds; mirrors and an owned registry turn that dependency into a manageable failure.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>A Corporate Network Can Block SSE</title><link>https://andreygaag.com/notes/2026-06-08-sse-blocked-by-corporate-network/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-08-sse-blocked-by-corporate-network/</guid><description>Working HTTP requests do not prove that a corporate network allows the long-lived SSE connection required for streaming agent responses.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Deleting a File Does Not Clear RAG Memory</title><link>https://andreygaag.com/notes/2026-06-06-agent-rag-memory-cleaning/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-06-agent-rag-memory-cleaning/</guid><description>Deleting source documents does not guarantee that their vector representations are gone: an agent&apos;s memory must be cleared at every storage layer.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Why an Agent Should Not Choose the Architecture for an Unfamiliar Task</title><link>https://andreygaag.com/notes/2026-06-06-agent-voice-cloning/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-06-agent-voice-cloning/</guid><description>Asking an agent to clone a voice without prior research turned into endless trial and error: define the architecture and evaluation criteria first.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate></item><item><title>One Vision Model Is Not Enough for Reliable Receipt Parsing</title><link>https://andreygaag.com/notes/2026-06-06-receipt-vision-parsing/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-06-receipt-vision-parsing/</guid><description>A vision model may read a receipt but still confuse prices, names, quantities, or totals; reliability requires a verifiable pipeline.</description><pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate></item><item><title>An Audio Fallback Must Cover Real Decode Failures</title><link>https://andreygaag.com/notes/2026-06-01-audio-fallback/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-01-audio-fallback/</guid><description>Audio files can play successfully while a library fails to inspect them: an ffmpeg fallback should not be limited to one assumed exception type.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Not Every Good Idea Deserves Automation</title><link>https://andreygaag.com/notes/2026-06-01-automation-needs-a-test/</link><guid isPermaLink="true">https://andreygaag.com/notes/2026-06-01-automation-needs-a-test/</guid><description>An idea suggested by a model and phrased conveniently is not automatically a useful change: validate its value and success criteria first.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item></channel></rss>