diff --git a/dev/ACTIVE_TASK.json b/dev/ACTIVE_TASK.json index a3e0ab6..49723b2 100644 --- a/dev/ACTIVE_TASK.json +++ b/dev/ACTIVE_TASK.json @@ -1,5 +1,5 @@ { - "task_file": "dev/tasks/DEV-000239-stable-provider-resolution.json", - "task_id": "DEV-000239", + "task_file": "dev/tasks/DEV-000240-cpu-lifeboat-failover-evidence.json", + "task_id": "DEV-000240", "task_revision": 1 } diff --git a/dev/tasks/DEV-000240-cpu-lifeboat-failover-evidence.json b/dev/tasks/DEV-000240-cpu-lifeboat-failover-evidence.json new file mode 100644 index 0000000..9f7a4c4 --- /dev/null +++ b/dev/tasks/DEV-000240-cpu-lifeboat-failover-evidence.json @@ -0,0 +1,23 @@ +{ + "task_id": "DEV-000240", + "task_revision": 1, + "architecture_revision": "ADR-0018", + "base_repo_revision": "383d4c6e4fd53bb0c34ed358e0d1be6a416da6cc", + "risk_tier": "E", + "intent": "Record live durable evidence of CPU model failure followed by successful local Lifeboat failover after stable provider resolution was deployed.", + "requirement_ids": ["model fleet/failover", "durable usage evidence", "false completion prevention"], + "allowed_change_scope": {"modules": ["evidence"], "paths": ["docs/evidence/cpu-lifeboat-failover-2026-08-23-v1.json", "dev/ACTIVE_TASK.json", "dev/tasks/DEV-000240-cpu-lifeboat-failover-evidence.json"]}, + "forbidden_change_scope": {"paths": ["architecture/**", "security/**", "database/**", "deploy/**", "LLM-local/**", "modules/work/secrets/**", "contracts/**"]}, + "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": ["cognitive advisory gateway", "cognitive usage observations"], "may_change": []}, + "semantic_owner": "Evidence only", + "canonical_state": ["no runtime state mutation; evidence captures existing durable observations"], + "state_transitions": ["CPU MODEL_UNAVAILABLE -> builtin local Lifeboat COMPLETED"], + "side_effects_and_privileges": ["bounded LOCAL_ONLY advisory request; no external egress"], + "persistence_and_migrations": ["existing usage observation persistence only"], + "failure_retry_restart": ["the fallback is selected within the bounded gateway request"], + "assumptions": ["provider_instance_id and result_class in capability usage observations are authoritative route attribution"], + "acceptance_scenarios": ["primary failure is durably observed", "fallback completion is durably observed", "HTTP gateway returns COMPLETED", "public health remains OK"], + "required_tests": ["go test ./cmd/cognitive-worker/...", "go vet ./cmd/cognitive-worker/...", "go run ./cmd/devctl preflight -active dev/ACTIVE_TASK.json", "go run ./cmd/devctl check-diff -active dev/ACTIVE_TASK.json", "go run ./cmd/devctl check-architecture", "git diff --check", "independent", "CI", "production health smoke"], + "terminal_gap_states": ["BLOCKED_BY_MISSING_CAPABILITY", "BLOCKED_BY_SPEC_GAP"] +} diff --git a/docs/evidence/cpu-lifeboat-failover-2026-08-23-v1.json b/docs/evidence/cpu-lifeboat-failover-2026-08-23-v1.json new file mode 100644 index 0000000..be1b274 --- /dev/null +++ b/docs/evidence/cpu-lifeboat-failover-2026-08-23-v1.json @@ -0,0 +1,15 @@ +{ + "evidence_id": "cpu-lifeboat-failover-2026-08-23-v1", + "observed_at": "2026-08-23", + "production_revision": "383d4c6e4fd53bb0c34ed358e0d1be6a416da6cc", + "request": {"surface": "internal cognitive-worker advisory gateway", "data_policy": "LOCAL_ONLY", "max_output_bytes": 128, "prompt_class": "bounded readiness response"}, + "http_result": {"status": 200, "finish_reason": "COMPLETED", "output_observed": true}, + "durable_route_observations": [ + {"provider_instance_id": "local-cpu-primary", "result_class": "MODEL_UNAVAILABLE", "failure_type": "MODEL_UNAVAILABLE", "latency_millis": 580}, + {"provider_instance_id": "builtin-local-lifeboat-v1", "result_class": "COMPLETED", "failure_type": null, "latency_millis": 455} + ], + "public_health": {"url": "https://assistant.cin.su/healthz", "status": 200, "runtime": "creator-web"}, + "status": "CPU_TO_LIFEBOAT_FAILOVER_LIVE_PASS", + "secrets_exposed": false, + "remaining": ["medium/GPU validated multi-model failover", "quality-based promotion", "long-running failover and restart chaos"] +}