Sequential Test Execution
Ensures test runs execute one at a time to prevent resource conflicts.
Core Principle
One Test Run at a Time
Test environments share databases, ports, and network resources. Concurrent test execution causes migration conflicts, port collisions, and flaky test results.
Detection Method
Uses Docker container state (not file locks) to detect running tests:
- Self-recovering:
docker compose run --rmauto-removes containers on exit - No stale locks:
docker psreflects actual running state - Graceful degradation: If Docker is unavailable, tests proceed normally
Hook Behavior
PreToolUse (Bash)
- Extract command from
TOOL_INPUT - Check if command is a test execution command
- Query
docker-compose.test.ymlfor runningwebcontainers - Running container found →
exit 2(block with message) - No running container →
exit 0(allow)
PostToolUse (Bash)
- Only triggers on
docker composetest commands - Logs completion timestamp and exit code to
$TMPDIR/claude-workflow/test-execution.log - Always
exit 0(informational only)
When Blocked
If a test run is blocked:
- Wait for the existing test container to complete
- Retry the test command after completion
- Do NOT force-remove the running container
Test Command Patterns Detected
docker compose -f docker-compose.test.yml run ...
phpunit
jest
pytest
composer test
npm test
TEST_ONLY=...
Scan to join WeChat group