The test-runner suites load asynchronously — the button only appears
after runners register. Use waitForSelector with 60s timeout instead
of a fixed 3s delay. Dump page text on failure for debugging.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
npm install playwright pulled v1.59.1 but the Docker image ships
v1.52.0 browsers, causing a version mismatch crash. Pin to 1.52.0.
Also add ci/Dockerfile.test-runner for pre-building the image into
registry.gobha.me:5000/ci-test-runner:latest — eliminates npm install
from every CI run.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The builtin auth provider expects {"login": ...} not {"username": ...},
causing a 400 binding error during test-runner authentication.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two bugs preventing the test-runners CI job from passing:
1. Health check used GET /api/v1/auth/login — a POST-only route that
always returns 404. Changed to GET /api/v1/health which exists.
2. Bundled package install passed empty strings to FK-constrained
columns (global_settings.updated_by, workflows.created_by),
causing FOREIGN KEY constraint failures on every surface and
workflow package. Fixed by resolving the bootstrap admin user ID
at startup and threading it through the install path.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous fix (container IP resolution) still failed because the
CI runner and compose containers are on separate Docker networks.
- Add docker-compose.ci.yml override with network_mode: host so the
container shares the runner's network stack directly
- Add --connect-timeout 2 to curl in wait-for-healthy.sh so it fails
fast instead of hanging indefinitely on unreachable hosts
- Cap health check at 30s (server boots in 5-10s)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Five package-level test runners validating extension API contracts:
- notes-runner: CRUD, folders, tags, search, backlinks (12 tests)
- chat-runner: conversations, messaging, search (9 tests)
- schedules-runner: CRUD + run (5 tests)
- workflow-runner: definitions, instances, stage progression (5 tests)
- renderer-runner: registry contract, block matching (4 tests)
Runner Result API (in-memory, 3 admin endpoints) stores results
from browser runs for CI consumption. Test-runners surface v0.2.0
posts results after each run and fixes suite prefix matching.
CI integration via Playwright: wait-for-healthy.sh, run-surface-tests.sh,
surface-test-driver.js. New test-runners stage in Gitea CI pipeline.
Verified: 169 passed, 0 failed, 9 warned, 8 skipped on fresh install.
Go handler tests: 4/4 passing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>