{ "task_id": "GEN2-004", "task_revision": 1, "architecture_revision": "ARCH-GEN2-000", "base_repo_revision": "gen2-integration", "risk_tier": "E", "intent": "Сделать Focus многомерным: person/org/system/database/repository/version/activity/goal/task/entities, а Project оставить лишь возможной гранью.", "requirement_ids": [ "REQ-GEN2-004-GOAL", "REQ-GEN2-004-BOUNDARY", "REQ-GEN2-004-GATE" ], "allowed_change_scope": { "modules": [ "situation", "interaction" ], "paths": [ "modules/situation/**", "contracts/situation/**", "adapters/postgres/situation_repository.go", "database/migrations/*.sql", "cmd/core-runtime/**", "modules/interaction/**", "contracts/interaction/**", "tests/**", "dev/ACTIVE_TASK.json", "dev/tasks/GEN2-004-replace-project-centric-focus-with-contextscope-focusframe-focusstack.json" ] }, "forbidden_change_scope": { "paths": [ "security/**", "go.mod", "go.sum", "architecture/**", ".gitea/workflows/**", "deploy/**", "adapters/models/**" ] }, "allowed_architecture_delta": { "new_cross_module_dependencies": 0, "new_canonical_owners": 0, "new_privileges": 0, "new_third_party_dependencies": 0, "new_database_owner_roles": 1 }, "contracts": { "consume": [ "contracts.identity@v1", "contracts.authority@v1", "contracts.world@gen2", "contracts.work@v1", "contracts.capability@v1" ], "may_change": [ "Only contracts explicitly within GEN2-004 allowed_change_scope; preserve Gen2 owner boundaries and backward compatibility unless this packet says cutover." ] }, "semantic_owner": "Situation. Follow GEN2 target architecture: owner boundaries are authoritative; Memory remains a read/retrieval fabric, World is not truth owner, SELF is not a God orchestrator.", "canonical_state": [ "before: V1 situation/project focus; after: Situation FocusFrame/Transition; ActiveProjectFocus becomes projection/compatibility", "No task may create a second canonical owner for an already-owned mutable semantic concept." ], "state_transitions": [ "current state -> additive/shadow Gen2 path -> evidence comparison -> controlled cutover -> compatibility retention; writer rule: before: V1 situation/project focus; after: Situation FocusFrame/Transition; ActiveProjectFocus becomes projection/compatibility" ], "side_effects_and_privileges": [ "No external mutation may bypass existing Authority -> Commit -> Executor boundaries.", "Do not weaken architecture/security/test guardrails to make the task pass." ], "persistence_and_migrations": [ "Database changes must be additive next-numbered migrations only until an explicitly approved retirement task; never edit historical V1 migrations 001-045.", "At most one canonical writer is active for each semantic state; backfill/shadow reads do not create a second canonical writer.", "The positive new_database_owner_roles delta in this packet is a devctl-v1 database-surface compatibility gate; it does not authorize cross-owner SQL/FK/JOIN or an extra owner unless explicitly stated by this task." ], "failure_retry_restart": [ "Rollback rule: feature switch возвращает V1 read path; Gen2 transitions сохраняются", "Retries/restarts must not create duplicate external side effects or a second canonical writer.", "Durable state required by this task must survive process restart; process-local memory is never the only source of truth.", "Cutover must keep the previous read/compatibility path available until the task or milestone explicitly proves retirement." ], "assumptions": [ "Program milestone: M1; test profile: FAST.", "Task branch starts from local gen2-integration; base_repo_revision=gen2-integration must resolve to the untouched integration base while the task branch is active.", "Codex reads DOMOVOY_CONSTITUTION.md, GEN2_TARGET_ARCHITECTURE.md, GEN2_CANONICAL_DATA_MODEL.md, GEN2_MIGRATION_MAP.md, GEN2_MASTER_PLAN.md and GEN2_EXECUTION_CONTRACT.md before non-trivial edits.", "Do not expand scope silently. If a required change falls outside allowed paths or changes ownership, return a typed gap and request a task revision.", "Depends on: GEN2-003." ], "acceptance_scenarios": [ "GEN2-004-SCN-01: добавить ContextScope RoleKey/ScopeValue/MatchPolicy", "GEN2-004-SCN-02: добавить FocusFrame stable ID + revision", "GEN2-004-SCN-03: добавить FocusTransition append-only ledger", "GEN2-004-SCN-04: добавить FocusStack/parent/suspended/resume semantics", "GEN2-004-SCN-05: реализовать explicit focus command и inferred focus как разные evidence paths", "GEN2-004-SCN-06: построить compatibility projection ActiveProjectFocus из FocusFrame", "GEN2-004-SCN-07: переключить core/context readers на Focus V2 постепенно", "GEN2-004-EXIT: короткое отвлечение может push/pop focus; Company A/UNF и Company B/UNF не смешиваются по текущему scope." ], "required_tests": [ "FAST: go test ./modules/situation/... ./contracts/situation/... ./modules/interaction/... ./cmd/core-runtime/... ./adapters/postgres", "FAST: go vet ./modules/situation/... ./contracts/situation/... ./modules/interaction/... ./cmd/core-runtime/... ./adapters/postgres", "FAST governance: go run ./cmd/devctl preflight -active dev/ACTIVE_TASK.json", "FAST scope: go run ./cmd/devctl check-diff -active dev/ACTIVE_TASK.json", "FAST independent: go run ./cmd/devctl/independent", "FAST whitespace: git diff --check gen2-integration --" ], "terminal_gap_states": [ "BLOCKED_BY_SPEC_GAP", "BLOCKED_BY_ARCHITECTURE_GAP", "BLOCKED_BY_MISSING_CAPABILITY", "BLOCKED_BY_CONFLICT", "REQUIRES_MIGRATION_DECISION" ] }