Read-only view of what the active-learning engine has learned from your
engagement signals (save / dismiss / rate on discoveries). Nothing here
writes or recomputes. Capture buttons on paper cards require
web_ui.show_feedback_buttons: true in
Advanced Settings.
The interest vector exists but is gated to zero influence until at least 10 feedback events accumulate (cold-start protection).
{% endif %} {% else %}The engine hasn't learned anything yet — give feedback (save / dismiss) on discoveries to build an interest vector.
{% endif %} {# FI-3: top library papers aligned with the interest vector. Lazy HTMX load — the fragment replaces this container's own contents on page load so the page renders instantly. #} {# ----------------------------------------------------------------- #} {# 2. Cluster weights #} {# ----------------------------------------------------------------- #}Per-theme atrophy weight (1.0 = full attention; lower = de-emphasised by your dismissals). Weights never decay below the floor of {{ "%.2f" | format(clusters.floor | float) }}.
{# CU-2: Chart.js bar chart of per-theme weights. JSON island carries the labels + values; site.js builds the chart, reading colors from the palette tokens. The table below remains the exact-values + degradation fallback. #} {% set _cw_labels = [] %} {% set _cw_data = [] %} {% for c in clusters.clusters %} {% set _ = _cw_labels.append(c.name) %} {% set _ = _cw_data.append(c.weight | float) %} {% endfor %}| Theme | Weight | At floor? |
|---|---|---|
| {{ c.name }} | {{ "%.2f" | format(c.weight | float) }} | {% if c.at_floor %}at floor {% else %}—{% endif %} |
No themes yet — run a brain-build to cluster papers.
{% endif %} {# ----------------------------------------------------------------- #} {# 3. Signal mix (server-rendered inline SVG; no client-side chart lib) #} {# ----------------------------------------------------------------- #}| Signal | Count |
|---|---|
| {{ row.label }} | {{ row.count }} |
No feedback events yet — give feedback (save / dismiss) on discoveries to build the signal mix.
{% endif %} {# ----------------------------------------------------------------- #} {# 3b. Feedback by source (FI-6; server-rendered inline SVG) #} {# ----------------------------------------------------------------- #}
Where each feedback signal came from (e.g. discovery cards, the themes page,
or an implicit Zotero save). Open-ended; unknown groups events
recorded without a source tag.
| Source | Count |
|---|---|
| {{ row.label }} | {{ row.count }} |
No feedback events yet — no source breakdown to show.
{% endif %} {# ----------------------------------------------------------------- #} {# 4. Recent events #} {# ----------------------------------------------------------------- #}| # | DOI | Signal | Weight | Rating | Source | Created |
|---|---|---|---|---|---|---|
| {{ ev.id }} | {% if ev.doi %} {{ ev.doi }} {% else %}—{% endif %} | {{ ev.signal_type }} | {{ "%.2f" | format(ev.weight | float) }} | {% if ev.rating %}{{ ev.rating }}{% else %}—{% endif %} | {% if ev.source %}{{ ev.source }}{% else %}—{% endif %} | {% if ev.created_at %}{{ ev.created_at }}{% else %}—{% endif %} |
No events on this page.
{% else %}No recent events yet — give feedback (save / dismiss / rate) on discoveries to populate this log.
{% endif %} {# AR-7: corpus-style prev/next pagination for recent events (page size 100). Rendered whenever any events exist (not gated on the current slice) so an over-the-end offset still shows Prev to navigate back. Prev is hidden at offset 0; Next is hidden on the last page. #} {% if events_total %} {% endif %} {# FI-3: feedback timeline chart. Lazy HTMX load — the fragment replaces this container's own contents on page load so the page renders instantly. #}