static-analysis

  • The command bus we removed

    A command bus introduced in 2021, and 88 commands with one handler each. A stack trace with four frames of dispatch before the work.

  • Reusable skills and agent definitions, and what they are actually for

    turkerdev/ai-skills and turkerdev/ai-agents, and eighteen months of retyping the same instructions. Context is per-session and knowledge is not.

  • Deleting a module

    A module built in 2022 for a product line discontinued in 2024. Eight thousand lines, a database schema and two scheduled jobs, all still running.

  • A layer rule that got simpler

    A module deleted, and a rule set that lost four entries and a special case. Three modules depending on a fourth becomes three modules depending on nothing extra,…

  • The value object library, five years on

    32 value objects in 2021, 41 now, and a retrospective on which of them earned their place. No symptom — a deliberate look.

  • Writing a PHPUnit extension

    turkerdev/phpunit-json-coverage-report, and a coverage report a machine can read. Coverage as a percentage in a log, and no way to ask which paths changed.

  • A year of property hooks, and the three I would not write again

    218 methods became properties in December 2024, and a year of living with a syntax that hides work.

  • An analyser rule for hooks that reach outside the object

    A convention that had been enforced by review, expressed as a rule after review failed twice. The rule is crude — it forbids calling anything on a collaborator,…

  • Reviewing code I did not write

    Review as the skill that matters, and a volume of code that needs it. A change that looks right, passes, and is subtly wrong.

  • A module boundary that had quietly merged

    Two modules with a layer rule permitting each to depend on the other, which is not a boundary. A rule that permits a cycle is a rule that…