{ "task_id": "GEN2-008", "task_revision": 1, "architecture_revision": "ARCH-GEN2-000", "base_repo_revision": "gen2-integration", "risk_tier": "E", "intent": "Сохранять не только «что сработало», но problem/attempt/why/result/why failed/conditions/evidence.", "requirement_ids": [ "REQ-GEN2-008-GOAL", "REQ-GEN2-008-BOUNDARY", "REQ-GEN2-008-GATE" ], "allowed_change_scope": { "modules": [ "epistemics", "artifact" ], "paths": [ "modules/epistemics/**", "contracts/epistemics/**", "adapters/postgres/epistemics_repository.go", "contracts/artifact/**", "database/migrations/*.sql", "tests/**", "dev/ACTIVE_TASK.json", "dev/tasks/GEN2-008-promote-episode-and-experience-v2-including-negative-experience.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.epistemics@gen2", "contracts.artifact@v1", "contracts.world@gen2" ], "may_change": [ "Only contracts explicitly within GEN2-008 allowed_change_scope; preserve Gen2 owner boundaries and backward compatibility unless this packet says cutover." ] }, "semantic_owner": "Epistemics. 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": [ "Epistemics remains canonical Experience writer; Episode projection derived", "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: Epistemics remains canonical Experience writer; Episode projection derived" ], "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: старые Experience records остаются валидны; Episode projection rebuildable", "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: M2; 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-007." ], "acceptance_scenarios": [ "GEN2-008-SCN-01: расширить ExperienceRecord V1 без потери старых IDs/evidence", "GEN2-008-SCN-02: сделать success/failure first-class", "GEN2-008-SCN-03: добавить conditions/applicability/version bindings", "GEN2-008-SCN-04: создать Episode как derived/rebuildable episodic projection", "GEN2-008-SCN-05: связать user correction с ReflectionCandidate/Experience", "GEN2-008-SCN-06: добавить anti-pattern: failure under conditions != forever wrong", "GEN2-008-EXIT: retrieval позже может отдельно запросить «что уже пробовали и почему не сработало»." ], "required_tests": [ "FAST: go test ./modules/epistemics/... ./contracts/epistemics/... ./adapters/postgres", "FAST: go vet ./modules/epistemics/... ./contracts/epistemics/... ./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" ] }