Version: v0.1
Status: Review
Owners: FMIE / Foundation / Cortex / Frontend
Last Updated: 2026-03-26
Change Type: additive
Migration Required: yes
Depends On: FMIE 0.42.7 handoff, Media Passport spec, External Cognition Gateway spec, Partner-Fit spec
Supersedes: fmie-gap-audit-2026-03-25.md
Superseded By: none
This audit checks the actual Foundation-V2 implementation against the current FMIE 0.42.7 contract, not the older handoff assumptions.
Sources reviewed:
- services/haystack-pipeline/src/haystack_pipeline/ingest.py
- services/scout-fleet/src/scout_fleet/fmie_access.py
- services/scout-fleet/src/scout_fleet/runtime.py
- services/cognition-gateway/src/cognition_gateway/passport.py
- services/cognition-gateway/src/cognition_gateway/receipt.py
- services/cognition-gateway/src/cognition_gateway/app.py
- services/haystack-pipeline/src/haystack_pipeline/clip_extractor.py
- services/haystack-pipeline/src/haystack_pipeline/document_regions.py
- services/haystack-pipeline/src/haystack_pipeline/entity_matcher.py
Foundation-V2 is now meaningfully integrated with FMIE in three places:
- Haystack ingest uses process_document() as the main local extraction path
- Scout Fleet has a real fmie_access.py wrapper and batch path
- Cognition Gateway validates summary.passport.json through native FMIE verification
But the integration is still incomplete in the places that matter most for the next generation: - trust and anchoring still do not use the full FMIE Media Passport proof set - version pinning is stale and brittle - partner-fit helper artifacts are wrapped but not consumed - runtime / health / telemetry discovery is unused - some direct frontier-model paths still bypass the Gateway
fmie_native.process_document() and captures text, pages, tables, charts, transcript, meeting signals, evidence, authenticity, and fingerprints.fmie_native.analyze_batch() when available and falls back cleanly.clip_extractor.py.passport.py parses summary.passport.jsonfmie_verify_passport_json() is called when the FMIE library is presentget_partner_fit_inputs()get_meeting_need_vectors()check_partner_fit_ready()get_passport()extract_clip()The gap is usage depth, not total absence.
services/cognition-gateway/src/cognition_gateway/receipt.py
- request and response commitments are truncated to 16 hex chars
- these are not commitment-grade hashes for the Midnight model
services/cognition-gateway/src/cognition_gateway/app.py
- anchors a synthetic session passport from the request hash
- does not use FMIE passport proof material such as:
- artifact_root_sha256
- midnight_anchor_payload_sha256
- transform_manifest_sha256
- source_uri_sha256
Impact: - Media Passport is validated, but the live anchor path still does not reflect the full FMIE passport contract
packages/answerer-py/src/answerer/__init__.py
- sends raw prompt, internal context, and analysis to Anthropic via call_frontier_model
- this is better than raw httpx usage, but it is still not the Cognition Gateway path
services/haystack-pipeline/src/haystack_pipeline/ingest.py
- generates long-document summaries with a direct Anthropic HTTP call
- this bypasses Semantic Airgap and receipt creation entirely
Impact: - the new external-cognition architecture is only partially universal
services/scout-fleet/src/scout_fleet/fmie_access.py
- wrapper methods exist for:
- summary.partner_fit_inputs.json
- summary.meeting_need_vectors.json
- partner_fit readiness
- but services/scout-fleet/src/scout_fleet/runtime.py does not use them yet
services/haystack-pipeline/src/haystack_pipeline/ingest.py
- does not consume any of the new partner-fit helper artifacts
Impact: - Foundation is still rebuilding higher-order meaning from raw FMIE outputs instead of consuming normalized FMIE helper contracts
Still pinned in live code:
- services/haystack-pipeline/src/haystack_pipeline/ingest.py
- services/scout-fleet/src/scout_fleet/fmie_access.py
Current pattern:
- /mnt/Storage-1/worktrees/comic/native/build/libfmie_c.so.0.42.2
Impact: - every FMIE runtime bump risks silent drift or partial breakage
services/haystack-pipeline/src/haystack_pipeline/document_regions.py
- page / region / table / chart parsing exists
- I did not find a production caller for it
Impact: - Foundation is throwing away richer document structure it already has code to understand
services/haystack-pipeline/src/haystack_pipeline/entity_matcher.py
- the FMIE matcher-index family is wrapped
- no production usage found
Impact: - Foundation is not using FMIE’s strongest native identity continuity primitives yet
Unused surfaces include:
- fmie_get_runtime_status_json()
- fmie_get_health_status_json()
- progress / phase callbacks
- build profile / capabilities
- telemetry snapshots
Impact: - Cortex and operations still cannot see FMIE as a first-class runtime peer
Right now the same FMIE resolution and fallback logic is duplicated across: - Haystack ingest - Scout Fleet - Passport validation - Clip extraction - Entity matcher
A single Foundation-side client package should own: - library resolution - wrapper import path resolution - current runtime discovery - helper artifact resolution - health/runtime-status fetches
Scout and Haystack should consume:
- summary.meeting_need_vectors.json
- summary.partner_fit_inputs.json
- summary.passport.json.partner_fit
Instead of only reading raw meeting_signals, tables, charts, and evidence.
Foundation already parses:
- midnight_anchor_payload_sha256
- transform_manifest_sha256
- source_uri_sha256
Those should become the actual anchoring inputs instead of synthetic session hashes.
Cortex should poll: - runtime status - health status - crash breadcrumbs - build profile
That enables: - worker readiness checks - crash triage - model residency diagnostics - batch-vs-sequential scheduling decisions
There is no hard FMIE-native blocker for Foundation-V2 at the moment.
The remaining high-priority work is mostly on the Foundation / Cortex side: - stronger consumption of shipped helper artifacts - stronger trust-path anchoring - universal Gateway routing - runtime observability