Skip to content

fix(english/novelarrow): migrate plugin to novelping.com - #2574

Open
RibatTRW wants to merge 5 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-novelarrow-2572-domain
Open

RibatTRW wants to merge 5 commits into
lnreader:masterfrom
RibatTRW:fm/lnreader-novelarrow-2572-domain

Conversation

@RibatTRW

@RibatTRW RibatTRW commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Closes #2572

What changed

The site moved from novelarrow.com to novelping.com on a new platform, so the plugin was rewritten for the new site.

  • site: novelarrow.com -> novelping.com
  • popular: /novels/latest -> /sort/updates?page=N
  • search: /novels/search -> /search?keyword=...&page=N
  • novel pages: /novel/<slug> -> /book/<slug>, chapters from /ajax/chapter-archive?novelId=<slug>
  • chapters: chapter/<slug>/<id> -> book/<slug>/<chapter-id>, text from #chr-content with ad slots stripped
  • old library paths (novel/<slug>, chapter/<slug>/<id>) still resolve and map to the new routes
  • version 1.0.1 -> 2.0.0 (a site/domain change is the breaking case AGENTS.md names)
  • fetches throw with the HTTP status on a refused response instead of parsing it into an empty result

Verification

  • check:plugin 4/4 PASS locally; prettier --check, eslint and build:compile clean.
  • Live on novelping.com: popular 20/page, search finds book/shadow-slave, novel detail returns 3198 chapters, chapter 1 returns 11,325 characters of prose.
  • Playground: popular, search, novel detail and chapter read all work.
  • CI's Plugin Live Check reports INCONCLUSIVE - HTTP 403 because novelping refuses GitHub's runner IPs at the HTTP layer; the same code returns 200 elsewhere. No hard failure.

Caveats

  • novelarrow.com still serves the old site from some networks; the issue reports the move to novelping.com, which serves the same library.
  • A commenter notes the site is currently unstable, so chapter counts may need re-checking.

AI-authored (Co-Authored-By trailer in the commit).

The site moved from novelarrow.com to novelping.com with a new
platform (Next.js + api-web endpoints replaced by an Express
frontend): listings now live under /sort/updates, search under
/search, novels under /book/<slug> with chapters served by the
/ajax/chapter-archive endpoint, and chapter text in #chr-content.

Bump major version: replacing the site/domain behavior is the
breaking case named in AGENTS.md.

Closes lnreader#2572

Co-Authored-By: Muse Spark <ai-agent>
@RibatTRW
RibatTRW marked this pull request as draft September 25, 2026 12:07
Cloudflare serves UA-less requests a challenge page that parses to
zero novels, which fails the CI live check on runner egress IPs.
Follow the sibling-plugin convention (e.g. readfrom) with a Chrome
User-Agent plus Referer and Accept-Language on all fetches.

Related to lnreader#2572

Co-Authored-By: Muse Spark <ai-agent>
@greptile-apps

greptile-apps Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Medium risk] Migrates a novel-scraping plugin to a new site.

The PR appears safe to merge based on the reviewed changes.

Summary

The PR migrates Novel Arrow to novelping.com, updates listing and chapter parsing, and retains support for saved legacy paths. The changes since the previous review consolidate the site URL, refine status handling, and simplify path construction.

Reviews (5) · Last reviewed commit: "refactor(english/novelarrow): clean-code..."

Comment thread plugins/english/novelarrow.ts Outdated
Comment thread plugins/english/novelarrow.ts Outdated
…chapter errors

Address review findings: existing library entries keep novel/<slug>
paths from the previous site, so derive the slug from either the old
novel/<slug> or the new book/<slug> form and always request the new
route, returning canonical book/<slug> novel and chapter paths.
Accept old chapter/<slug>/<id> chapter paths the same way. Also let
chapter fetch errors propagate instead of converting them into a
fake empty result.

Related to lnreader#2572

Co-Authored-By: Muse Spark <ai-agent>
Route every fetch through a helper that throws on non-2xx carrying
the HTTP status, so a refusal surfaces as an error the live check
classifies INCONCLUSIVE (the documented runner-block handling)
instead of parsing into a false empty-result FAIL.

Related to lnreader#2572

Co-Authored-By: Muse Spark <ai-agent>
@RibatTRW
RibatTRW marked this pull request as ready for review September 25, 2026 12:49
@RibatTRW
RibatTRW marked this pull request as draft September 25, 2026 12:50
@RibatTRW
RibatTRW marked this pull request as ready for review September 25, 2026 13:12
…and Unknown status

Single-source the site URL in one module const used by both the
class site and the Referer header. Default unknown novel statuses
to NovelStatus.Unknown instead of Completed. Record the verified
chapter-archive oldest-first ordering and the verified-sufficient
single-meta author/genre lookups. Inline the dead novelId alias,
drop the stale double-slash comment, and collapse the chapter-path
canonicalization to one replace.

Related to lnreader#2572

Co-Authored-By: Muse Spark <ai-agent>
@RibatTRW
RibatTRW marked this pull request as draft September 25, 2026 13:23
@RibatTRW
RibatTRW marked this pull request as ready for review September 25, 2026 13:27
@RibatTRW
RibatTRW marked this pull request as draft September 25, 2026 13:28
@RibatTRW
RibatTRW marked this pull request as ready for review September 25, 2026 13:48
@greptile-apps

greptile-apps Bot commented Sep 25, 2026

Copy link
Copy Markdown

Want your agent to iterate on Greptile's feedback? Try greploops.

This branch has not been deployed

No deployments
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.

Novelarrow change site into novelping

1 participant