Found on the live stack with Frankenstein (Open Library work OL450063W, Gutenberg etext 84). Its page in meta-read showed no edition at all, for two reasons.
The book was never bound to its work. An edition was bound only when Open Library's search lists the etext under exactly one work (id_project_gutenberg). For many classics it lists it under none: id_project_gutenberg:84 returns 0 results, and none of the first 200 editions of OL450063W carries the etext.
A book page's query fell through to the catalogue browse. meta-read asks for openlibraryid:OL…W with no text. That browsed the catalogue (the 32 most downloaded books), and the gateway kept only those bound to the work. A book outside that list could never reach its own page.
Changes
Title binding, graded Matched.
Applies only to an etext Open Library lists under no work: same main title (main_title), an author with the same surname, and the most-published of those works. Open Library holds many small Frankenstein works by Mary Shelley; OL450063W has 2,187 editions against at most 90 for the others.
The record carries the usual claim plus anchorMethod=title, so the gateway records matchedBy/openlibrary:OL…W and meta-read grades it Matched, ranked after any identifier-bound edition.
An etext that several works list is still left unbound: gutenberg_etext now distinguishes "several" from "none".
One bind() is used by both the search and the redeem paths.
Work query → Gutendex search. A query naming a work with no text searches Gutendex for the work's main title and its first author's surname (work_search_text); the gateway still keeps only the records bound to that work.
Build and CI.
meta-feeder-sdk now comes from gitea-watch; the GitHub repo is gone. Same tag and commit.
First test workflow for this repo (cargo test --locked and clippy -D warnings). It builds without debug info and with two jobs, because the runner killed the linker for lack of memory.
⚠ A rule change
meta-read's reading model says there is no title/author binding for books. This introduces one, deliberately limited to etexts Open Library lists under no work, and graded Matched, never Anchored.
Tests
70 pass (7 new): title binding vs identifier binding, the work query, main_title, surname, the most-published choice, ties and non-matches, and one/several/unlisted with its cache form. CI green (run 707).
## Why
Found on the live stack with *Frankenstein* (Open Library work `OL450063W`, Gutenberg etext 84). Its page in meta-read showed no edition at all, for two reasons.
1. **The book was never bound to its work.** An edition was bound only when Open Library's search lists the etext under exactly one work (`id_project_gutenberg`). For many classics it lists it under **none**: `id_project_gutenberg:84` returns 0 results, and none of the first 200 editions of `OL450063W` carries the etext.
2. **A book page's query fell through to the catalogue browse.** meta-read asks for `openlibraryid:OL…W` with no text. That browsed the catalogue (the 32 most downloaded books), and the gateway kept only those bound to the work. A book outside that list could never reach its own page.
## Changes
- **Title binding, graded Matched.**
- Applies only to an etext Open Library lists under no work: same main title (`main_title`), an author with the same surname, and the most-published of those works. Open Library holds many small *Frankenstein* works by Mary Shelley; `OL450063W` has 2,187 editions against at most 90 for the others.
- The record carries the usual claim plus `anchorMethod=title`, so the gateway records `matchedBy/openlibrary:OL…W` and meta-read grades it Matched, ranked after any identifier-bound edition.
- An etext that **several** works list is still left unbound: `gutenberg_etext` now distinguishes "several" from "none".
- One `bind()` is used by both the search and the redeem paths.
- **Work query → Gutendex search.** A query naming a work with no text searches Gutendex for the work's main title and its first author's surname (`work_search_text`); the gateway still keeps only the records bound to that work.
- **Build and CI.**
- `meta-feeder-sdk` now comes from gitea-watch; the GitHub repo is gone. Same tag and commit.
- First test workflow for this repo (`cargo test --locked` and `clippy -D warnings`). It builds without debug info and with two jobs, because the runner killed the linker for lack of memory.
## ⚠ A rule change
meta-read's reading model says there is no title/author binding for books. This introduces one, deliberately limited to etexts Open Library lists under no work, and graded **Matched**, never Anchored.
## Tests
70 pass (7 new): title binding vs identifier binding, the work query, `main_title`, `surname`, the most-published choice, ties and non-matches, and one/several/unlisted with its cache form. CI green (run 707).
github.com/worph/meta-feeder-sdk answers 404, so a clean build could not fetch
the dependency; the same tag lives on gitea-watch at the same commit (v1.7.0 =
027917c8), so only the source URL changes, in Cargo.toml and Cargo.lock.
The repo had only the image workflow; test.yml runs cargo test --locked and
clippy -D warnings, like meta-read's.
Two reasons a book's page in meta-read showed no Gutenberg edition, both found
on the live stack with Frankenstein (OL450063W, etext 84):
- An edition was bound to its work only when Open Library's search lists the
etext under exactly one work (id_project_gutenberg). For many classics it
lists it under none: no edition of OL450063W carries etext 84. Such an etext
is now bound by title and author: same main title (main_title), an author
with the same surname, and the most published of those works, since Open
Library holds many small "Frankenstein" works by Mary Shelley. The record
carries the same claim plus anchorMethod=title, so the gateway records
matchedBy/openlibrary:OL...W and meta-read grades it Matched, below an
identifier binding. An etext several works list (an unmerged duplicate)
still gets no binding: gutenberg_etext keeps "several" apart from "none".
- A work page asks for openlibraryid:OL...W with no text, which fell through to
the catalogue browse (the 32 most downloaded books), so a book outside them
never reached its own page. Such a query now searches Gutendex for the work's
main title and its first author's surname (work_search_text); the gateway
still keeps only the records bound to the work.
Tests: title binding graded Matched while an identifier binding stays
Anchored; a work query searches "frankenstein shelley"; main_title, surname,
the most-published choice, ties and non-matches; Etext one/several/unlisted
and its cache form.
compute_outcomes still passed the identifier-only lookup's Option<String> to
into_discovery_record, which now takes the binding (CI: E0308). Both paths now
call bind(): the identifier, else the title match for an etext Open Library
lists under no work, so a redeemed record is bound exactly as its search record
was.
The test job's linker was killed with signal 9 twice (run 705): cargo test links
several test binaries at once, each with full debug info. CARGO_PROFILE_DEV_DEBUG=0
and CARGO_BUILD_JOBS=2 keep the link within the job's memory; the tests are the
same.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
Found on the live stack with Frankenstein (Open Library work
OL450063W, Gutenberg etext 84). Its page in meta-read showed no edition at all, for two reasons.id_project_gutenberg). For many classics it lists it under none:id_project_gutenberg:84returns 0 results, and none of the first 200 editions ofOL450063Wcarries the etext.openlibraryid:OL…Wwith no text. That browsed the catalogue (the 32 most downloaded books), and the gateway kept only those bound to the work. A book outside that list could never reach its own page.Changes
main_title), an author with the same surname, and the most-published of those works. Open Library holds many small Frankenstein works by Mary Shelley;OL450063Whas 2,187 editions against at most 90 for the others.anchorMethod=title, so the gateway recordsmatchedBy/openlibrary:OL…Wand meta-read grades it Matched, ranked after any identifier-bound edition.gutenberg_etextnow distinguishes "several" from "none".bind()is used by both the search and the redeem paths.work_search_text); the gateway still keeps only the records bound to that work.meta-feeder-sdknow comes from gitea-watch; the GitHub repo is gone. Same tag and commit.cargo test --lockedandclippy -D warnings). It builds without debug info and with two jobs, because the runner killed the linker for lack of memory.⚠ A rule change
meta-read's reading model says there is no title/author binding for books. This introduces one, deliberately limited to etexts Open Library lists under no work, and graded Matched, never Anchored.
Tests
70 pass (7 new): title binding vs identifier binding, the work query,
main_title,surname, the most-published choice, ties and non-matches, and one/several/unlisted with its cache form. CI green (run 707).