{% extends "base.html" %} {% from "_help.html" import info %} {% from "_job_status.html" import job_status %} {% block title %}Stuff — Paperful{% endblock %} {% block body_attrs %}{% if poll_run %} data-poll-run="{{ poll_run }}"{% endif %}{% endblock %} {% block content %}

Stuff

Extra citations you already hold, one row per sentence or outline section. Same retriever as paperful rag search. No Ask narrative, no invented BibTeX, and no library write. Writes state/stuff/. CLI is paperful stuff.

{{ honesty }}

{% if error_code == 'target' %}
Pick a library item or upload a file, not both and not neither.
{% endif %} {% if error_code == 'format' %}
That file type is not supported. Use pdf, txt, md, html, rtf, docx, odt, pptx (legacy .doc needs a converter on PATH).
{% endif %} {% if error_code == 'size' %}
The upload is larger than 40 MB.
{% endif %} {% if error_code == 'rag' %}
Turn on [rag] in config.toml and build the local PDF index first.
{% endif %} {% if error_code == 'lane' %}
Lane must be manuscript or outline.
{% endif %} {% if error_code == 'k' %}
k must be a positive integer (capped by [rag].top_k).
{% endif %} {% if error and error_code not in ('target', 'format', 'size', 'rag', 'lane', 'k') %}
{{ error }}
{% endif %} {% if not rag_on %}
[rag] is off. Stuff needs a built local index. It does not need [llm].
{% endif %} {% if rag_on and not can_search %}
The local PDF index is empty or unavailable. Build it on Advanced Index, or run paperful rag ingest.
{% endif %} {{ job_status(run_rec, 'Stuff') }}

Library item

Scope follows the collection chip. The source item is never listed as a hit for itself.

{{ info("Writes state/stuff///pack.json and pack.md. Does not fetch, attach, or write Zotero.") }} {% if not items %}

No items in the current collection chip. Set a collection on Library, or upload a draft below.

{% endif %}

Upload a draft

Drop a manuscript you have not imported. The copy stays under state/critiques/uploads/. Hits come from the collection chip’s index, not from the upload.

{{ info("Same as --file. Collection chip is the search scope.") }}
{% if result and result.counts %}

This pack

Units: {{ result.units or result.counts.units or 0 }} · hits: {{ result.counts.hits or 0 }} · unique: {{ result.counts.unique_sources or 0 }} · skips: {{ result.counts.skips or 0 }} {% if result.stuff_id %}· id {{ result.stuff_id }}{% endif %} {% if result.lane %}· {{ result.lane }}{% endif %}

{% if downloads %}

{% for f in downloads %} {{ f.name }}{% if not loop.last %} · {% endif %} {% endfor %}

{% endif %} {% if pack_md %}
{{ pack_md }}
{% endif %}
{% endif %} {% if recent %}

Recent packs

On disk under state/stuff/. Similarity is not proof the source supports the claim.

{% for row in recent %} {% endfor %}
Recent stuff packs
TitleIdUnitsStamp
{{ row.title }} {{ row.stuff_id }} {{ row.units }} {{ row.stamp }}
{% endif %} {% endblock %}