Skip to content

fix(chinese): mark linovelib_tw source broken after search moved to Google CSE - #2683

Open
RibatTRW wants to merge 1 commit into
lnreader:masterfrom
RibatTRW:fm/lnreader-linovelibtw-search
Open

RibatTRW wants to merge 1 commit into
lnreader:masterfrom
RibatTRW:fm/lnreader-linovelibtw-search

Conversation

@RibatTRW

@RibatTRW RibatTRW commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Intent

Fix the broken linovelib_tw source so a reader can search it again, and include screenshots of the working fix in the PR.

plugins/chinese/linovelib_tw.ts browses and reads fine, but its own live check fails searchNovels: the plugin reports its own error 無法獲取搜索結果, 請檢查網絡 (cannot get search results), while the site's list page answers 200 with about 47 KB. So the site is up - the plugin's search path has drifted. This is one of the plugins this fleet's plugin health sweep confirmed as genuinely broken today (not a site-side block).

Make sure the fix's pull request shows a photo of the plugin working correctly inside the plugin playground, and run that screenshot process headless if possible.

Later, the captain said: for linovel cant we use the chrome tools we already have if not do the recommended actions but include screenshots of the broken site

What Changed

  • Renamed plugins/chinese/linovelib_tw.ts to plugins/chinese/linovelib_tw.broken.ts, which excludes the Linovelib(繁體) source from normal production compilation while keeping its source.
  • Bumped the plugin version from 1.0.1 to 1.0.2, as required for an existing plugin change.
  • No parsing or search logic was changed.

Risk Assessment

🚨 High: The single change disables the whole linovelib_tw plugin instead of fixing its search, which the stated intent requires, and it rests on unverified evidence while a later human decision asked for a browser-based check first, so it should not merge without explicit human approval.

Testing

The change was driven live against the real site with the plugin's live checker, using a temporary copy of the pre-rename plugin. Search still fails (searchNovels FAIL) and the site's /search/ route still 301-redirects to 127.0.0.1, so the core intent is not met. Browsing and reading pass on the original file but are excluded from the playground and production build by the rename. The browser screenshots the intent asks for could not be taken because the Chrome bridge was unavailable. Overall result: no-go.

  • Live validation: ❌ no-go - 1 of 4 scenarios driven live against the product
