{ "task_id": "DEV-000129", "task_revision": 1, "architecture_revision": "ADR-0018", "base_repo_revision": "bab96b7", "risk_tier": "E", "intent": "Add durable Work-owned dispatch queue with atomic claim, retry attempt count and terminal state transitions as the first real dispatcher runtime foundation.", "requirement_ids": ["WP-301", "Durable dispatcher queue", "Atomic claim"], "allowed_change_scope": {"modules": ["work-agent-execution", "work-storage"], "paths": ["database/migrations/030_work_agent_dispatch_queue.sql", "contracts/work/dispatch_queue.go", "adapters/postgres/work_repository.go", "tests/agent_execution/dispatch_queue_sql_test.go", "dev/ACTIVE_TASK.json", "dev/tasks/DEV-000129-agent-dispatch-queue.json"]}, "forbidden_change_scope": {"paths": ["architecture/**", "security/**", "deploy/**", "cmd/**", "runtime/**", ".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": 1}, "contracts": {"consume": ["DEV-000121 durable persistence", "DEV-000120 dispatch intent"], "may_change": ["Work dispatch queue contract and repository methods"]}, "semantic_owner": "work-agent-execution", "canonical_state": ["work.agent_dispatch_queue"], "state_transitions": ["QUEUED -> CLAIMED -> COMPLETED/FAILED"], "side_effects_and_privileges": ["Work schema only; no cross-owner SQL; no runtime entrypoint"], "persistence_and_migrations": ["Append-only migration 030; work_role only; production apply is a later canary step"], "failure_retry_restart": ["SKIP LOCKED prevents duplicate claim; attempts are durable; terminal transition is worker-fenced"], "assumptions": ["A later worker task will enqueue intents and execute claimed work"], "acceptance_scenarios": ["Queue schema is durable", "Concurrent claim uses row lock and SKIP LOCKED", "Wrong worker cannot complete another claim"], "required_tests": ["go test ./...", "go vet ./...", "preflight", "check-diff", "check-architecture", "independent", "git diff --check"], "terminal_gap_states": ["BLOCKED_BY_MIGRATION_DECISION", "BLOCKED_BY_SPEC_GAP", "BLOCKED_BY_CONFLICT"] }