{
  "id": "external_knowledge_access",
  "label": "External Knowledge Access Canonical",
  "phase": "phase-03",
  "category": "cognitive_flow",
  "status": "ACTIVE_DH_MIRROR",
  "purpose": "Define the governed external knowledge lane that lets DEVON-DEV research documentation, errors, changelogs, repositories and technical references without treating the internet as sovereign truth.",
  "function": "Route outside knowledge through FSM authorization, controlled search, controlled fetch, optional browser automation, source trust classification, evidence storage, RAG injection and final FSM acceptance or rejection.",
  "service_target": {
    "technology": "Python External Knowledge Access Service",
    "suggested_container": "devon-external-knowledge",
    "components": [
      "search_connector",
      "http_fetcher",
      "browser_automation_when_authorized",
      "crawler_when_authorized",
      "content_extractor",
      "web_cache",
      "citation_registry",
      "freshness_validator",
      "source_conflict_detector"
    ],
    "material_status": "MISSING",
    "decision_authority": "NONE_FSM_DECIDES"
  },
  "technology_requirements": [
    {
      "technology": "Python External Knowledge Access Service",
      "required_for": "Governed external research for official documentation, technical errors, changelogs, repositories, package references and outside evidence candidates.",
      "required_by_phase": "phase-03",
      "required_by_category": "external_knowledge_access",
      "required_by_buckets": [
        "Prerequisites",
        "Installation",
        "Configuration",
        "Validation",
        "Observable Evidence",
        "Failure Modes & Recovery",
        "Completion & Promotion"
      ],
      "expected_version": "MISSING until service implementation and source trust flow exist",
      "validation_command": "MISSING until devon-external-knowledge exposes search, fetch, timeout, rate-limit, cache, provenance and source-trust handoff checks",
      "evidence_path": "/home/yeff/public_html/devon/canon/execution/state/dh_sources/external_knowledge_access_canonical.json",
      "status_source": "Documentation Hub + future devon-external-knowledge health check + Source Trust Registry + Evidence Store",
      "blocking_if_missing": true,
      "failure_impact": "Without governed external access, DEVON-DEV is either isolated from current technical references or exposed to uncontrolled internet results that can contaminate decisions."
    },
    {
      "technology": "Web Search Connector",
      "required_for": "Search candidate external sources without treating search output as authority.",
      "required_by_phase": "phase-03",
      "required_by_category": "external_knowledge_access",
      "required_by_buckets": [
        "Installation",
        "Configuration",
        "Validation",
        "Observable Evidence",
        "Failure Modes & Recovery"
      ],
      "expected_version": "MISSING until provider or internal search path is selected",
      "validation_command": "MISSING until search connector emits query, result, source, timestamp and provenance records",
      "evidence_path": "/home/yeff/public_html/devon/canon/execution/state/dh_sources/external_knowledge_access_canonical.json",
      "status_source": "Documentation Hub + future devon-external-knowledge logs + Source Trust Registry",
      "blocking_if_missing": true,
      "failure_impact": "Without a search connector, external discovery remains manual and cannot be audited through the DEVON-DEV evidence chain."
    },
    {
      "technology": "HTTP Fetcher",
      "required_for": "Download approved URLs with timeout, user-agent, rate limit, logs and provenance before external material can enter Evidence Store.",
      "required_by_phase": "phase-03",
      "required_by_category": "external_knowledge_access",
      "required_by_buckets": [
        "Installation",
        "Configuration",
        "Validation",
        "Observable Evidence",
        "Failure Modes & Recovery"
      ],
      "expected_version": "MISSING until fetcher module exists inside devon-external-knowledge",
      "validation_command": "MISSING until approved URL fetch, timeout, logging and provenance checks exist",
      "evidence_path": "/home/yeff/public_html/devon/canon/execution/state/dh_sources/external_knowledge_access_canonical.json",
      "status_source": "Documentation Hub + future HTTP Fetcher logs + Evidence Store",
      "blocking_if_missing": true,
      "failure_impact": "Without controlled fetching, external references cannot be captured with provenance, freshness or repeatable evidence."
    },
    {
      "technology": "Browser Automation",
      "required_for": "Access dynamic documentation pages only when HTTP fetch is insufficient and FSM authorizes a browser worker path.",
      "required_by_phase": "phase-03",
      "required_by_category": "external_knowledge_access",
      "required_by_buckets": [
        "Configuration",
        "Validation",
        "Failure Modes & Recovery",
        "Completion & Promotion"
      ],
      "expected_version": "PLANNED_OR_MISSING until browser worker decision",
      "validation_command": "MISSING until devon-browser-worker or equivalent authorized browser path exists",
      "evidence_path": "/home/yeff/public_html/devon/canon/execution/state/dh_sources/external_knowledge_access_canonical.json",
      "status_source": "Documentation Hub + future browser worker health check + Source Trust Registry",
      "blocking_if_missing": false,
      "failure_impact": "Without authorized browser automation, dynamic pages may remain unreadable; with uncontrolled browser automation, external access becomes an unmanaged execution surface."
    }
  ],
  "depends_on": [
    "cfc",
    "local_llm_runtime",
    "internal_rag",
    "retrieval_engine",
    "embeddings_engine",
    "vector_index",
    "fsm_absolute_decision",
    "decision_rule_registry",
    "tool_registry",
    "architecture_source_registry"
  ],
  "used_by": [
    "source_trust_registry",
    "evidence_store",
    "knowledge_conflict_resolver",
    "prompt_governance",
    "prompt_instruction_assembly",
    "observability_core"
  ]
}