Scenario Result Live Evidence
Reader searches linovelib_tw and receives novel results ❌ fail live npm run check:plugin on the pre-rename plugin: searchNovels FAIL, 無法獲取搜索結果, 請檢查網絡; curl /search/test_1.html 301 to http://127.0.0.1
Reader browses and reads linovelib_tw after this change (popular list, novel detail, chapter) ⏸️ untested no The prior payload did not establish a live result for the renamed file. Live checks of popularNovels, parseNovel and parseChapter passed only on the pre-rename plugin. The .broken.ts file is excluded…
Screenshot of the working plugin inside the plugin playground ⏸️ untested no No working search exists, and the .broken.ts file is excluded from the playground registry. The headless Chrome bridge also failed with BRIDGE_NOT_READY, so no screenshot could be taken.
Screenshot of the broken site (captain's request) ⏸️ untested no Chrome bridge attached target is gone (BRIDGE_NOT_READY). Re-run once a Chrome debugging target is reachable.

Browser evidence (headless, captured by an AI worker)

Authorship: this change and this write-up were produced by an AI agent (Claude Haiku 5.5) under the captain's direction. No human has reviewed the code. The screenshots below come from a headless Chromium run on this machine, not from the LNReader app (the Android toolchain is not installed here), and not from the plugin playground: the renamed .broken.ts file is excluded from the playground registry.

Screenshots of the live site, taken 2026-10-15:

  1. Site search popup on the listing page, query typed, no on-site results: Site search popup on the listing page, query typed
  2. Submitting that search lands on the site's Google Programmable Search page, which returns tw.linovelib.com novels: Submitted search lands on Google Programmable Search with site results
  3. The old /search/{term}_1.html route: 127.0.0.1 refuses the connection: Old search route refused by 127.0.0.1

Findings:

  • Browsing and reading still work: in the live check, popularNovels, parseNovel and parseChapter pass on the file's code. The rename removes the source from production and the playground, so this describes the source, not the shipped app.
  • The site removed its own search: /search/ returns 301 to 127.0.0.1, and the search form now posts to Google Programmable Search. A plugin cannot read those results without a browser or an API key, and the CSE element endpoint returns 403 to plain HTTP clients.
  • The PR author independently confirmed that the site's search is unavailable.
  • CI: Plugin Live Check fails on searchNovels for that reason. The earlier statements in this PR that the screenshots could not be taken are superseded by the images above.

Why Plugin Live Check fails

The CI Plugin Live Check fails on the renamed plugins/chinese/linovelib_tw.broken.ts. The failure is expected and comes from the site, not from this diff:

  • Search is gone on the site side: /search/ returns 301 to 127.0.0.1, and the search form now posts to Google Programmable Search (cx=649de34f5e63448cb).
  • The Google CSE element endpoint returns 403 to plain HTTP clients, so the plugin cannot read those results without a browser or an API key.
  • parseChapter failed once in CI (80 chars) but passed locally at 2238 chars, so that look transient. Its parser was not changed.

The live check is left failing as an honest report: the shared workflow and checker were not changed, and no API key was added.

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - 2 issues (1 error, 1 warning)
  • 🚨 plugins/chinese/linovelib_tw.broken.ts:435 - Contradicts the required intent 'Fix the broken linovelib_tw source so a reader can search it again'. The commit makes no change to searchNovels (lines 435-442 still call /search/${term}_${page}.html with the same error text). Instead the whole source is disabled by renaming linovelib_tw.ts to linovelib_tw.broken.ts, which removes the plugin from production compilation and flags it as broken in scripts/build-plugin-manifest.js:206-222. Browsing and reading, which the intent says already work, are removed from users' reach as well. Required behavior now absent: a working search path. Remedy needs human authorization because it changes the product status of the plugin rather than fixing search.
  • ⚠️ plugins/chinese/linovelib_tw.broken.ts:12 - The later recorded decision asked 'for linovel cant we use the chrome tools we already have' before falling back to the recommended action, and to include screenshots of the broken site. The commit's evidence is plain non-browser fetches (the commit message cites HTTP 403 for CSE results and a 301 to http://127.0.0.1/). It records no browser-based attempt and no screenshot of the broken site. The version bump at line 12 (1.0.1 to 1.0.2) is also tied to this unverified status change. The claimed root cause (search moved to Google CSE, and the /search/ route redirects to 127.0.0.1) is not reproduced anywhere in the diff.
⚠️ **Test** - 3 issues (2 errors, 1 warning)
  • 🚨 plugins/chinese/linovelib_tw.broken.ts:435 - The change does not fix search. It renames the plugin to .broken.ts, which by the build script's rules removes it from production compilation. The live probe confirms the search route still 301-redirects to http://127.0.0.1/. The user intent requires a working search path and screenshots of the working fix. This needs the user to decide whether to keep the source disabled, switch to a different search data source, or accept the status change.
  • 🚨 live validation verdict: no-go (1 of 3 scenarios were driven live against the product); failed: Reader searches linovelib_tw and receives novel results
  • Live validation: ❌ no-go - 1 of 3 scenarios driven live against the product
Scenario Result Live Evidence
Reader searches linovelib_tw and receives novel results ❌ fail live curl probe of the plugin's search route https://tw.linovelib.com/search/測試_1.html returned 301 to http://127.0.0.1/ (testing_summary)
Browsing and reading remain available to users in production ⏸️ untested no Not driven against a live production build. The prior payload only read the rename and the build script; it did not run the production build or the app to confirm the plugin disappears from users' rea…
Screenshots of the working fix in the plugin playground ⏸️ untested no There is no working fix to capture. No screenshot of the broken site was taken either, though the captain asked for one, and chrome-devtools-axi is available for that. The fix itself is blocked on a u…
  • git show --stat fc2b110 and git show fc2b110 -- plugins/chinese/linovelib_tw.broken.ts (confirmed the diff is a rename plus version bump only)
  • sed of plugins/chinese/linovelib_tw.broken.ts lines 425-445 (searchNovels still calls /search/${term}_${page}.html with the same error text)
  • sed of scripts/build-plugin-manifest.js lines 200-225 (.broken.ts files are excluded from production and flagged as broken)
  • curl -sS -o /dev/null -w '%{http_code} %{redirect_url}' 'https://tw.linovelib.com/search/測試_1.html' (live: 301 to http://127.0.0.1/)
  • curl -sS -o /dev/null -w '%{http_code}' 'https://tw.linovelib.com/top/lastupdate/1.html' (live: 200)

🔧 No changes applied.
3 issues (2 errors, 1 warning) still open:

  • 🚨 plugins/chinese/linovelib_tw.broken.ts:435 - Search for linovelib_tw still fails: the live check reports searchNovels FAIL with 無法獲取搜索結果, 請檢查網絡 for both the renamed file and the original file. The site's /search/ route still returns 301 to http://127.0.0.1/, so the required intent 'a reader can search it again' is not met.
  • ⚠️ plugins/chinese/linovelib_tw.broken.ts:1 - The rename removes the plugin from the playground and production catalog (src/provider/plugin-registry.ts excludes **/*.broken.ts), so readers lose browsing and reading too, not only search. Needs a human decision on whether to keep the source disabled.
  • 🚨 live validation verdict: no-go (2 of 3 scenarios were driven live against the product); failed: Reader searches linovelib_tw and receives novel results
  • Live validation: ❌ no-go - 2 of 3 scenarios driven live against the product
Scenario Result Live Evidence
Reader searches linovelib_tw and receives novel results ❌ fail live npm run check:plugin -- plugins/chinese/linovelib_tw.broken.ts reports searchNovels FAIL (無法獲取搜索結果, 請檢查網絡). curl https://tw.linovelib.com/search/測試_1.html returns 301 to http://127.0.0.1/. The sam…
Browsing popular novels, novel detail, and chapter reading still work ✅ pass live npm run check:plugin -- plugins/chinese/linovelib_tw.broken.ts reports popularNovels PASS (50 novels), parseNovel PASS (620 chapters), parseChapter PASS (2238 chars).
Plugin screenshot of the working fix in the playground (search and browse) ⏸️ untested no The playground registry glob excludes '!/plugins/**/*.broken.ts' (src/provider/plugin-registry.ts), so the renamed plugin cannot appear in the playground. Search cannot be shown working because it fai…
  • git show fc2b110 and git show --stat to read the diff (rename plus version bump only)
  • npm ci in the worktree to install dependencies (node_modules, gitignored)
  • curl probes of https://tw.linovelib.com/search/測試_1.html, search.html?searchkey=test, /search/test_1.html, the home page, and the top list
  • curl probe of the Google CSE endpoint (returns 403)
  • npm run check:plugin -- plugins/chinese/linovelib_tw.broken.ts (live: popular PASS, search FAIL, parseNovel PASS, parseChapter PASS)
  • npm run check:plugin on a temp copy of the original 49b4727 file (search FAIL, same as the renamed file)
  • Read src/provider/plugin-registry.ts and scripts/build-plugin-manifest.js to confirm the broken-file exclusion

🔧 No changes applied.
3 issues (2 errors, 1 warning) still open:

  • 🚨 plugins/chinese/linovelib_tw.broken.ts:435 - Search for linovelib_tw still fails. The commit only renames the plugin to .broken.ts and does not change searchNovels, so a reader still cannot search it. The live check reports searchNovels FAIL with 無法獲取搜索結果, 請檢查網絡 (evidence: evidence/linovelib_tw-live-check.md). The site's /search/ route returns 403 to plain HTTP clients and the headless Chrome bridge was unavailable, so the claimed 301 to 127.0.0.1 could not be re-checked here.
  • ⚠️ plugins/chinese/linovelib_tw.broken.ts:1 - Renaming to .broken.ts removes the plugin from production compilation and the playground registry. Browsing and reading (popularNovels and parseNovel PASS in the live check) are therefore also withdrawn from readers. The screenshot of the working plugin in the playground required by the intent cannot be produced, because no working search exists and the plugin is excluded from the playground.
  • 🚨 live validation verdict: no-go (2 of 3 scenarios were driven live against the product); failed: Reader searches linovelib_tw and receives novel results
  • Live validation: ❌ no-go - 2 of 3 scenarios driven live against the product
Scenario Result Live Evidence
Reader searches linovelib_tw and receives novel results ❌ fail live evidence/01M4ZNNKW00RKACM8NPTY5VAHH/linovelib_tw-live-check.md (searchNovels FAIL: 無法獲取搜索結果, 請檢查網絡)
Reader can still browse and read linovelib_tw (popular list, novel details, chapter text) ✅ pass live evidence/01M4ZNNKW00RKACM8NPTY5VAHH/linovelib_tw-live-check.md (popularNovels PASS 50 novels, parseNovel PASS 620 chapters, parseChapter PASS)
Playground screenshot of the plugin working correctly (intent: headless screenshot in the PR) ⏸️ untested no Attempted chrome-devtools-axi open on the linovelib search URL. It failed with BRIDGE_NOT_READY (the attached CDP target is gone) on two retries. The playground also excludes *.broken.ts, and search d…
  • npm run check:plugin -- plugins/chinese/linovelib_tw.broken.ts (live check against linovelib.com; popularNovels PASS, searchNovels FAIL, parseNovel PASS, parseChapter PASS)
  • curl HEAD probes to https://www.linovelib.com/ and /search/ routes (all HTTP 403 to a plain client)
  • chrome-devtools-axi open on the search URL (failed twice: BRIDGE_NOT_READY, no active CDP target)
  • Saved the live-check table to evidence/01M4ZNNKW00RKACM8NPTY5VAHH/linovelib_tw-live-check.md

🔧 No changes applied.
3 issues (2 errors, 1 warning) still open:

  • 🚨 plugins/chinese/linovelib_tw.broken.ts:435 - The commit does not fix search. searchNovels is unchanged and still fails in the live check (searchNovels FAIL, 無法獲取搜索結果, 請檢查網絡), and /search/ still returns 301 to http://127.0.0.1. A reader still cannot search linovelib_tw, which the intent requires.
  • ⚠️ plugins/chinese/linovelib_tw.broken.ts:1 - Renaming to .broken.ts removes the plugin from the playground registry (src/provider/plugin-registry.ts:4 excludes **/*.broken.ts) and from production compilation (scripts/build-plugin-manifest.js:206-222). Browsing and reading, which pass in the live check on the original file, are withdrawn from readers. Needs a human decision on whether to keep the source disabled.
  • 🚨 live validation verdict: no-go (1 of 4 scenarios were driven live against the product); failed: Reader searches linovelib_tw and receives novel results
  • Live validation: ❌ no-go - 1 of 4 scenarios driven live against the product
Scenario Result Live Evidence
Reader searches linovelib_tw and receives novel results ❌ fail live npm run check:plugin on the pre-rename plugin: searchNovels FAIL, 無法獲取搜索結果, 請檢查網絡; curl /search/test_1.html 301 to http://127.0.0.1
Reader browses and reads linovelib_tw after this change (popular list, novel detail, chapter) ⏸️ untested no The prior payload did not establish a live result for the renamed file. Live checks of popularNovels, parseNovel and parseChapter passed only on the pre-rename plugin. The .broken.ts file is excluded…
Screenshot of the working plugin inside the plugin playground ⏸️ untested no No working search exists, and the .broken.ts file is excluded from the playground registry. The headless Chrome bridge also failed with BRIDGE_NOT_READY, so no screenshot could be taken.
Screenshot of the broken site (captain's request) ⏸️ untested no Chrome bridge attached target is gone (BRIDGE_NOT_READY). Re-run once a Chrome debugging target is reachable.
  • git show --stat HEAD and git show HEAD~1:plugins/chinese/linovelib_tw.ts to confirm the commit only renames the file and changes the version
  • npm run check:plugin -- plugins/chinese/linovelib_tw_probe_orig.ts (temporary copy of the pre-rename plugin, removed afterward): popularNovels PASS (50 novels), searchNovels FAIL (無法獲取搜索結果, 請檢查網絡), parseNovel PASS (620 chapters), parseChapter PASS (2238 chars)
  • curl -sI https://tw.linovelib.com/search/test_1.html: HTTP/2 301, location: http://127.0.0.1
  • curl https://tw.linovelib.com/top/lastupdate/1.html: HTTP 200
  • chrome-devtools-axi open https://tw.linovelib.com/search/test_1.html: failed with BRIDGE_NOT_READY (attached CDP target gone), so no browser screenshot was produced
  • Code reading of src/provider/plugin-registry.ts:4 and scripts/build-plugin-manifest.js:206-222 for the effect of the .broken.ts suffix
  • Confirmed the worktree is clean after removing the temporary probe file
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

…oogle CSE

The site's own /search/ route now 301-redirects to http://127.0.0.1/,
which refuses connections, so searchNovels always fails. The site's
search popup now submits to Google Programmable Search
(cx=649de34f5e63448cb). Plain fetches of the CSE results endpoint return
HTTP 403 to non-browser clients, so the plugin cannot reach search
without a data-source change and an API key.

Rename to linovelib_tw.broken.ts per the repository convention for
unavailable plugins and bump the version to 1.0.2. Listing, novel
detail and chapter parsing are unchanged.
@greptile-apps

greptile-apps Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Low impact] No additional issue blocks merging beyond the concerns RibatTRW already acknowledges.

Summary

Marks Linovelib(繁體) as broken by renaming linovelib_tw.ts to linovelib_tw.broken.ts.

  • Linovelib(繁體) is marked as broken and leaves the regular plugin list.

Reviews (1) · Last reviewed commit: "fix(chinese/linovelib_tw): mark source b..." · Reviewed by Greptile

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.

1 participant