mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 02:54:26 +00:00
Nine roles enabled an MCP surface without a browser-side spec, so nothing
ever asked what the endpoint answers a caller with no credential at all.
Lift gitea's assertion into two shared registrars and register them per
role, and give each role the MCP_SERVICE_ENABLED flag they gate on.
mcpEndpointUrl now takes the base URL rather than reading APP_BASE_URL
unconditionally: jellyfin and zammad export their own base variable, and
declaring APP_BASE_URL for them would un-skip the shared guest persona,
which collapses itself on that variable being absent.
The env-gate scanner follows require("./x") into the shared harness so a
gate declared there counts as consumed, and strips block comments first
so service-gating.js's own doc examples do not credit EMAIL, SSO and OICD
to every role that imports it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Playwright Parity Tests 🎭
Integration tests that pin the meta/services.yml ↔ templates/playwright.env.j2 ↔ files/playwright/playwright.spec.js parity contract: every enabled service surfaces as <NAME>_SERVICE_ENABLED=, every env line is consumed by a gating helper in the spec, and # nocheck: playwright-service-flag / # nocheck: playwright-service-gate are the only suppressions.
Tests in this directory MUST only cover Playwright env-template / spec parity. The dashboard-scope sub-rule MUST live under dashboard/.
For framework and make test-integration usage see integration.md.