{ "task_id": "GEN2-024", "task_revision": 1, "architecture_revision": "ARCH-GEN2-000", "base_repo_revision": "gen2-integration", "risk_tier": "E", "intent": "Не смешивать владельца, членов семьи, гостей, голосовые источники и shared/private memory.", "requirement_ids": [ "REQ-GEN2-024-GOAL", "REQ-GEN2-024-BOUNDARY", "REQ-GEN2-024-GATE" ], "allowed_change_scope": { "modules": [ "identity", "world", "epistemics", "interaction" ], "paths": [ "modules/identity/**", "contracts/identity/**", "modules/world/**", "contracts/world/**", "modules/epistemics/**", "contracts/epistemics/**", "modules/interaction/**", "contracts/interaction/**", "adapters/postgres/identity_repository.go", "adapters/postgres/world_repository.go", "adapters/postgres/epistemics_repository.go", "adapters/postgres/interaction_repository.go", "database/migrations/*.sql", "tests/**", "dev/ACTIVE_TASK.json", "dev/tasks/GEN2-024-multi-person-realms-identity-boundaries-and-contextual-source-trust.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.world@gen2", "contracts.epistemics@gen2", "contracts.interaction@v1" ], "may_change": [ "Only contracts explicitly within GEN2-024 allowed_change_scope; preserve Gen2 owner boundaries and backward compatibility unless this packet says cutover." ] }, "semantic_owner": "Identity + World + Epistemics, separate responsibilities. 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": [ "Identity authenticates principals; World resolves referents; Epistemics evaluates source reliability", "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: Identity authenticates principals; World resolves referents; Epistemics evaluates source reliability" ], "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: single-owner mode remains possible; new realm metadata additive", "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." ], "assumptions": [ "Program milestone: M5; 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-023." ], "acceptance_scenarios": [ "GEN2-024-SCN-01: PrincipalDataRealm/owner/shared scopes", "GEN2-024-SCN-02: utterance/source attribution with confidence", "GEN2-024-SCN-03: World person referents do not equal authenticated Principal automatically", "GEN2-024-SCN-04: SourceReliabilityAssessment = source × domain × freshness × history", "GEN2-024-SCN-05: identity ambiguity remains explicit", "GEN2-024-SCN-06: future speaker-recognition result enters as Observation, not authentication truth", "GEN2-024-SCN-07: Context Compiler respects realm/scope isolation", "GEN2-024-EXIT: Домовой может знать семейный контекст, не превращая услышанное имя/голос в полномочия владельца." ], "required_tests": [ "FAST: go test ./modules/identity/... ./modules/world/... ./modules/epistemics/... ./modules/interaction/... ./adapters/postgres", "FAST: go vet ./modules/identity/... ./modules/world/... ./modules/epistemics/... ./modules/interaction/... ./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" ] }