Completes the loop: the notes now land in the real vault. Topics come
from what the project is actually working on — papers/dynamic-agentic-
topologies.md (topology search, ADAS/Darwin-Godel/SwarmAgentic) plus the
two problems this week ran into, verifying what an agent did and giving
a long-running agent memory of what it covered.
Never pushes to main. The vault is a live Obsidian vault a human edits
and syncs; pushing to main races that sync and can lose hand-written
work. Every run lands on its own branch for a human to merge, the same
rule the mission delivery path was validated 20/20 under.
PDFs are NOT committed. A few hundred papers is gigabytes and would make
the vault painful to clone and slow to open, so they stay on the blob
store shelf and the note carries the key.
My own test caught me repeating this week's branch-collision bug: I named
branches from the HEAD of a UUIDv7, which is a 48-bit timestamp, so two
runs in the same millisecond produce the identical name — exactly what
hit mission 019fc42b. Fixed by taking the tail. The test now loops 100
ids instead of sampling two (a one-shot check passes by luck whenever the
millisecond ticks between calls) and additionally asserts the head-based
scheme DOES collide, so it cannot rot into a no-op.
Live against the real vault:
10 candidates, 1 already held, 9 shelved, 0 failed
branch clawmates/library-019fc82292e8, pushed
9 notes verified on the forge, 9 PDFs verified %PDF on the shelf
(the "1 already held" is cross-topic dedupe inside a single run)
Co-Authored-By: Claude Opus 5 <[email protected]>
Turns the parts into a job. Order is the point: the checkmark list is
consulted BEFORE anything downloads. Checking afterwards would still
dedupe the catalogue while re-downloading every paper we already have,
every week, forever.
Two properties the tests pin down, both learned the hard way this week:
- A quiet week is not a failure. `shelved == 0` with no errors is a
healthy run against a mature library; `shelved == 0` with errors is
broken. Harvest::healthy() and ::added_anything() keep those apart
rather than collapsing them into one ambiguous "did nothing".
- A failed download leaves the paper UNSEEN. Checking it off before the
PDF is safely shelved would mean one transient network error retires
that paper permanently. The checkmark is written last, after the bytes
and the note are both on disk.
The skip test gives every candidate a pdf_url pointing at a closed port,
so if the skip ever regresses the test fails loudly instead of quietly
re-fetching.
Live end-to-end against arXiv, run twice:
RUN1 3 candidates, 0 already held, 3 shelved, 0 failed
RUN2 3 candidates, 3 already held, 0 shelved, 0 failed
Library<'_> groups the five values that always describe one library;
passing them loose is how a run shelves into one place and catalogues
into another (also silences clippy::too_many_arguments honestly rather
than by allow).
391 tests, clippy clean.
Co-Authored-By: Claude Opus 5 <[email protected]>