{ "task_id": "DEV-000293", "task_revision": 1, "architecture_revision": "ADR-0019", "base_repo_revision": "origin/main", "risk_tier": "E", "intent": "Authorize a bounded read-only site-browser capability for dynamic web pages so Domovoy can observe rendered product data, including prices, without granting account access or external mutation authority.", "requirement_ids": ["bounded browser observation", "dynamic web research", "price evidence extraction"], "allowed_change_scope": { "modules": ["capability", "epistemics", "core-runtime", "research"], "paths": [ "architecture/adrs/ADR-0014-assistant-presence-attention-human-surface.md", "architecture/adrs/ADR-0015-human-response-continuation-semantics.md", "architecture/adrs/ADR-0019-bounded-site-browser-observation.md", "dev/ACTIVE_TASK.json", "dev/tasks/DEV-000293-site-browser-capability.json", "docs/PROJECT_STATUS.md" ] }, "forbidden_change_scope": { "paths": ["security/**", "database/**", "deploy/docker-compose.prod.yml", "LLM-local/**"] }, "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": ["existing capability registry", "existing epistemics observation/provenance", "existing research adapter boundary"], "may_change": ["architecture allowance for bounded read-only browser observation"] }, "semantic_owner": "capability owns availability and limits; epistemics owns observations and provenance", "canonical_state": ["no new canonical state; browser output remains an observation/artifact projection"], "state_transitions": ["search-only observation -> bounded rendered-page observation -> source-backed answer"], "side_effects_and_privileges": ["read-only HTTPS/browser egress only", "no cookies, account sessions, credentials, downloads, uploads, form submission or external mutation"], "persistence_and_migrations": ["no database migration"], "failure_retry_restart": ["timeouts and blocked pages remain partial/unknown observations", "no blind retries that can duplicate external effects"], "assumptions": ["browser runtime is replaceable and isolated from canonical runtimes", "site allowlist and navigation policy are server-owned"], "acceptance_scenarios": ["dynamic price page can be observed when allowlisted", "401/challenge/timeout is reported as unavailable evidence", "browser cannot submit credentials or mutate a site", "source URL, observed time and coverage remain attached", "existing search-only route remains unchanged when browser capability is unavailable", "production behavior stays read-only"], "required_tests": ["architecture preflight", "check-diff", "ADR consistency", "go test ./...", "go vet ./...", "go run ./cmd/devctl check-architecture", "go run ./cmd/devctl independent", "git diff --check"], "terminal_gap_states": ["BLOCKED_BY_ARCHITECTURE_GAP", "BLOCKED_BY_SPEC_GAP", "BLOCKED_BY_CONFLICT", "BLOCKED_BY_MISSING_CAPABILITY"] }