Skip to content

fix(readnovelfull): throw on failed novel and chapter requests - #2702

Merged
rajarsheechatterjee merged 2 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-allnovel-empty-chapter
Oct 19, 2026
Merged

rajarsheechatterjee merged 2 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-allnovel-empty-chapter

Conversation

@RibatTRW

@RibatTRW RibatTRW commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Issue #2673 reports that AllNovel shows chapter 49 ("The Art Of Captivation") of First Demonic Dragon as an empty chapter.

AllNovel's site, allnovel.org, now redirects to novelfull.com (#2400), and novelfull.com does not carry this novel. The novel page and chapters 48, 49 and 50 all return HTTP 404 there. The Wayback Machine shows allnovel.org served the novel at the same paths until early 2026. The ReadNovelFull template ignored the response status, and the 404 page has no chapter container, so parseChapter returned "". The reader showed that as an empty chapter, and parseNovel returned an empty novel.

This PR makes that failure visible instead of silent. The chapter content cannot be restored through AllNovel, because its current site does not have the novel. Readers of this novel can migrate to AllNovelFull or ReadNovelFull: both still serve it at the same paths, and chapter 49 renders in full on AllNovelFull (screenshot below).

What changed

  • parseChapter and parseNovel in plugins/multisrc/readnovelfull/template.ts now throw on a non-OK response:
    • 404: Chapter not found (404), it may have been removed from this source. (or Novel not found…)
    • any other status: the template's existing Could not reach site (<status>: <text>) try to open in webview. message
  • Template patch bump: generated versions go from 2.2.(1 + versionIncrements) to 2.2.(2 + versionIncrements) (e.g. AllNovel and AllNovelFull 2.2.2 → 2.2.3).
  • No source is repointed. Successful (200) responses are parsed exactly as before.

Testing

  • Live reproduction (curl, browser UA): novelfull.com/first-demonic-dragon/chapter-49-the-art-of-captivation.html returns 404. Before this change the generated AllNovel plugin returned "" for it; after, it throws the 404 message above.
  • Plugin playground (npm run dev:start, headless Chromium):
    • novelfull.com answers Cloudflare 403 to Node's HTTP client, so the playground's own proxy cannot reach it from this machine. For the two AllNovel screenshots, novelfull.com responses were fetched with curl and replayed into the page with their real status codes. novgo.net (AllNovelFull) went through the normal playground proxy.
    • AllNovel, chapter 49 from the issue shows the new 404 error instead of an empty chapter.
    • AllNovel, a novel novelfull.com does carry (reincarnated-as-a-demonic-dragon…/chapter-49-49-let-me-see-your-ability.html): the chapter still renders (6,745 characters).
    • AllNovelFull, same template:
      • Popular returns 20 novels.
      • Search "First Demonic Dragon" finds the novel.
      • The novel page shows 1,284 chapters.
      • Chapter 49 renders in full (9,697 characters).
  • Local-server check (pipeline): 404 and 503 throw the expected messages, and a 200 chapter still returns its HTML.
  • npm run check:plugin for AllNovel was INCONCLUSIVE (Cloudflare 403 to Node).
  • Lint, format and compile are clean for the touched file. Remaining repo-wide lint errors are in unrelated plugins.

AllNovel: chapter 49 from the issue now shows a clear error

AllNovel chapter 49 shows Chapter not found (404)

AllNovel: a chapter novelfull.com carries still renders

AllNovel working chapter

AllNovelFull (same template): First Demonic Dragon chapter 49 renders

AllNovelFull chapter 49

AllNovelFull: novel details and chapter list

AllNovelFull novel page

AllNovelFull: search and popular listing

AllNovelFull search
AllNovelFull popular

Closes #2673

This change and its description were written with an AI agent (Claude Code). Please weigh the review accordingly.

🤖 Generated with Claude Code

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - medium risk

✅ No issues found.

⏭️ **Test** - skipped
  • ⚠️ plugins/multisrc/readnovelfull/template.ts - The issue's chapter was not reproduced against the real site, so it is unconfirmed that chapter 49 returns a non-2xx status. If it returns 200 with an empty #chr-content, the change still returns an empty chapter. The user already declined this concern in review round 1. Playground screenshots are also missing.
  • ⚠️ live validation verdict: inconclusive (4 of 5 scenarios were driven live against the product); untested: AllNovel First Demonic Dragon chapter 49 against the real site shows the chapter body or a clear error
  • Live validation: ⚠️ inconclusive - 4 of 5 scenarios driven live against the product
Scenario Result Live Evidence
parseChapter on a 404 chapter page throws 'Chapter not found (404)' instead of returning an empty chapter ✅ pass live drive.txt
parseNovel on a 404 novel page throws 'Novel not found (404)' ✅ pass live drive.txt
A 503 response throws 'Could not reach site (503…)' in both parseNovel and parseChapter ✅ pass live drive.txt
A 200 response with chapter content still returns the chapter HTML (no regression) ✅ pass live drive.txt
AllNovel First Demonic Dragon chapter 49 against the real site shows the chapter body or a clear error ⏸️ untested no novelfull.com returns a Cloudflare 403 to this environment, and I have no bypass or alternate network route. The playground screenshots the user asked for could not be captured for the same reason. Re…
  • npm run build:multisrc
  • npm ci
  • npm run check:plugin -- &#34;plugins/english/AllNovel[readnovelfull].ts&#34; (INCONCLUSIVE: HTTP 403 Cloudflare)
  • Bundled the AllNovel plugin with esbuild and called parseNovel and parseChapter against a local server returning 404, 503 and 200 responses
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

parseNovel and parseChapter ignored the HTTP status, so a 404 (e.g. an
AllNovel novel saved from allnovel.org that novelfull.com does not carry)
rendered as an empty novel or an empty chapter. Throw with the status
instead, with a clear "not found" message for 404.

Closes lnreader#2673
@greptile-apps

greptile-apps Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge.

Summary

The shared ReadNovelFull template now rejects failed novel and chapter requests before reading their bodies.

  • Novel and chapter requests report failed pages clearly.

No actionable issues found. RibatTRW’s description records the declined concern about empty HTTP 200 responses and acknowledges the missing playground screenshots because the live site blocked capture.

Reviews (1) · Last reviewed commit: "fix(readnovelfull): throw on failed nove..." · Reviewed by Greptile

@rajarsheechatterjee rajarsheechatterjee left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewed with Codex assistance: current diff and review follow-ups inspected; relevant live checks passed in the isolated review environment. Current CI checks are successful. Approval is for commit 22f3601.

@rajarsheechatterjee
rajarsheechatterjee merged commit 29680de into lnreader:master Oct 19, 2026
3 checks passed
rajarsheechatterjee pushed a commit that referenced this pull request Oct 19, 2026
Reviewed current changes and successful CI; relevant live checks passed.

AI-assisted review and merge performed with Codex.
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.

[allnovel] Empty chapter: First Demonic Dragon — Chapter 49 The Art Of Captivation

2 participants