45 lines
3.1 KiB
JSON
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"]
|
|
}
|