Repository navigation
feat(interests): a second overnight tier for non-lensing papers - #66
Merged
Merged
Conversation
The arXiv inbox is strong lensing only. This adds its sibling, `arxiv-interests.md`: the day's ten most relevant papers that are NOT strong lensing — black holes, dark matter, galaxy formation, statistics — rendered under the inbox on the dashboard with the same five per-paper actions (📄 PDF, ➕ queue, 📥 intake, 📑 cite, ✖️ dismiss). It differs from the inbox in one way, and it is the point of it: this is a day-batched BACKLOG, not a seven-day timer. Each nightly run appends one dated batch, the board shows the oldest un-cleared batch only, and one 🧹 clear button drops that whole day and reveals the next — so a fortnight away is a fortnight of batches to cycle through rather than a fortnight of lapsed recommendations. Because these papers span domains where every inbox paper routes to "Strong Lensing", each line carries a `[Topic]` naming the reading-queue section ➕ files it into; a topic naming no real section falls back to the new `## Interests` section rather than stranding the paper. - scripts/interests_actions.py owns the format and the transitions (append/stamp/clear/add/dismiss), importing inbox_actions rather than restating it. - board.py renders the tier between the inbox and the reading queue, with its own freshness stamp: one digest can break while the other runs. - queue_actions.yml gains interests-add / interests-dismiss / interests-clear; queue_filing.yml learns the third `file:` value. The papers themselves are written by PyAutoMind's arxiv_interests.yml. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YTKUy8F2CevLpEgSz7xbnJ
A link inside a <summary> navigates away, so whether the section also toggles on the way out is not observable — unlike the 📋 buttons beside it, which is what the handler was there for. Say that instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YTKUy8F2CevLpEgSz7xbnJ
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 arXiv inbox is strong lensing only. This adds its sibling,
arxiv-interests.md: the day's ten most relevant papers that are not strong lensing — black holes, dark matter, galaxy formation, statistics — rendered under the inbox on the dashboard with the same five per-paper actions (📄 PDF, ➕ queue, 📥 intake, 📑 cite, ✖️ dismiss).Paired with PyAutoMind's
arxiv_interests.yml, which writes the papers. This side renders and acts on them; that side fills them in. Neither blocks the other — merged alone, this just shows an empty list saying no digest has run yet.The one thing that differs from the inbox
It is a day-batched backlog, not a seven-day timer, and that is the point of it. Each nightly run appends one dated batch, the board shows the oldest un-cleared batch only, and one 🧹 clear button drops that whole day and reveals the next. So a fortnight away is a fortnight of batches to cycle through, one tap each, rather than a fortnight of lapsed recommendations.
Everything else is the inbox's contract, reused rather than restated:
interests_actions.pyimportsinbox_actionsfor the line grammar, the identity/dedup rule, the freshness stamp andadd_to_queue.Topic routing
Every inbox paper routes to one reading-queue section; these span domains, so each line carries a
[Topic]naming the section ➕ files it into (SMBHs,Dark Matter,Galaxy Formation / Evolution,Stats). A topic naming no real section falls back to the new## Interestssection rather than stranding the paper — the topic is a nightly prompt's guess, and a guess that misses must not cost a paper.Changes
scripts/interests_actions.py(new) — owns the format and the transitions:append/stamp/clear/add/dismiss.appenddedupes against the interests list, the reading queue andarxiv-inbox.md, so a paper never lands on both lists, and caps a batch at 10 so a miscounting prompt cannot flood a day.arxiv-interests.md(new) — the file and its documented format.scripts/board.py— renders the tier between the inbox and the reading queue, with its own freshness stamp (one digest can break while the other keeps running, and the page must not report the healthy one's date for the broken one)._queue_issue_urlis generalised over "suggestion tiers" rather than special-casing the inbox a second time.reading-queue.md— the## Interestsfallback section..github/workflows/queue_actions.yml—interests-add/interests-dismiss/interests-clear; close-out comments name the tier the human actually tapped..github/workflows/queue_filing.yml— 📥/📑 learn the thirdfile:value and the[Topic]prefix to strip..github/workflows/knowledge_board.yml— republish paths, plus the three new labels (a prefilledlabels=silently drops a label the repo does not have, which makes a tapped button look like it worked and then do nothing).scripts/validate_structure.py— root allowlist.Testing
make validateclean;pytest tests/168 passed. 34 new tests intests/test_interests_actions.pycover the batch grouping, the clear transition and its idempotence, the three-way dedup, the topic fallback, and the CLI; 13 new intests/test_board.pycover the render order, the clear button's body, the per-tier stamps and the topic routing.Three pre-existing board tests moved with the fixture (which now writes an interests file): the two inbox-freshness helpers blank the other tier so they still assert about the inbox alone, and the PDF-button count goes 4 → 6.
Also exercised end to end against a clone of the live repo — append/stamp/add/dismiss/clear, and the cross-list dedup correctly skipped a lensing paper already sitting in
arxiv-inbox.md.Generated by Claude Code