What we shipped on 2026-08-02
We almost missed a critical failure because our tests were too clean. While live-verifying some API changes, we found that every CORS preflight OPTIONS request was returning a 500 (PR #3006). The culprit was an upstream crash in opentelemetry-instrumentation-fastapi where the OTel span-namer tried to access .path on a FastAPI _IncludedRouter object--which doesn't have one. Since our operator console is same-origin and our unit tests don't instrument OTel, this bug had been hiding in plain sight until we sent the first cross-origin probe.
That discovery led us deeper into the request lifecycle, where we realized our cache policy was fundamentally backwards (PR #3000). We'd been relying on a "safe default" of private, max-age=60 for unmatched routes, but that meant 68 of 85 GET-able routes were inheriting caching silently. This caused console panels to serve stale data even with Bearer tokens. We inverted the policy to deny-by-default and moved CacheControlMiddleware outermost-but-one (PR #3005) to ensure that short-circuits--like 401s from TokenValidationMiddleware--are properly stamped and not left to browser heuristic caching.
In the console, we wrestled with a "Run" button that would simply freeze when the worker was under load (PR #3002). We had a serialization gate on thread reads using latest-started-wins logic; however, when reads slowed down, each new poll tick superseded the previous in-flight request before it could ever apply. We replaced this with PXChat.readGate implementing monotonic apply, ensuring slow responses still move the state forward as long as they aren't stale.
The architect also needed a leash. We implemented grammar-constrained JSON output to prevent "think-spiral" from reaching the wire (PR #2997). Simultaneously, we found that some architect graphs were missing status-setting nodes, leaving tasks in in_progress forever until the 30-minute stale sweep re-queued them. We now deterministically append atoms.set_task_status to every sink node when a spec lacks a terminal atom (PR #3007). This same PR cleaned up a schema drift bug where chat_watch was querying duration_ms instead of the actual latency_ms column.
On the media side, we fixed a subtle double-normalization bug that was baking pronunciation maps--like "Vee RAM"--directly into our stored scripts (PR #3001). We split the process: _normalize_for_script handles structure at generation, while _generate_with_voice applies the full speech pass. We also hardened the short-script parser to strip emojis and trailing meta paragraphs that were being read aloud by the TTS. To support this in one-off regenerations, we updated the bootstrap flow to properly initialize a DatabaseService so the global AuditLogger and Platform handle exist for subprocesses (PR #3003).
Finally, we tightened our analytics bot flagger (PR #2998). Our existing flood-cap was blind to full-site crawls where a bot hits 145 distinct paths once each. By adding a check for beacon_sweep_max_distinct_paths per UA within the window, we can now catch these path-sweeping crawlers before they poison our traffic-anomaly baselines (PR #2996).
We're spending more time in the "last 5%" of polish lately--the edge cases that only emerge under real load or cross-origin requests. It's tedious work, but it's the difference between a prototype and a system we can actually trust to run unattended.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.
Top comments (0)