Adapter SDK¶
A new reference-manager adapter is a conformance-suite submission, not
core surgery. Implement LibraryBackend and land
it when the kit plus a real-library field report both pass. Promotion
criteria are written down in docs/plans/1.7-wave.md
before reports arrive.
Zotero is well tested. Mendeley and EndNote stay seeking testers until a completed field assessment is filed.
What to implement¶
LibraryBackend is the whole surface. Reads that the on-disk mirror can
serve belong on MirrorCatalogue; writes go on the adapter, then
MirroredBackend (refresh the item after) and MirrorFirstBackend (pass
through, refuse offline). Identifier / lint / dedupe code must not import a
manager except through this protocol. See architecture
and developer — Adding things.
The behaviour contract is tests/test_wave17_conformance.py:
Structural: every shipped backend (
ZoteroBackend,MendeleyBackend,EndNoteBackend,MirroredBackend) exposes the protocol methods.Behaviour: an in-memory fake lists collections, loads items, attaches a file, and round-trips notes.
Submit a new manager by adding its class to that parametrize list and keeping the fake green. Do not add a second item type, a parallel write path, or catalogue-unification shortcuts.
Promotion (all three, or it stays “seeking testers”)¶
The conformance suite passes against the adapter’s fake.
A completed
docs/templates/adapter-field-assessment.mdfrom a real library (list, fetch a missing PDF, attach, notes round-trip, failed-auth next-steps ladder) is filed underassessments/.Mirror-first reads work with the manager closed.
Explicitly out¶
Catalogue unification and treating every manager as an equal default are
parked (roadmap). EndNote never writes the .enl SQLite;
Mendeley tokens stay 0600 and rotate on refresh.