diff --git a/.gitea/workflows/release-quality-gate.yml b/.gitea/workflows/release-quality-gate.yml index 5800002a..07e6a472 100644 --- a/.gitea/workflows/release-quality-gate.yml +++ b/.gitea/workflows/release-quality-gate.yml @@ -97,6 +97,8 @@ jobs: -r requirements.txt -r requirements-dev.txt playwright python -m playwright install --with-deps chromium npm ci --prefix frontend + # Production refuses placeholder operator details and draft terms / privacy text (#119 item 9). + (cd frontend && JYOTISHA_REQUIRE_LEGAL_ENTITY=1 npx tsx --test tests/legal-consent-20260930.test.tsx) python scripts/run_quality_gate.py --profile release python -m pytest -q --maxfail=1 python tests/run_all.py diff --git a/deploy/README.md b/deploy/README.md index 5495971a..ff6fda03 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -138,7 +138,7 @@ Before a production release, run the legal-consent test with the production flag cd frontend && JYOTISHA_REQUIRE_LEGAL_ENTITY=1 npx tsx --test tests/legal-consent-20260930.test.tsx ``` -It fails while `frontend/src/lib/legal-entity.ts` still holds placeholder operator details or the terms / privacy text is still marked draft. The workflows are not changed for this (they are product-owner territory); the step is manual until the product owner wires it in. +It fails while `frontend/src/lib/legal-entity.ts` still holds placeholder operator details or the terms / privacy text is still marked draft. Since 2026-11-01 (product owner approved, #119 item 9) the manual release gate `.gitea/workflows/release-quality-gate.yml` runs this check right after its frontend install, so a production release is refused until the details are filled in and the draft markers are removed. ## Manual production deployment with Gitea Actions diff --git a/frontend/tests/staging-backend-workflows.test.ts b/frontend/tests/staging-backend-workflows.test.ts index 61a28099..541e2936 100644 --- a/frontend/tests/staging-backend-workflows.test.ts +++ b/frontend/tests/staging-backend-workflows.test.ts @@ -1127,6 +1127,12 @@ test("manual release gate runs where Docker Compose v2 is available", () => { assert.match(workflow, /H relative to R is docs-only/); assert.match(workflow, /PIP_INDEX_URL: https:\/\/mirrors\.aliyun\.com\/pypi\/simple\//); assert.match(workflow, /NPM_CONFIG_REGISTRY: https:\/\/registry\.npmmirror\.com/); + // #119 item 9: the release gate refuses placeholder operator details and draft legal text, + // right after the frontend install and before the long checks. + assert.match( + workflow, + /npm ci --prefix frontend\n\s+# [^\n]*\n\s+\(cd frontend && JYOTISHA_REQUIRE_LEGAL_ENTITY=1 npx tsx --test tests\/legal-consent-20260930\.test\.tsx\)\n\s+python scripts\/run_quality_gate\.py --profile release/, + ); for (const dependency of [ "mcp==1.28.1", "pydantic==2.13.4",