Dev Log: 2026-08-12 — a 96s suite that became 42s, a capability that wasn't a scope, and four steps to a passkey
Fifteen commits, three repos, and the bulk of it in one: a control plane that got an MCP surface, a much faster test suite, and a handful of things that turned out to be quietly wrong once I looked properly. The MCP work has its own write-up — sixty tools, four servers, and a long argument with myself about what a refusal should say. This is everything else. 1. Ninety-six seconds to forty-one The…
One day, an engineer faced a challenge: a suite that took ninety-six seconds to run, but could be much faster. After fifteen commits and work across three repositories, the engineer managed to cut the suite's duration down to forty-one seconds. The journey involved seven steps.
First, the team tackled the suite's runtime of six minutes for a full run, and about ninety-six seconds when running in parallel. They discovered that a seeder in the "beforeEach" method was causing unnecessary work, as it ran before every feature test and generated 645 queries, each taking roughly 110 milliseconds. The engineer removed the seeder from individual test files and protected it within the TestCase class, ensuring it was seeded only once per process during "migrate:fresh".
Next, they discovered that nine test files were re-seeding the seeder, which accumulated over time. They removed these redundant seeds and streamlined the process. The engineer faced the issue of Xdebug costing three times as much time on every run and configured Pest's Xdebug handling to use the array form for @putenv, which resolved the issue.
The team then addressed test impact analysis (TIA) that had never finished properly. When running TIA, it would fail due to Composer's default 300-second process timeout, leaving files and no graph. By disabling the process timeout and using pcov instead of Xdebug, they reduced the cold record time from ninety minutes to around seventy-five seconds, and made replaying the test impact analysis take only five seconds.
The engineer also discovered that a capability permission wasn't scoped properly in one page of the app. They corrected ownership enforcement at five call sites, ensuring that a nullable-owner + is_system pair was used for shared catalogue rows, and found a factory bug related to visibility rules. They updated the factory default to land inside one of the branches for the two-branch visibility rule.
Lastly, the engineer outlined the process for enabling passkeys, which involved four steps:
1. Publish the config and migration files
2. Migrate the database
3. Add the PasskeyAuthenticatable trait and PasskeyUser contract to the User model
4. Uncomment the passkeys feature in the Fortify config
By following these four steps, the engineer successfully enabled passkeys in the application. The entire process from start to finish took approximately forty-one seconds, demonstrating the significant improvement made to the overall suite.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — it may contain errors, so check the original before relying on it.