{% extends "base.html" %} {% block title %}Explorer β€” Document Intelligence β€” ICDEVβ„’{% endblock %} {% block content %}
CUI // SP-CTI

πŸ”Ž Buried-Bodies Explorer

KG-driven findings β€” orphans, tribal knowledge, undocumented dependencies, contradictions, superseded docs.

← Back to DIC
{{ findings | selectattr('severity', 'equalto', 'critical') | list | length }}
πŸ”΄ Critical
{{ findings | selectattr('severity', 'equalto', 'high') | list | length }}
🟑 High
{{ findings | selectattr('severity', 'equalto', 'medium') | list | length }}
πŸ”΅ Medium
{{ findings | selectattr('severity', 'equalto', 'low') | list | length }}
βšͺ Low
{# cef-ui-02 β€” cross-source conflicts and gaps from cortex.resolve(). Two findings the platform could not previously SEE, let alone show: two of its own sources disagreeing about one entity (cef-rsv-02), and an entity nothing could answer for. Both are rendered WITHOUT a winner β€” every side is shown whole with its own provenance and as-of date, because picking one here would delete the finding and report the survivor as fact. #} {% set cortex = cortex or {"conflicts": [], "gaps": [], "stats": {"state": "unmeasured"}, "filters": {}, "actionable": {}} %} {% set cstats = cortex.stats or {} %}

βš–οΈ Cross-Source Conflicts & Gaps β€” what cortex.resolve() found when it put two sources' claims side by side

{{ {'findings': 'FINDINGS', 'clean': 'MEASURED CLEAN', 'unmeasured': 'UNMEASURED', 'disabled': 'RECORDING OFF'}.get(cstats.state, 'UNMEASURED') }}
{# A zero here has four causes and only ONE of them is "your sources agree". `conflicts`/`gaps` are None β€” not 0 β€” for the two that are not measurements, so this block cannot print a reassuring number for a surface that never looked. #}
{% if cstats.conflicts is none %}β€”{% else %}{{ cstats.conflicts }}{% endif %}
βš–οΈ Conflicts
{% if cstats.cross_backend is none %}β€”{% else %}{{ cstats.cross_backend }}{% endif %}
πŸ”€ Cross-backend
{% if cstats.gaps is none %}β€”{% else %}{{ cstats.gaps }}{% endif %}
πŸ•³οΈ Gaps (nobody answered)
{{ cstats.resolutions or 0 }}
πŸ“‹ Resolutions recorded
{% if cstats.state != 'findings' %}
{% if cstats.state == 'clean' %} Measured clean. {{ cstats.detail }} An empty list here means detection RAN and found nothing β€” not that nothing looked. {% elif cstats.state == 'disabled' %} Recording is off. {{ cstats.detail }} Set resolve.persist_findings: true in args/cortex_config.yaml. This says nothing about whether your sources agree. {% else %} Unmeasured. {{ cstats.detail or 'No resolution has been recorded on this deployment yet.' }} Conflicts and gaps appear here once cortex.resolve() runs β€” a docmod sweep, a DocDrift draft screen, or POST /cortex/api/v1/resolve. This is not a clean bill of health. {% endif %}
{% endif %}

βš–οΈ Conflicts β€” two sources, one entity, incompatible claims. Nothing below picks a side.

{% for c in cortex.conflicts %}
{{ c.entity_label or c.entity_key }} Β· {{ c.conflict_kind }} {{ c['values'] | join(' βš” ') }} {% if c.cross_backend %}cross-backend{% endif %} {{ c.sides | length }} claim(s) Β· seen {{ c.seen_count }}Γ—
⚠️ Unresolved by design. Both claims are shown as their sources made them. ICDEV does not pick a winner here β€” a currency disagreement is adjudicated by a human, and resolving it in the detector would delete the finding and report the survivor as fact.
{% for s in c.sides %}
{{ s.status }} claim {{ loop.index }} of {{ c.sides | length }}
{% if s.raw_status and s.raw_status != s.status %}
source's own word: β€œ{{ s.raw_status }}”
{% endif %}
source {{ s.source or 'β€”' }}
as of {{ s.as_of or 'not stated' }} (the source's clock, not ours)
backend {% for b in (s.backends or [s.backend]) %}{{ b }}{% endfor %}
{% if s.source_table or s.source_id %}
row {{ s.source_table }}{% if s.source_id %}#{{ s.source_id }}{% endif %}
{% endif %} {% if s.superseded_by %}
successor {{ s.superseded_by }}
{% endif %} {% if s.eol_date %}
EOL {{ s.eol_date }}
{% endif %}
{# The extraction LANE, carried on every side so a reader can discount a weaker one without the detector having quietly discounted it. #} {{ s.extraction }} {% if s.authoritative %}authoritative{% endif %} {% if s.confidence %}prior {{ s.confidence }}{% endif %}
{% if s.snippet %}
{{ s.snippet }}
{% endif %}
{% endfor %}
{% if c.uncited_sides %}
Sides that name an authority and no row: {% for u in c.uncited_sides %}{{ u.source or u.backend }} ({{ u.status }}) β€” {{ u.reason }}{% if not loop.last %}; {% endif %}{% endfor %}
Reported, never lent a neighbour's citation β€” that would attribute one source's claim to another source's row.
{% endif %}
{{ c.citations | length }} citation(s){% if c.subject_entity %} Β· surfaced resolving {{ c.subject_entity }} (verdict {{ c.subject_verdict }}){% endif %}
{# Actionable: DocDrift is where a redline is drafted from. #} πŸ›°οΈ Act on DocDrift{% if cortex.actionable.get(c.entity_label) %} Β· {{ cortex.actionable.get(c.entity_label) }} finding(s){% endif %} β†’
{% else %}

{% if cstats.state == 'clean' %}No conflict: every source that made a claim made a compatible one. {% else %}No conflicts recorded β€” see the measurement state above before reading that as agreement.{% endif %}

{% endfor %}

πŸ•³οΈ Gaps β€” entities no source could answer for. Unknown is a finding, not silence.

{{ cortex.gaps | length }} shown
{% for g in cortex.gaps %}
{{ g.entity_label or g.entity_key }} {% for r in g.reasons %}{{ r | replace('_', ' ') }}{% endfor %} {# An outage is context for a gap, NEVER its cause β€” carried on its own field so a dead backend cannot read as a statement about the corpus. #} {% if g.backends_failed %}outage: {{ g.backends_failed | join(', ') }}{% endif %}
πŸ›°οΈ DocDrift{% if cortex.actionable.get(g.entity_label) %} Β· {{ cortex.actionable.get(g.entity_label) }}{% endif %} β†’
consulted {{ g.backends | join(', ') or 'β€”' }} Β· {{ g.citations | length }} citation(s) {% if g.citation_basis %}Β· basis {{ g.citation_basis | replace('_', ' ') }}{% endif %} Β· seen {{ g.seen_count }}Γ—
{% else %}

{% if cstats.state == 'clean' %}No gap: every entity in the resolved set drew a claim. {% else %}No gaps recorded β€” see the measurement state above.{% endif %}

{% endfor %}

πŸ•ΈοΈ Corpus Themes β€” GraphRAG community summaries, the themes that span whole documents

{{ themes | map(attribute='themes') | map('length') | sum }} theme(s) Β· {{ themes | length }} collection(s)
{% for group in themes %}
πŸ—‚οΈ {{ group.collection }} Β· {{ group.themes | length }} theme(s)
{% for t in group.themes %}
{{ t.summary }}
{% if t.entities %}
{% for e in t.entities %}{{ e }}{% endfor %}
{% endif %}
{% endfor %}
{% else %}

No themes yet. Themes are built from the knowledge graph nightly (or run python -m tools.knowledge_graph.community_engine --build).

{% endfor %}
{% for f in findings %} {% else %} {% endfor %}
Severity Type Document / Entity Detail Suggested Action Link
{% if f.severity == 'critical' %} πŸ”΄ Critical {% elif f.severity == 'high' %} 🟑 High {% elif f.severity == 'medium' %} πŸ”΅ Medium {% else %} βšͺ Low {% endif %} {{ f.finding_type | replace('_', ' ') | title }} {{ f.title or f.doc_id or f.entity_ref }} {{ f.detail }} {{ f.suggested_action }} {% if f.doc_id %} Open β†’ {% endif %}
No findings yet. Upload documents and build the KG to surface buried bodies.
{% set iqe_canvas = "dic" %} {% set iqe_api_route = "/document-intelligence/api/iqe-query" %} {% set iqe_title = "IQE Query β€” Explorer" %} {% set iqe_examples = [ {"label": "Orphan docs", "query": "foreach d in dic.documents left join dic.versions v on v.doc_id == d.doc_id where v.doc_id is null select d.doc_id, d.title"} ] %} {% include "includes/iqe_query_widget.html" %} {% endblock %}