# External Adapter Packs `phase-memory` can resolve runtime configuration values that declare adapter mode `external`. Missing external adapters still fail resolution, but supplied adapter packs can satisfy the public runtime ports. ## Fake External Pack `phase_memory.external_adapters.fake_external_adapter_pack()` returns a local fake pack for conformance and integration tests. It provides: - `FakeExternalGraphStore` - `FakeExternalEventLog` - `FakeExternalPolicyGateway` - `FakeTelemetryAuditSink` - `FakeMarkitectPackageCompiler` - `FakeExternalSemanticIndex` - `FakeKontextualRuntimeRegistry` The pack is not a production adapter. It is intentionally deterministic and dependency-light so that service wiring, conformance helpers, and runtime envelopes can be tested before live Markitect, Kontextual, or telemetry services exist. ## Runtime Wiring ```python from phase_memory.external_adapters import ( fake_external_adapter_pack, fake_external_runtime_config, ) from phase_memory.service import runtime_from_config config = fake_external_runtime_config() pack = fake_external_adapter_pack() runtime = runtime_from_config(config, external_adapters=pack.adapters) ``` `resolve_runtime_adapters(config, external_adapters=pack.adapters)` returns a `RuntimeAdapterBundle` with diagnostics. External declarations produce `external_adapter_declared` warnings. Missing adapters produce `missing_external_adapter` errors and block runtime construction. ## Conformance The fake pack passes the same public helpers expected of live adapters: - `assert_graph_store_conformance` - `assert_event_log_conformance` - `assert_context_compiler_conformance` - `assert_policy_gateway_conformance` - `assert_audit_sink_conformance` - `assert_semantic_index_conformance` - `assert_runtime_registry_conformance` Live adapter packs should pass those helpers before being wired into a runtime or service runner.