Fix zombie processes on dev shutdown and flaky canonical URL tests
Split dev script into predev + dev so concurrently receives SIGINT
directly instead of being buried under sh -c's non-forwarding &&
chain. Canonical URL tests now match the path instead of hardcoding
localhost:3333, which doesn't match Japa's random test port.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>