Files
Assistant/dev/tasks/DEV-000293-site-browser-capability.json
m 14bf8261da
CI / test (push) Successful in 1m5s
CI / test (pull_request) Successful in 1m9s
Authorize bounded site browser observation
2026-08-25 11:15:07 +03:00

45 lines
3.1 KiB
JSON

{
"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"]
}