Scholexis — March 30, 2026
What shipped today
Today’s session focused on hardening the codebase — fixing security vulnerabilities and improving error handling consistency across the app. The /start refresh also regenerated project metadata (CODEBASE.md and a new .scout.yml) to keep navigation and scout scanning current.
The main security work was upgrading Next.js from 16.1.6 to 16.2.1, which resolved five CSRF/security advisories that affected all Next.js versions from 16.0.0 through 16.1.6. Alongside the framework upgrade, npm audit fix cleaned up transitive dependency vulnerabilities — flatted (prototype pollution), path-to-regexp (ReDoS), picomatch (method injection), and brace-expansion (hang). Audit went from 9 vulnerabilities (3 high) to 4 moderate dev-only issues locked inside drizzle-kit’s esbuild dependency, which can’t be fixed without a breaking drizzle-kit downgrade.
The scout scan also found that the energy widget’s quick check-in was the only form in the entire app that silently swallowed errors. Every other form uses toast.error() for user feedback — the energy widget now does too. Small fix, but it closed the last gap in the error handling pattern.
A second session ran a deeper /scout with parallel agents scanning error-handling, security, dead-code, UX gaps, and performance. Manual scans covered dependency health and feature gaps. The codebase is in solid shape: every server action uses requireAuth() + Zod validation, every client form has isRedirectError + toast.error() catch blocks, every list page has empty states, and every route has a loading.tsx. Dependency audit found 8 semver-safe package updates available and several major version bumps worth tracking (lucide-react 0.577→1.7, TypeScript 5→6, ESLint 9→10). The scout was interrupted before agents returned results, so a follow-up scout should complete the scan.
Completed
- #245 — Add toast error feedback to energy widget quick check-in
- #242 — Fix npm audit vulnerabilities — upgrade Next.js and transitive deps
Release progress
- Next.js port: 109/113 closed (4 remaining)
- v1.0: 6/6 closed
Carry-over
- #244 (ready-for-dev): Remove 5 dead schema tables (aiTaskBreakdowns, appPreferences, attachments, commands, domainEvents) — fully specced, was next in queue when session closed
- #243 (ready-for-prep): Zero test coverage for server actions — all 12 CRUD modules untested
- #246 (ready-for-prep): Landing page is placeholder — needs features section, value proposition
Risks
- 4 moderate esbuild vulnerabilities remain (dev-only, locked to drizzle-kit). Force-fixing would downgrade drizzle-kit to 0.18.1 which is a breaking change. Safe to leave but worth revisiting when drizzle-kit releases a new version.
Flags and watch-outs
- 4 issues stuck in
needs-clarification(#232, #223, #65, #64) — these need human decisions on AI task breakdown UI, tokens page, data migration, and deployment pipeline - All 103 vitest tests passing after the Next.js upgrade
Next session
- Pick up #244 — remove the 5 dead schema tables (ready-for-dev, fully specced)
- Run
/scoutto completion — second session’s parallel agents were interrupted before returning results - Prep #243 — server action test coverage. This is the biggest gap in the codebase right now.
- Consider filing issue for semver-safe dependency updates (8 packages) and lucide-react major upgrade
- Review
needs-clarificationissues — some have been waiting since early March
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.
Your design philosophy is already written
Builders who work across multiple projects leave fingerprints everywhere. The same mind solves the same problem differently in every domain — and usually doesn't notice. You need someone to read it back to you.
The day nothing satisfying happened
The most productive day in an organization's life usually looks like nothing happened. No launches, no features, no announcements. Just people quietly making the existing work more honest.
Your AI agent is probably not an agent
The word 'agent' has become meaningless. Everyone from chatbot vendors to autonomous system builders uses it. We've been here before — with self-driving cars — and it didn't end well.