Repository navigation
board: one-tap PDFs on every queued paper, and refs to make them possible - #61
Merged
Merged
Conversation
…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
This was referenced Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 pagewhen the queue line ended
— <arXiv id>, and only 2 of 232 waiting lines carryone — 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 anew 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.pyholds the refgrammar in one place: every shape the queue has carried (bare id,
arXiv:, absURL,
/pdf/….pdf, pre-2007astro-ph/…) normalises to one id, from which theabstract 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.pyresolves ref-less titlesagainst 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.ymlruns 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.pyin PyAutoMind gains the matchingDROPrule for the newworkflow (PyAutoLabs/PyAutoMind#same-branch) —
MEMORY_RULEShas no catch-all,so a new Memory workflow is UNMATCHED until a human decides. Merge that first.
tests/test_arxiv_refs.py, extensions totests/test_board.py);107 pass,
make validateclean.Generated by Claude Code