Skip to content

Chek Reader 0.1.0: search, controls, accessibility and CBR/CB7 - #27

Merged
devaryakjha merged 16 commits into
mainfrom
claude/project-thread-eheuhr-release
Oct 21, 2026
Merged

devaryakjha merged 16 commits into
mainfrom
claude/project-thread-eheuhr-release

Conversation

@devaryakjha

@devaryakjha devaryakjha commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Requested by Arya · project thread

Stack. This branch carries #28 (search), #29 (controls, accessibility, String Catalog) and #30 (CBR and CB7 through libarchive) as well, so merging it lands all four, and the squash commit becomes 0.1.0. The others are closed once this is in. The Linux build and tests pass on the combined branch; the Apple job runs here.

Before

The README's install snippet depended on branch: "main", so every app following it took whatever was pushed last, and nothing said how releases work.

After

The snippet depends on from: "0.1.0", and a sentence says releases are version-named tags on main, with branch: "main" for apps that want unreleased changes. Goes with the Chek app pinning itself to 0.1.0 (readchek/app#4).

How

README only in this PR's own commit. The merge of #29 and #30 touched Package.swift, where each added its own #if os(Linux) block at the same spot; both are kept.

Checks

  • swift test passes on Linux for the combined branch
  • The README and AGENTS.md reflect any change to products, requirements, usage or conventions

Generated by Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
@devaryakjha devaryakjha self-assigned this Oct 21, 2026
claude added 15 commits October 21, 2026 03:06
Publication.search(for:options:) finds a query in reflowable formats by
reading each chapter's markup into the same flat text the reader script
indexes, so every result is a Locator that go(to:) opens at the page
holding the match, with the matched text and some words around it. PDF
searches through PDFKit in its module, with a page fragment and the
chapter's title from the outline. ReaderController.search(for:options:)
drops results when the session changes while searching.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
ReaderView now draws the standard controls over the page: a tap in the
middle shows a Liquid Glass title bar with the table of contents, search
and appearance sheets, and a slider through the book's positions with
previous and next chapter buttons. Apps get the location and settings
back through callbacks, and apps that lay out their own screen around
NavigatorView can reuse ReaderControls, TableOfContentsView, SearchView
and AppearanceView on their own.

With VoiceOver on, the controls stay visible, every control has a label
and the slider reads its position, and VoiceOver's scroll swipes turn
pages. Reduce Motion drops the bars' animation. Every user-facing string
in the navigator and UI targets lives in a String Catalog, so apps can
translate the reader.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
ArchivesModule opens RAR and 7-Zip comic archives with libarchive: a
prebuilt static XCFramework from Lakr233/libarchive.xcframework on Apple
platforms, pinned to one release, and the system library on Linux, where
CI installs libarchive-dev. The archive is read whole, its entries are
checked against ReaderLimits, and pages and ComicInfo.xml then go through
the same comic parser as CBZ. Password-protected archives fail with
drmProtected.

Tests build a stored RAR 4 archive by hand, since no free tool writes
RAR, and a 7-Zip archive with libarchive's writer.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
libarchive 3.7 lists the entries of the truncated fixture and fails
when the cut page is read; the version in the xcframework reports the
truncation while listing. The test only cares that the damage is
reported as a ReaderError, so it allows either.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
The table of contents view imports both ChekReaderCore and SwiftUI, so
a bare Link is ambiguous on Apple platforms.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
findString returned a different set of selections than the page text
holds on the Apple CI runner, so results came out with the wrong pages.
Searching PDFPage.string with the shared matcher gives the same results
and context as reflowable formats, and the page is set on each match.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
xcodebuild's console doesn't print expectation comments, but it does
print a thrown error's description.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
Publication.search finds a format's module through the registry, and
the PDF test opened the publication through the module directly, so
the search fell through to the markup search and found nothing.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
PDFKit reads only the text inside a page's box. The fixture's pages
were 200 points wide, so a 12-point line was cut at 33 characters and
the search found two matches of three. Pages are letter-sized now.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XfwUCp8GqHWUdTK7EhZCT5
…y' into claude/project-thread-eheuhr-archives

# Conflicts:
#	Package.swift
@devaryakjha devaryakjha changed the title Point the README at the 0.1.0 release instead of main Chek Reader 0.1.0: search, controls, accessibility and CBR/CB7 Oct 21, 2026
@devaryakjha
devaryakjha merged commit 1f74f28 into main Oct 21, 2026
2 checks passed
@devaryakjha
devaryakjha deleted the claude/project-thread-eheuhr-release branch October 21, 2026 04:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants