{% extends "base.html" %} {% block title %}Memory Review - Data Analyst Portal{% endblock %} {% block head_extra %} {% endblock %} {% block layout %} {% set page_hero_eyebrow = "Agent Experience" %} {% set page_hero_title = "Memory Review" %} {% set page_hero_subtitle = "Review pending knowledge items from analyst sessions — approve, mandate, or reject — and resolve contradictions and duplicate candidates. Approved items flow to the user-facing Curated Memory page." %} {% include "_page_hero.html" %}
{{ stats.pending_count|default(0) }}
Pending
{{ stats.approved_count|default(0) }}
Approved
{{ stats.mandatory_count|default(0) }}
Required
{{ stats.knowledge_count|default(0) }}
Total
Moderation Catalog
Loading pending items...
{# Domain filter — closes the "domains never visible in admin queue" E2E gap. Options are hydrated by loadDomainsFilterOptions(). #}
Loading items...
{% if contradictions %} {% for c in contradictions %}
Contradiction Detected {% if c.severity == 'hard' %} Hard {% elif c.severity == 'soft' %} Soft {% endif %}
{{ (c.detected_at|string)[:10] if c.detected_at else '' }}
Item A
{{ c.item_a.title if c.item_a else 'Unknown' }}
{{ c.item_a.content[:200] if c.item_a else '' }}
{% if c.item_a and c.item_a.domain %}
{{ c.item_a.domain|title }}
{% endif %}
Item B
{{ c.item_b.title if c.item_b else 'Unknown' }}
{{ c.item_b.content[:200] if c.item_b else '' }}
{% if c.item_b and c.item_b.domain %}
{{ c.item_b.domain|title }}
{% endif %}
Analysis: {{ c.explanation }}
{% if c.suggested_resolution %}
Suggested: {{ c.suggested_resolution }}
{% endif %}
{% endfor %} {% else %}

No contradictions detected.

Contradictions are flagged when new items conflict with existing knowledge.

{% endif %}
Loading duplicate candidates...
Loading tree…

Memory domains bundle related items (playbooks, runbooks, shared context) so analysts can opt-in to a coherent body of knowledge.

Loading domains…
Loading audit log...
{# (removed) Memory Domain RBAC step-2 modal — merged inline into #createMemoryDomainModal as a collapsible Group Access section. #} {% endblock %} {% block scripts %} {% endblock %} {# Chip-input component (v55 — was globally loaded in base.html, now opt-in per template via this extra_scripts block; only this page actually mounts a chip-input today). #} {% block extra_scripts %} {% endblock %}