Skip to content

B9: add Troubleshooting section to README#4

Merged
jcddc83 merged 1 commit into
mainfrom
claude/readme-troubleshooting
May 19, 2026
Merged

B9: add Troubleshooting section to README#4
jcddc83 merged 1 commit into
mainfrom
claude/readme-troubleshooting

Conversation

@jcddc83

@jcddc83 jcddc83 commented May 18, 2026

Copy link
Copy Markdown
Owner

Summary

Adds a Troubleshooting section to README.md covering the failure modes users actually hit, based on the error handling already in substack_link_checker.py:

  1. HTTP 403 Forbidden — cookie / rotated cookie / lower concurrency
  2. Sitemap returns no posts for --year YYYY — fall back to fetch_archive_urls.py
  3. DNS Failure / Timeout for links that work in browser--skip-domains
  4. Connection Error: ...ssl:default — old TLS on target → --broken-domains
  5. Many Soft 404 results that look fine — title-matcher false positives, eyeball them
  6. CSV report empty / header only — no broken links found, or run was interrupted
  7. --only-new not skipping anything--history-file not set / not matching previous run

Each entry: one-line problem + one-line cause + copy-pasteable fix.

Why no screenshot

The plan called for a "screenshot of CSV report" but producing a real one would require running against a real Substack with a real cookie, which I can't do from the sandbox. The existing "Example Output" code block already conveys the same information in maintainable text form (screenshots of terminal output go stale quickly). Happy to add a real one later if you want — drop a PNG in the repo and I'll wire it in.

Stacked on #1

Based on claude/audit-github-repo-EWQDn (PR #1). This README uses the pre-B3 invocations (python substack_link_checker.py …) to stay consistent with the rest of the README on this branch.

⚠️ Expected merge conflict with PR #3: PR #3 globally rewrites python substack_link_checker.py …substack-link-checker check … throughout README. When PR #3 lands, the troubleshooting block here will need its commands updated the same way. Cleanest merge order:

Either works; both end at the same place. Happy to do the rebase myself once you've picked an order.

Test plan

  • Render README.md in GitHub's previewer; troubleshooting section is readable and each block follows the same shape
  • No code changes → all 29 existing tests still pass (CI confirms)

Generated by Claude Code

Covers the failure modes users actually hit, based on the error
handling already in substack_link_checker.py: 403s (cookie / rotated
cookie / concurrency), missing year-specific sitemap (fall back to
fetch_archive_urls.py), DNS / Timeout for rate-limited targets
(--skip-domains), SSL errors against old TLS hosts (--broken-domains),
soft-404 false positives, empty CSV report, and --only-new not
skipping.

Each entry is one-line problem + one-line cause + copy-pasteable fix.

Screenshot is intentionally not included: producing a real one would
require running against a real Substack with a real cookie, and the
existing "Example Output" code block already conveys the same
information in maintainable text form. Easy to add a real screenshot
later.

Docs only — no code changes, no test changes.
Base automatically changed from claude/audit-github-repo-EWQDn to main May 19, 2026 15:19
@jcddc83 jcddc83 merged commit 295effe into main May 19, 2026
@jcddc83 jcddc83 deleted the claude/readme-troubleshooting branch May 19, 2026 15:24
jcddc83 added a commit that referenced this pull request May 19, 2026
)

* Prepare v1.1.0: bump version + fix stale troubleshooting invocations

Version bump:
- pyproject.toml: 1.0.0 -> 1.1.0
- src/substack_link_checker/__init__.py: __version__ -> 1.1.0
- CHANGELOG.md: rename [Unreleased] -> [1.1.0] - 2026-05-19, add a
  fresh empty [Unreleased] section above it

Troubleshooting fix:
- README.md Troubleshooting section's code blocks still used the
  pre-refactor `python substack_link_checker.py ...` /
  `python fetch_archive_urls.py ...` form because PR #4 was based on
  the audit branch before B3's CLI rewrite landed. Updated to the
  current `substack-link-checker check ...` and
  `substack-link-checker fetch-archive ...` invocations so a reader
  following the troubleshooting steps doesn't hit "command not found"
  on the main entry point.

Once this lands, push tag v1.1.0 to trigger the release workflow
(which builds the wheel/sdist and attaches them to the GitHub
Release).

* Fix CI smoke test (root-level substack_link_checker.py is gone)

The CI test job has been running `python substack_link_checker.py --help`
as a post-install smoke test since PR #1. B3 (PR #3) deleted that file
when refactoring the codebase into the src-layout package, but didn't
update this step. CI has been failing on every PR since B3 merged.

Replace with two invocations against the installed console script:
- `substack-link-checker --help` (top-level dispatcher)
- `substack-link-checker check --help` (check subcommand)

This is also why the actions/checkout Dependabot PR (#7) was reported
as failing — same root cause, not the action bump itself.

---------

Co-authored-by: Claude <noreply@anthropic.com>
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