Fixing a cache:clear command that couldn't run and couldn't be trusted
How Waaseyaa’s cache:clear command couldn’t even run in production, and how a hardcoded bin list quietly reported success while clearing the wrong cache entirely.
How Waaseyaa’s cache:clear command couldn’t even run in production, and how a hardcoded bin list quietly reported success while clearing the wrong cache entirely.
How Waaseyaa’s queue worker silently acknowledged persistent messages with no matching handler, and the fail-closed fix that routes them through retry and the failed-job repository instead.
How Waaseyaa’s taxonomy package let ordinary request traffic ALTER a table to add a foreign key, and the fix that moved that DDL exclusively into coordinated schema sync.
Why a throwing audit logger in Waaseyaa’s MCP endpoint could crash a request after its outcome was already decided, and the containment pattern that fixed it.
Why Waaseyaa’s CI gate scanners stopped walking the filesystem with a hand-maintained exclusion list and started asking git what’s actually in the repository.
How Waaseyaa’s StreamHttpClient silently turned a truncated, over-limit response body into an HTTP 200, and the fail-closed fix that rejects incomplete bodies instead of guessing.
A stray PHPStan cache in a nested git worktree got scanned as production code, showing why filesystem-exclusion rules for local gates need to match at any depth.
How Anokii went from one monolithic repo with duplicate identity code to three composable Composer packages, published by a governed CI split instead of a manual release process.
Why AI agents modifying a Waaseyaa app need a DSL, an AST-safe patch generator, and sovereignty guardrails, instead of raw file edits.
How Waaseyaa serves the same content as a web page for people and clean Markdown for AI agents from a single URL, using HTTP content negotiation.