.agents/skills/release/test-matrix.md
Instantiate against the real release diff. The unit of planning is the risk, not the feature: for each change ask what can this break, and for whom? Security hardening gets the inverse question too: does the protection break legitimate use? (v1.11.0 examples: SSRF guard vs. self-hosted Ollama on localhost; body-size cap vs. big uploads; Host validation vs. reverse proxies).
Checklist design rule (v1.12.0 retro): before putting an error-path item on
the bucket-C checklist ("X unconfigured should show an error"), verify in the
provisioning code that it IS an error — transformation and tools defaults
deliberately fall back to the chat default (open_notebook/ai/models.py).
| Check | Command / tool |
|---|---|
| Backend suite | uv run pytest tests/ |
| Lint & types | ruff check . · uv run python -m mypy . (both are required CI gates; mypy runs at 0 errors — uv sync --extra dev first if mypy is missing locally) |
| Frontend | npm run lint · npm run test · npm run build (run npm ci first if deps changed) |
| Full happy path | smoke-e2e agent on the local dev stack (API + Playwright UI) |
| Dependency audit | Dependabot alerts + npm audit |
| Targeted probes | see below — pick per matrix |
Regression-of-legitimate-use probes proven in v1.11.0 — adapt endpoints/values:
localhost URL → ACCEPTED (self-hosted is legitimate);
link-local/metadata URL → rejected with a clear 4xx/config with clean vs. malformed Host → sane URL / fallback, never 5xxcurl -N -w)CORS_ORIGINS setsort_by=title 500'd while all siblings passed —
test the whole surface, not one sample)Standing candidates; the image gate graduated from here to make release-test:
Decision rule: build it if it compounds for future releases and costs < the manual verification it replaces; otherwise verify manually this once and note it here for next time.
make release-stackDeliver this as a concrete checklist with expected outcomes, tailored to what
the release actually touched and to the credentials the owner actually has
(GET /api/credentials tells you).