# TODO Durable backlog. Agents append here instead of leaving `TODO` comments in source. Small, specific, independently actionable. Remove only when actually done. Design: [specs/001-webtoons-covers.md](specs/001-webtoons-covers.md). ## Now - [ ] Write the implementation plan with `superpowers:writing-plans` into `docs/plans/001-webtoons-covers.md`, and **show it to the user before implementing** (the user asked for this in the design session). ## Next (rough order; the plan will refine it) - [ ] **Scaffold with Bun.** `package.json`, `bun.lock`, TypeScript, `.gitignore` (already exists). Scripts for test, typecheck, build (page, Worker, userscript). Then fill the Commands in `AGENTS.md` and the Verified commands in `docs/PERMISSIONS.md` from runs that worked. - [ ] **Capture fixtures from real responses:** Webtoons pages (Tower of God, crow-time canvas, title_no 6065 mature, a 2015 Wayback snapshot), Wayback CDX output, MangaBaka `series`, `links`, `images` for 9999, and a snapshot/preview if a token is available. - [ ] **Re-download the OpenAPI spec** from `https://mangabaka.org/api.json`; derive `core/mangabaka/types.ts` (`SaveSubmissionBody`, series-images snapshot and preview, `V1_Series_Cover_Image`). - [ ] `core/`: model, transport (rate limit, retries, timeouts, token scoping), links, sources + registry, webtoons (urls, parse, index), history/wayback, images, covers, mangabaka client, hosting (server, litterbox, catbox, direct), seed. - [ ] `server/`: `app.ts` (assets, `/api/config`, `/api/fetch` allowlist, `/api/upload` store|catbox, `/covers/*`, per-IP rate limit), `Storage` + folder storage with a daily 30-day sweep and a total size cap (507 when full), entry `bun.ts`. - [ ] `web/`: two-link form, review cards, host picker with lifetimes, rehost, copy, token flow (preview → confirm → save). - [ ] `userscript/`: panel on mangabaka.org series pages, `GM_xmlhttpRequest` transport, token in `GM_setValue`, direct litterbox/catbox uploads, optional server URL, build to `mbseed.user.js` with metadata banner. - [ ] Manual smoke test against Tower of God (9999 / title_no 95). - [ ] Update README, `docs/ARCHITECTURE.md` and `PRODUCT.md`/`DESIGN.md` to match reality. - [ ] Userscript: fill MangaBaka's cover form for users without a token (spec §4.9) — needs the logged-in form's markup and a check that it accepts programmatic input (spec §7.5). The panel offers copy-and-paste instead. ## Verify with real services (once possible) - [ ] Which of our servers and domain hosts it (`MBSEED_PUBLIC_URL`); where the covers folder lives. - [ ] Does catbox accept uploads from our server? - [ ] Does MangaBaka accept our storage URLs, litterbox/catbox URLs, and `swebtoon-phinf.pstatic.net` (`direct`)? - [ ] Does MangaBaka copy images on submission or on approval? - [ ] Is "main cover" really `is_default: true`? Ask on the MangaBaka Discord if unclear. - [ ] Where are personal access tokens created in the MangaBaka UI? Add it to the README. - [ ] Does the MangaBaka cover form accept fields filled by a userscript? ## Someday - [ ] S3-compatible bucket as a `Storage` option, if a single server's disk stops being enough. - [ ] Password gate (spec §4.11) — only if the open site gets abused or traffic grows too large. - [ ] Cloudflare Workers entry (`server/worker.ts`, R2 binding). If added: Workers serve static assets before the Worker unless `run_worker_first` is set — needed for the gate to cover them. - [ ] Bun CLI on the same core. - [ ] More sources: Tapas, Tappytoon, Lezhin, Manta. - [ ] Following Webtoons language editions of the same series. - [ ] Edits beyond covers (series fields, links), via other submission resources. - [ ] CI: check `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` and the `docs/` paths exist; fail if `AGENTS.md` exceeds 150 lines. ## Recurring - [ ] Maintain `AGENTS.md`: - **Add a rule only in response to a real failure.** When an agent repeatedly gets something wrong, that is a gap; add one line, ideally with a code example. Do not pre-empt hypothetical mistakes. - **Update in the same PR as the convention change.** A stale rules file is worse than none — it actively misleads. - **Prune quarterly.** Delete rules whose convention has changed or whose mistake no longer occurs. - **Optional, cheap validation:** run the same task twice in clean sessions, with and without the file, and compare steps and token use. ## Known issues - None yet (no code).