2026-03-17 — Eclectis
What shipped today
Continued the scout-driven hardening sprint that started over the weekend. Today’s session focused on engine reliability and web resilience — two themes that emerged from the /scout run on 3/16.
On the engine side, the poller got graceful shutdown (#261) so Railway deploys no longer kill mid-flight commands. The health endpoint was expanded (#267) to report poller liveness, scheduler state, and command queue depth — giving us real observability into whether the engine is actually working, not just responding to pings. The Brevo webhook got content-type validation and IP-based rate limiting (#266) to harden the ingest surface. And the database pool (#269) now has an acquire timeout and retry wrapper so the engine fails fast instead of hanging forever when connections are exhausted.
On the web side, the feeds page got a proper empty state (#263) with onboarding guidance and CTA buttons that interact with the existing add-feed form. Engagement tracking (#265) now captures errors to Sentry instead of silently dropping them, and all article mutation actions (vote, bookmark, mark-read) properly check and return errors.
Issue #264 (encrypting integration tokens at rest) was prepped but needs an architectural decision — posted three options as a clarification comment. The challenge is that both Next.js and the Python engine need to read tokens, so the encryption key management needs thought.
Completed
- #261 — Add graceful shutdown to engine poller
- #263 — Add empty state with onboarding guidance to feeds page
- #265 — Add engagement tracking error handling and retry
- #266 — Add Brevo webhook content-type validation and rate limiting
- #267 — Add comprehensive health checks to engine /health endpoint
- #269 — Add database pool circuit breaker to engine
Carry-over
- #264 — Encrypt integration tokens at rest (needs-clarification: architectural decision on shared encryption across Next.js + Python)
- Verify PostHog and Sentry are configured correctly (env vars, events firing, error capture working)
- Supabase migrations from #262 and #268 (indexes) need
supabase db pushto production
Risks
- The rate limiter in
main.pyis in-memory (defaultdict), which resets on deploy. Fine for single-instance Railway, but won’t work if we scale horizontally. Not urgent. - Token encryption (#264) is the last meaningful security gap — integration tokens (Raindrop, Readwise) are stored as plaintext JSON.
Flags and watch-outs
- Engine tests requiring
pytest-asyncioare skipped locally (missing dep in venv). The sync tests all pass (116). - All milestones are closed. No active release pressure.
Next session
- Decide on token encryption approach for #264 and implement — this is the highest-impact remaining security issue
- Run
supabase db pushfor the index migrations (#262, #268) - Verify PostHog events and Sentry error capture are actually working end-to-end
- Consider another
/scoutrun — the last one surfaced 11 useful issues, most now shipped
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.
AI agents need org charts, not pipelines
Every agent framework organizes around tasks. The agencies that actually work organize around competencies. The AI community is about to rediscover this the hard way.
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.