Synthesis: March 15, 2026
Six projects active today. A day defined by autonomous agents doing real work — executing entire issue pipelines unattended — while the human focused on tooling, content quality, and the one project (Textorium) where a stuck issue reveals a deeper organizational question.
Authexis
The largest day in Authexis history by volume: 19 PRs merged across input validation, engine performance, and test coverage. The session ran the full autonomous pipeline — triage, prep, exec — repeatedly, clearing the entire queue without manual intervention.
The input validation sweep was comprehensive. Client-side maxLength attributes landed on all form inputs (#1222). Server-side length validation hit three layers: API write endpoints (#1223), content server actions (#1240), idea server actions (#1239), and bookmarks/settings actions (#1241). Stripe webhook handlers and content server actions now check database update results instead of silently ignoring failures (#1226, #1227). The engine’s settings_enrich and voice_infer handlers got error handling for unchecked DB updates (#1237).
Engine performance improved in three areas: parallel scoring in google_search_scan via asyncio.gather (#1210), batched duplicate URL checks (#1209), and parallelized Mastodon/Threads metrics fetching (#1229). Blog queue reorder now uses a database RPC function for atomicity (#1211).
The test coverage push was the headline: 144 new unit tests across 12 engine handler files, covering interview_generate, idea_generate, content_research_sources, chat_message, newsletter_process, outbound_draft, feed_discovery, content_generate_meta, workspace_analyze, prospect_create, and voice_infer. The test patterns — mock sequencing, side_effect callables for per-call failures, BudgetExceededError instantiation — are now well-established for future handler tests.
One operational concern: Sentry auto-create integration is generating duplicate GitHub issues. AUTHEXIS-11 TimeoutError alone created 8 duplicate issues today. Needs immediate attention to prevent queue flooding.
Eclectis
Five scout-discovered issues triaged, prepped, and shipped in a single session. Three themes: security, reliability, and UX.
The most significant finding was a BYOK gating bypass in the article prescore handler — free-tier users without API keys were silently getting prescore calls because PlanGatingError was caught by a blanket except Exception (#195). Both the Raindrop push and Serper search handlers now guard against non-JSON responses from external APIs (#196). The user context ratings cache got TTL eviction with a 30-minute expiry and 1000-entry cap to prevent slow memory leaks on long-running deployments (#197). Newsletter link extraction got defense-in-depth URL validation after normalization (#198).
The UX improvement (#199) added error toast notifications across vote, bookmark, and mark-as-read actions — these previously failed silently with optimistic update reversions. Infinite scroll error recovery now shows a “tap to retry” message instead of a stuck spinner.
All four milestones remain closed. Only 2 backlog issues remain. The active queue is empty.
Phantasmagoria
The v1 milestone closed today (15/15 issues), and the generator underwent its most significant hardening pass yet. This was less about new features and more about the generator behaving like a real quality gate instead of a loose YAML emitter.
Twelve issues shipped. The contract side locked in the canonical renderer/linter boundary, simplified the release layout around release.yaml + events/, and explicitly scoped the v1 surface: standalone, anomaly, and site are in; situation is out of the playable bar and tracked as phase 2.
The generator changes are the real substance. It now defaults to v1-supported kinds only, generates standalone follow-ups as separate triggered-only files, fails honestly when child generators under-produce, retries invalid AI attempts inside a bounded budget, rejects candidates that violate outcome templates, and rejects candidates that trip pure-upside or batch-diversity checks. The project goal isn’t “hand-fix generated YAML until it works” — it’s “the generator produces something worth rendering and testing on its own.”
The documentation pass was equally important: STATUS.md, README, contract, how-to, roadmap, and decisions docs all updated to match reality. The repo now explains where the project stands without relying on conversation memory.
Next step is the first real end-to-end playtest: create a release, generate events, validate, render a Windows build, and load it in Stellaris to judge the actual event feel.
Polymathic-h
Nine issues closed in a deep infrastructure cleanup session focused on the podcast feed and newsletter pipeline.
The podcast feed (polymathic.xml) had been generating invalid RSS for weeks. Two critical bugs were found and fixed: human-readable file sizes (“8.46 MB”) instead of byte integers in enclosure length attributes (#149), and — more critically — every single enclosure URL rendering as <no value> due to a Hugo template scoping bug (#153). Inside a range + with block, $ refers to the top-level page context, not the range item. A one-line variable capture ($page := .) fixed all 55 entries. The feed is now valid RSS for the first time since the {{ with }} conditional was introduced.
The newsletter pipeline got tightened: five early editions (1-5) received the missing outputs field needed for email HTML generation (#142). The send script gained rollback logic for failed campaigns (#143). Hardcoded URLs in the email template were replaced with Hugo variables (#141). And 113 lines of dead code were removed from the pre-commit hook — newsletter scheduling logic that checked for a ready_to_send: true flag that no post ever used (#145).
Newsletter edition 15 (“Most of your infrastructure is decoration”) was staged with business-focused metadata and a test email sent. Awaiting approval before scheduling for Tuesday 11am ET.
Accessibility improvements also landed: accessible labels for share buttons (#134) and aria attributes for newsletter signup forms (#135).
Paulos
Two sessions — one interactive with Paul, one autonomous. Together they shipped 14 issues and grew the test suite from 1009 to 1094 tests.
The interactive session built three new features. paulos newsletter list is a new CLI command that shows newsletter editions in a TUI table with edition number, sent/staged status, date, and subject. The --all flag shows the full history; the default shows only unsent/staged editions. The command infers sent status from the highest known sent edition, which fixed the display problem where editions 1-8 showed as “staged” even though they were sent months ago. Fourteen legacy newsletter posts in polymathic-h were backfilled with sent: true to fix the underlying data.
The humanizer was extracted from social/notes.py into a shared paulos/core/humanize.py module. It strips AI writing patterns (significance inflation, forced parallelisms, synonym cycling, em dash overuse, filler phrases) and now also eliminates crutch phrases like “This is what I keep coming back to” and “So here’s the question I’m sitting with.” The humanizer was wired into the podcast CLI pipeline and the /reflect skill, so all future reflection scripts get a humanize pass before saving. It was tested live on the “Most of your infrastructure is decoration” post.
The editorial briefing now shows newsletter upcoming status with subject and date when an edition is staged, or “nothing staged” when the pipeline is empty. The COS briefing email was tested live and confirmed working with the information pyramid from #410.
The autonomous session ran a test coverage blitz via the full scout → triage → prep → exec pipeline. A real bug was found: a variable name mismatch in social/blurbs.py where html was used instead of text in the style-stripping regex, causing script tag content to leak through (#426). Five broken tests were diagnosed and fixed — tmux C-m vs Enter, single-symlink refactor in setup_cmd, and missing resolve_workspace mock in orchestrate (#424).
Textorium
No code shipped. Context-recovery session confirmed the board state is unchanged since March 13. v1.5 milestone sits at 17/18 closed, with #13 (dynamic email signature with latest blog post) labeled needs-clarification for three days. This issue may not belong in the Textorium repo at all — it references polymathic-h GH-2, suggesting it’s a cross-project concern that got filed in the wrong place.
Cross-cutting themes
Autonomous agents doing real work. Three projects (authexis, paulos, eclectis) ran full autonomous pipelines today — scout, triage, prep, exec — without human intervention. Authexis merged 19 PRs. Paulos created, triaged, prepped, and executed 14 issues. Eclectis shipped 5 security/reliability fixes. The agents aren’t just running tests or formatting code — they’re finding real bugs (BYOK gating bypass, style-strip variable mismatch, podcast feed URL scoping), writing specs, implementing fixes, and merging. The interactive session focused on features and judgment calls (humanizer design, newsletter UX, content framing) while the machines handled the grind.
Infrastructure that was secretly broken. The podcast feed had been generating invalid RSS for weeks — every URL was <no value>. The newsletter editions 1-8 were missing sent: true. The trigger_conditions field in Phantasmagoria was validated, stored, and passed through the pipeline but never actually read by the gatekeeper. The briefing email was comprehensive but too dense to read. In each case, the infrastructure looked complete. It took someone actually trying to use the output — or writing tests against the behavior — to discover it was decorative.
Test suites as quality gates, not checkboxes. The test coverage push across paulos (1009 → 1094 tests), authexis (144 new handler tests), and eclectis (targeted handler tests) is now catching real bugs during the writing process, not after deployment. The paulos social/blurbs.py style-strip bug and the eclectis BYOK gating bypass were both found by the tests that were created to cover those modules. The test suites have crossed from “verify nothing is obviously broken” to “actively discovering latent defects.”
Milestone exhaustion. Multiple projects hit or are approaching the “now what?” moment. Authexis has all milestones complete. Eclectis has an empty queue with only 2 backlog items. Phantasmagoria closed v1. Paulos has no active milestone. Textorium is one stuck issue from closing v1.5. The infrastructure for tracking development work (issue trackers, milestones, CI pipelines) starts to feel ornamental when there’s nothing left to build — exactly the pattern described in today’s blog post.
Carry-over
- Paulos #396 — marketing email parent issue needs decomposition (carried over from 3/13, 3/14, now 3/15)
- Polymathic-h — newsletter edition 15 test email sent, awaiting approval to schedule for Tuesday
- Textorium #13 — dynamic email signature,
needs-clarificationfor 3 days, may be a cross-project concern - Authexis — Sentry auto-create integration flooding the queue with duplicate issues
- Authexis — dirty working tree (admin.ts, workspace settings, uv.lock) uncommitted across sessions
- Eclectis — PostHog and Sentry production verification still pending
- Phantasmagoria — first end-to-end playtest needs to happen before more generator work
Risks
- Authexis Sentry spam is the most urgent operational issue — 8 duplicate GitHub issues from one error class in one day
- Podcast feed was broken for all 55 episodes — now fixed, but podcast apps with cached bad feeds may take time to refresh
- Phantasmagoria generator strictness may increase failed batches before prompt quality catches up with the new guardrails
- Multiple projects with empty pipelines — without new milestones or promoted backlog items, the autonomous agents have nothing to work on
By the numbers
| Project | Issues closed | PRs merged | Tests added | Milestone status |
|---|---|---|---|---|
| Authexis | 23 | 19 | 144 | v1.5: 11/12, v2: 20/20, outbound: 19/19 |
| Eclectis | 5 | 5 | — | All closed |
| Phantasmagoria | 12 | — | — | v1: 15/15 (closed) |
| Polymathic-h | 9 | — | — | April: 2/3 |
| Paulos | 14 | — | 85 | All closed |
| Textorium | 0 | 0 | 0 | v1.5: 17/18 |
| Total | 63 | 24+ | 229+ |
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
The delegation problem nobody talks about
When your automated systems start finding real bugs instead of formatting issues, delegation has crossed a line most managers never see coming.
What your systems won't tell you
The most dangerous gap in any organization isn't between what you know and what you don't. It's between what your systems know and what they're willing to say.
Most of your infrastructure is decoration
Organizations are full of things that look like governance, strategy, and quality control but are actually decorative. The trigger conditions nobody reads, the dashboards nobody checks, the review processes that rubber-stamp. When you finally audit what's functional versus ornamental, the ratio is alarming.