From 6f5f7e1ee3835339862f6dd5584babe788ca9201 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Sat, 22 Aug 2026 13:49:03 +0300 Subject: [PATCH] test(creator-web): cover cabinet acceptance contract --- dev/ACTIVE_TASK.json | 2 +- ...138-ui-operations-acceptance-contract.json | 23 ++++++++ .../cabinet_acceptance_contract_test.go | 54 +++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 dev/tasks/DEV-000138-ui-operations-acceptance-contract.json create mode 100644 tests/creator_web/cabinet_acceptance_contract_test.go diff --git a/dev/ACTIVE_TASK.json b/dev/ACTIVE_TASK.json index 56e69b3..451df16 100644 --- a/dev/ACTIVE_TASK.json +++ b/dev/ACTIVE_TASK.json @@ -1,5 +1,5 @@ { "task_file": "dev/tasks/DEV-000134-truth-bundle-compiler.json", - "task_id": "DEV-000137", + "task_id": "DEV-000138", "task_revision": 1 } diff --git a/dev/tasks/DEV-000138-ui-operations-acceptance-contract.json b/dev/tasks/DEV-000138-ui-operations-acceptance-contract.json new file mode 100644 index 0000000..978983a --- /dev/null +++ b/dev/tasks/DEV-000138-ui-operations-acceptance-contract.json @@ -0,0 +1,23 @@ +{ + "task_id": "DEV-000138", + "task_revision": 1, + "architecture_revision": "ADR-0018", + "base_repo_revision": "1ccd43c", + "risk_tier": "E", + "intent": "Add executable contract coverage for authenticated cabinet, operations, learning, accessibility, responsive, and reduced-motion surfaces.", + "requirement_ids": ["WP-801", "WP-802", "WP-805", "Authenticated cabinet acceptance"], + "allowed_change_scope": {"modules": ["creator-web"], "paths": ["tests/creator_web/cabinet_acceptance_contract_test.go", "dev/ACTIVE_TASK.json", "dev/tasks/DEV-000138-ui-operations-acceptance-contract.json"]}, + "forbidden_change_scope": {"paths": ["architecture/**", "security/**", "deploy/**", "database/**", "cmd/**", "contracts/**", ".gitea/**"]}, + "allowed_architecture_delta": {"new_cross_module_dependencies": 0, "new_canonical_owners": 0, "new_privileges": 0, "new_third_party_dependencies": 0, "new_database_owner_roles": 0}, + "contracts": {"consume": ["Existing creator-web authenticated API and static cabinet"], "may_change": ["Acceptance tests only"]}, + "semantic_owner": "creator-web", + "canonical_state": ["None; tests inspect existing UI contract"], + "state_transitions": ["login session gates cabinet; operations and learning request authenticated API data"], + "side_effects_and_privileges": ["No external mutation; live authenticated browser acceptance remains a separate production verification"], + "persistence_and_migrations": ["None"], + "failure_retry_restart": ["Missing auth, learning, or responsive contract fails CI"], + "assumptions": ["Credentials are never embedded in acceptance tests"], + "acceptance_scenarios": ["cabinet exposes operations and reflection surfaces", "session and learning routes are authenticated", "mobile/reduced motion rules are present"], + "required_tests": ["go test ./...", "go vet ./...", "preflight", "check-diff", "check-architecture", "independent", "git diff --check"], + "terminal_gap_states": ["BLOCKED_BY_AUTHENTICATED_BROWSER_SESSION", "BLOCKED_BY_CONFLICT"] +} diff --git a/tests/creator_web/cabinet_acceptance_contract_test.go b/tests/creator_web/cabinet_acceptance_contract_test.go new file mode 100644 index 0000000..b0d5965 --- /dev/null +++ b/tests/creator_web/cabinet_acceptance_contract_test.go @@ -0,0 +1,54 @@ +package creator_web_test + +import ( + "os" + "strings" + "testing" +) + +func TestCreatorCabinetHasAuthenticatedOperationalAndLearningSurfaces(t *testing.T) { + page, err := os.ReadFile("../../cmd/creator-web/static/index.html") + if err != nil { + t.Fatal(err) + } + markup := string(page) + for _, marker := range []string{ + `