Delivery Checklist
Code Contract
-
export defaultincludes everyfnPaththe host may call - Reading pipeline implemented:
searchComic/getComicDetail/getReadSnapshot/fetchImageBytes - If download is supported,
getChapteris implemented - Plugin info, directory layout, and build scripts are based on the example repository
- Prefer
BreezeHtmlfor HTML parsing; avoid bundling full cheerio
Data Structures
- Search list
data.items[]fields are complete (id/title/cover/metadata/raw) - Detail page
data.normal.comicInfo+data.normal.epsstructure is complete - Chapter list and chapter detail use unified fields:
id/requestId/logicalKey/storageChapterId/name/order - Chapter images
data.chapter.pages[]provideid/name/path/url - All
externpassthrough logic is closed-loop - HTML parse results handle null / missing nodes so minor page changes do not crash the whole flow
Business Flows
- Favorite / like flow (
toggleFavorite/toggleLike) works - Comment feed (if implemented) supports pagination and replies
- Filters (if implemented) correctly emit
core/extern
Stability
- Network requests use unified timeouts and error mapping
- Auth expiry returns structured unauthorized errors
-
fetchImageBytesreturnsUint8Arraydirectly, with headerx-rquickjs-host-offload-binary-v1: 1 - All
ImageItem.urlvalues are valid non-empty placeholders (not empty or 404) - Both debug mode and release mode pass end-to-end
Release
- Bundle and plugin UUID are aligned (
uuidis stable; do not change casually) - Updated
versioninbuildPluginInfo()insrc/get-info.ts, then ranpnpm build - Update channel configured:
npmNameand/orupdateUrl(unlisted plugins need at least one, or silent update and Sync will not work) - If using GitHub Release: tag matches
version,updateUrlpoints to.../releases/latest - Completed at least one full real-device regression (home → search → detail → read)
- Changelog covers new capabilities, behavior changes, and known limits