Skip to content

Fix catalog-backed release matching and EPUB font review - #70

Merged
logabell merged 5 commits into
mainfrom
logan/release-matching-review
Oct 15, 2026
Merged

logabell merged 5 commits into
mainfrom
logan/release-matching-review

Conversation

@logabell

@logabell logabell commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Valid releases were held because series positions only accepted digits, known series prefixes were not separated from the full book title, and dotted EPUB packaging/group suffixes were not recognized. EPUB inspection also rejected standard font-obfuscation metadata as encrypted book content.

Changes

  • Match canonical Roman positions and both reported series-prefix layouts against the full catalog title, exact author, and matching catalog series/position.
  • Recognize dotted retail EPUB/ebook release-group suffixes while retaining partial/collection warnings and actual-file format checks.
  • Permit only IDPF obfuscation of declared local fonts outside the book spine; retain holds for other encryption, encrypted chapters, invalid references and conflicting declarations. Preserve original EPUB bytes and advance the import matcher revision.
  • Document retry steps and the project investigation in docs/issues/2026-10-15-release-matching.md.

Fixes #62. Fixes #64. Fixes #66.
Fixes NOR-95, NOR-97, NOR-99.
Related to #56 / NOR-89. Builds on the already-merged #69 / NOR-87 fix.

Validation

All tests ran serially through python3 scripts/check.py:

  • 316 focused parser, identity, eligibility and inspection checks.
  • 31 API/worker journeys covering clicked source submission, withdraw/re-request, font-obfuscated EPUB import with original bytes preserved, and series review/import/replay.
  • 23 additional API/worker checks after the matcher revision change: 21 series-review cases rerun plus two saved-inspection retry cases (33 distinct API/worker cases total). Reinspection of the old font-encryption hold does not redownload.
  • 16 browser checks with fixture API responses for source selection, collection review, download matching, and unreadable-file retry; production frontend build passed.
  • Ruff lint/format and git diff --check passed. Exact commands are in the investigation document.

Observed failures before fixes: the exact reported release-name regression and a synthetic standard-font-obfuscation EPUB inspection. Tests include wrong series/position/author, malformed Roman numerals, ranges, collections, partial content, wrong actual medium, and unsupported encryption.

Remaining scope

NOR-89 remains open. Its actual EPUB algorithm/resource list and the exact role/request transitions behind missing actions are unavailable. The supported IDPF case is confirmed independently; other font-obfuscation algorithms remain held. Controlled administrator withdraw/re-request and existing review UI paths passed, so no speculative state workaround or approval override was added. External services use fixtures; the reporter deployment was not tested.

Review follow-up — numbered content warnings

Addressed the review finding in ea9c974. Numbered warnings such as Sample01, Excerpt1, Preview02, Incomplete3 and Truncated4 remain content warnings rather than removable release groups. Automatic selection and import completeness checks also recognize them in release names and file paths. Existing group names such as Group42 and Sampler01 remain supported.

Reproduced the unsafe selection and import acceptance before the fix. Validation after the fix: 324 focused unit checks and 13 API/import journeys passed via the bounded runner, including a held numbered-partial candidate with no torrent fetch, selection or download attempt. Repository Ruff lint/format and frontend TypeScript checks passed.

Fixed the backend-checks failure by regenerating the OpenAPI snapshot and TypeScript contract for matcher version 8. Repeat generation produces no further changes. The failing aggregate backend check was downstream of that snapshot mismatch; all four original backend integration shards had passed.

PR review follow-up

The shared library-review browser check could fail when “Save and review next” displayed the completed-link status and the next catalog-search status together. The fixture now holds that next lookup pending, checks both messages separately, and waits for the lookup to finish before continuing. The ambiguous assertion failed under this controlled timing before the fix; no product behavior or timeout was changed.

The shared regression passed on #73, whose LibraryReview, AssetMatchForm, App and SelectMenu files are byte-identical to this branch. It also passed on #71 and #72 with their changed dropdown/onboarding code. Existing runtime validation above remains applicable; this follow-up changes only the browser test.

Release integration follow-up

The final live-browser run exposed a download-preference refresh race: switching back to cached personal defaults could remount the editor after a fresh response, collapsing sections and discarding edits. The editor now preserves its draft and the revision it was based on; stale saves still receive the existing conflict response, and edits made during a pending save survive for a subsequent save.

Reproduced the collapsed editor with a delayed real API response. Three focused live-browser journeys passed after repair, including stale-save rejection, edits during a delayed save, persistence after reload and automatic client defaults. Merged main's #71–74 changes into this branch, preserving both sides of a test-import conflict. All 56 focused combined backend cases passed, and regenerated API snapshots are unchanged. Full release CI remains the publication gate.

@linear-code

linear-code Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

NOR-95

NOR-99

NOR-97

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T05:17:43.677928Z ae57cc8 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ae57cc8eec

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread services/app/domain/indexer_labels.py Outdated
@logabell
logabell merged commit bda777c into main Oct 15, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant