{# FI-3: top-aligned-papers fragment — lazy-loaded into #insights-top-papers. Context: learning — the _learning_state() dict. Relevant keys: available — bool; False on first run / a bad interest vector. top_papers — list of {doi, title, cosine} dicts (may be empty). Three states: 1. available + papers → a small table (title → /corpus/{doi}, cosine). 2. available + empty → "no aligned papers" notice (vector needs embeddings). 3. not available → "engine hasn't learned" notice. DOI embedded literally in the /corpus/{doi:path} link (verbatim, no urlencode — matches the corpus detail route). All content via Jinja autoescape only — never |safe. Em-dash placeholders use the block form only. #}

Top aligned papers

{% if learning.available %} {% if learning.top_papers %}

Library papers most aligned with your interest vector (cosine similarity).

{% for p in learning.top_papers %} {% endfor %}
PaperCosine
{% if p.doi %} {% if p.title %}{{ p.title }}{% else %}{{ p.doi }}{% endif %} {% elif p.title %}{{ p.title }} {% else %}—{% endif %} {{ "%.2f" | format(p.cosine | float) }}
{% else %}

No aligned papers yet — the interest vector needs library embeddings. Run lit-monitor brain-build to embed the corpus.

{% endif %} {% else %}

The engine hasn't learned anything yet — give feedback on discoveries to build an interest vector.

{% endif %}