Skip to content

board: one-tap PDFs on every queued paper, and refs to make them possible - #61

Merged
Jammy2211 merged 1 commit into
mainfrom
claude/pyautomemory-pdf-downloads-x5yo5i
Aug 25, 2026
Merged

Jammy2211 merged 1 commit into
mainfrom
claude/pyautomemory-pdf-downloads-x5yo5i

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

The problem

The Dashboard's paper links were arXiv title searches for 230 of the 232
queued papers, and there was no way to reach a PDF at all. Collecting a stack of
papers on a phone (before a flight, say) cost a search page, a squint and several
taps each.

The two symptoms are one cause: paper_url() could only build an abstract page
when the queue line ended — <arXiv id>, and only 2 of 232 waiting lines carry
one — the two the nightly digest's ➕ button added. The rest are bare titles from
the historical bulk paste.

The change

📄 PDF button. Every reading-queue and arXiv-inbox paper with a ref renders a
chip straight to arxiv.org/pdf/<id>, ahead of the filing actions, opening in a
new tab so collecting a dozen does not keep navigating the board away.
Extensionless URL, so a phone opens it in the built-in viewer. No ref, no button
— the board never shows a control that cannot work.

Refs, so there is something to link. scripts/arxiv_refs.py holds the ref
grammar in one place: every shape the queue has carried (bare id, arXiv:, abs
URL, /pdf/….pdf, pre-2007 astro-ph/…) normalises to one id, from which the
abstract page and the PDF follow. A side effect is that a ref written as a
/pdf/ URL now titles onto the abstract page like every other paper.

The backlog. scripts/backfill_arxiv_refs.py resolves ref-less titles
against the arXiv API and appends an id only when exactly one paper's
normalised title matches
— a wrong id sends the reader confidently to somebody
else's paper, which is worse than a search box. .github/workflows/arxiv_refs.yml
runs it nightly: idempotent, resumable, capped per run, and it goes quiet once
the queue is drained.

The board itself stays fully local — rendered from the checkout with no network,
never calling the resolver.

Notes

  • scripts/spawn.py in PyAutoMind gains the matching DROP rule for the new
    workflow (PyAutoLabs/PyAutoMind#same-branch) — MEMORY_RULES has no catch-all,
    so a new Memory workflow is UNMATCHED until a human decides. Merge that first.
  • 20 new tests (tests/test_arxiv_refs.py, extensions to tests/test_board.py);
    107 pass, make validate clean.

Generated by Claude Code

…ible

The Dashboard's paper links were arXiv *title searches* for 230 of the 232
queued papers, and there was no way to reach a PDF at all — so collecting a
stack of papers on a phone cost a search page, a squint and several taps per
paper.

Two halves, because the second is what makes the first work:

* **📄 PDF button.** Every reading-queue and arXiv-inbox paper that carries a
  ref now renders a 📄 chip straight onto arxiv.org/pdf/<id>, ahead of the
  filing actions, opening in a new tab so collecting a dozen does not keep
  navigating the board away. No ref, no button — the board never shows a
  control that cannot work.

* **Refs, so there is something to link.** scripts/arxiv_refs.py holds the ref
  grammar in one place: every shape the queue has carried (bare id, arXiv:,
  abs URL, /pdf/…pdf, pre-2007 astro-ph/…) normalises to one id, from which
  the abstract page and the PDF follow. A side effect is that a ref written as
  a /pdf/ URL now titles onto the abstract page like every other paper.
  scripts/backfill_arxiv_refs.py then fills in the ref-less lines against the
  arXiv API — appending an id only when exactly one paper's normalised title
  matches, because a wrong id sends the reader confidently to somebody else's
  paper — and .github/workflows/arxiv_refs.yml runs it nightly, idempotently
  and under a per-run lookup cap, until the historical backlog is drained.

The board itself stays fully local: it renders from the checkout with no
network, and never calls the resolver.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PjWdVFPn2WDzcqpMXTMp7G
@Jammy2211
Jammy2211 merged commit 41315cc into main Aug 25, 2026
1 check passed
@Jammy2211
Jammy2211 deleted the claude/pyautomemory-pdf-downloads-x5yo5i branch August 25, 2026 15:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants