v1.1.0: DB path fix, API hardening, tests, CI, changelog, README repair - #3
Merged
Conversation
The PEP 639 SPDX license string requires setuptools>=77, whose own floor is Python 3.9, so the 3.8 CI job could not even resolve build dependencies. Python 3.8 reached end of life in October 2024. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CzedGhnBhFq1SzH8WQSVVg
3D3Q3
marked this pull request as ready for review
July 4, 2026 09:18
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Applies the reviewed v1.1.0 changes from the external review session.
Fixed
seen_ids.sqlitewas created in whatever directory the user ran from, breaking duplicate detection across directories. It now lives at~/.chtext/seen_ids.sqlite, with automatic one-time migration of a legacy CWD database._callhardening: network errors (requests.RequestException), non-2xx responses (raise_for_status), and non-JSON responses (rate limit/outage) are now wrapped inCtextAPIErrorinstead of raising raw tracebacks.except:in thecmd_browsechapter-title loop →except Exception:so KeyboardInterrupt isn't swallowed.sys.stdout/sys.stderrswap (which mutated global state for library importers) with a_configure_console_encoding()call at the start ofmain()usingstream.reconfigure().Added
tests/test_chtext.py— 21 offline tests coveringCTextAPI,StateTracker(including a regression test that the default DB path is not the CWD),_extract_short_segments, andConfig..github/workflows/ci.yml— lint (ruff) + test matrix on Python 3.9–3.13.CHANGELOG.md(Keep a Changelog format).Changed
[tool.setuptools.dynamic]readingchtext.cli.__version__= 1.1.0); build requiressetuptools>=77for the PEP 639 SPDX license string.setuptools>=77cannot install on Python 3.8 (its floor is 3.9), so the 3.8 job failed at build-dependency resolution. Python 3.8 has been EOL since October 2024, so 3.8 was dropped rather than reverting to legacy license metadata.pyproject.toml.Verification (all run on this branch)
ruff check src/ tests/— cleanpython -m pytest tests/ -q— 21 passedpython -m build— produceschtext-1.1.0sdist + wheelchtext generatefrom/tmpworks, noseen_ids.sqlitecreated in/tmp, DB present at~/.chtext/seen_ids.sqliteRelease notes
After merge: confirm CI is green, then create a GitHub release tagged
v1.1.0to trigger the publish workflow. Note that PyPI trusted publishing must be registered for3D3Q3/chtextand apypienvironment must exist in repo settings, or the publish job will fail on OIDC.🤖 Generated with Claude Code
https://claude.ai/code/session_01CzedGhnBhFq1SzH8WQSVVg