Commit Graph
10 Commits
Author SHA1 Message Date
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3bcf476202 fix(openlibrary): warn when merge-stub redirect walk exhausts its budget
Addresses the tracked follow-up debt from thicken-openlibrary: the client
already bounds /type/redirect stub chasing at MAX_REDIRECT_HOPS, but a
chain that outlives the budget silently handed back an opaque stub, which
downstream commands rendered as an empty-shaped record with no hint why.
The walk now emits a stderr warning naming the unresolved location before
returning; mocked test drives HOPS+1 chained stubs end to end.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 19:35:15 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1ca147eecd fix(openlibrary): harden work/isbn JSON output shapes
cmd_work tolerates explicit "authors": null (and non-dict entries) via
(data.get("authors") or []) guarded iteration, returning an empty array
instead of raising TypeError. cmd_isbn --json now emits authors as an
array of bare OLA keys matching `work --json` under the same field:
the edition path uses tolerant key extraction (flat refs, stray
double-nested refs), dedupes, and falls back to the linked work's
double-nested author keys when the edition ships none; publishers
likewise become a real list. Human output still renders comma-joined
labels. Refreshes the recipe gotcha note that still described the old
raw-curl work-record shape.

Adds mocked coverage: null-author work record (JSON [] + human '?'),
cross-command symmetric author arrays, tolerant edition key-only and
mixed-shape refs, ISBN handoff type stability, human label rendering,
and label-vs-key separation on mixed records.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 19:32:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c90fade381 fix(openlibrary): preserve author arrays in work JSON
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 10:16:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> df44337a5d docs(openlibrary): lastfm-model SKILL.md rewrite and README refresh
SKILL.md rebuilt to the lastfm model: keyless setup with covers-host table, intent-grouped commands including new editions/ratings, ISBN-to-work-to-author pipeline recipe, jq guidance, Known Gotchas grounded in researched behavior (ISBN 302 redirects, merge stubs inside HTTP 200, OL...M/W/A suffix system with double-nested author refs, availability-needs-ia projection rule, silent-empty search errors, rate etiquette), When-to-use/When-not-to-use boundaries, and a four-row reference routing table. Body 240 lines. README rewritten for humans with verified What You Get paths. Description updated with imperative verb start and negative boundary.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:44:37 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3dd9955770 docs(openlibrary): add eval manifest with negative probe
Six schema-v1 cases: ISBN-to-work-author key-graph walk, ebook discovery pipeline, the ISBN 302-redirect gotcha diagnosis, author disambiguation, a should-not-trigger probe for Koha/MARC library administration (id contains -not-), and keyless-setup/rate-etiquette guidance. Passes validate-evals and the fake-adapter paired smoke.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:44:08 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c6caa55bac test(openlibrary): offline suite for extended CLI
27 tests across five classes: help output, argument errors, dry-run plans, mocked-client logic (merge-stub following with .json suffix repair, work-author fallback for authors:null editions, editions paging, ratings join, covers-host URLs, empty-results-as-success), plus two live probes gated behind OPENLIBRARY_LIVE_TESTS=1 that skip cleanly otherwise. Passes strict-markers pytest, unittest discovery, and the proxy-trap zero-egress rerun.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:54 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8b84e2e824 feat(openlibrary): extend CLI with editions/ratings and redirect handling
New subcommands: editions (per-work edition listing with next_offset) and ratings (joined ratings + bookshelf counts). The client now follows in-body /type/redirect stubs left by merged records (appending .json to stub locations, since extension-less URLs 301 into HTML), recovers author keys from the linked work when edition records ship authors:null, normalizes bare/path key forms, unwraps {type,value} text fields centrally, assembles covers-host URLs skipping -1 placeholders, and validates sort choices client-side to avoid the server's plain-text 500 on unknown values. Existing flags, subcommands, --json, and --dry-run preserved.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ce95392915 docs(openlibrary): add API references for key graph, search, ISBN, recipes
Four cited reference files distilled from live-verified research against
openlibrary.org developer docs: OL...M/W/A key graph with merge-stub behavior,
search query syntax and error model, ISBN 302 redirect resolution and covers
host rules, plus worked curl/jq pipelines with a symptom-indexed gotcha table.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:13 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 2619ba395f docs(skills): add When-not-to-use boundaries to renamed skills
The quality validator enforces an imperative-verb description plus a
negative boundary on every changed SKILL.md. The six renamed skills and
cli-builder carried no substantive boundary, so add a tailored
When-not-to-use section to each naming concrete alternatives (dashboard
administration, sibling platforms, adjacent skills). cli-builder lands
at 499 lines, inside the 500-line budget.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:26:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> dd97e846ec refactor(skills): drop -cli suffix from six consumer-API skills
Rename ghost-cli, jira-cli, jellyfin-cli, openlibrary-cli, tmdb-cli,
and tempest-cli to ghost, jira, jellyfin, openlibrary, tmdb, and tempest
via git mv. Rewrite frontmatter name fields to match new directories,
rename bundled scripts preserving executable bits, update internal
invocation strings and README quick-start examples, and relocate the
jellyfin pytest suite to jellyfin/scripts/ with its SCRIPT constant now
resolving to the renamed sibling script.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:10:49 -04:00