# Decisions Append-only. Never edit or delete an entry — supersede it with a new one that links back. One entry per decision a future maintainer would otherwise have to reverse-engineer. No index: `grep -n '^## ' docs/DECISIONS.md` lists every entry (date, title, line number). ## 2026-10-14 — Adopt AGENTS.md as single source of truth **Status:** accepted **Context:** Agents had no durable project context and no consistent workflow between sessions. The design context lived in `HANDOVER.md`, which is now split into this file, the spec and `docs/TODO.md`. **Decision:** `AGENTS.md` is canonical; `CLAUDE.md`/`GEMINI.md` are pointers. Specs are permanent in `docs/specs/`. Plans live in `docs/plans/` only while work is in progress and are removed before the merge request. Both override the superpowers default paths. **Alternatives:** Per-tool rule files (drift, synchronisation debt); no rules file (agents re-explore the repo every session — measurably slower and more tokens). **Consequences:** Rule changes happen in one file; pointer files must stay thin. Plans are working artefacts: kept after merge they go stale and contradict the code, so the spec is the record. ## 2026-10-15 — KakaoPage source; per-host request headers (spec 004) **Status:** accepted **Context:** The user asked for KakaoPage next. Its pages render in the browser; the data comes from `bff-page.kakao.com/api/gateway/api/v1/content/overview`, which answers 403 without a `page.kakao.com` Referer. **Decision:** A third `Source` that reads that endpoint for current covers (`thumbnail` portrait, `land_thumbnail` landscape; originals via `filename=o1`) and archived server-rendered pages (both the old `/home?seriesId=` and `/content/` addresses) for history. `core/transport.ts` gains `requestHeadersFor(url)` (User-Agent as before, plus a Referer for `bff-page.kakao.com`); the server proxy and the userscript send it. `age_grade >= 15` sets `mature` (the rating warning). Kakao Webtoon (`webtoon.kakao.com`) is a separate site and not included. **Alternatives:** Rendering the page in a headless browser (heavy, server-only); reading the JS bundle's API calls at run time (brittle). **Consequences:** We depend on an internal API and its Referer check. A Referer is a browser-like header, as the Chrome User-Agent is for Webtoons. ## 2026-10-15 — Correction: the userscript does not send Tapas cookies **Status:** accepted (corrects "Tapas source (spec 003)" below) **Context:** The Tapas entry and spec 003 said a signed-in adult gets mature Tapas pages through the userscript. `gmTransport` uses `anonymous: true`, so no cookies are sent. **Decision:** The docs and the warning now say only the Wayback history helps for age-checked Tapas series. Sending cookies would need `anonymous: false` for tapas.io only; deferred (TODO). **Consequences:** None in code; the earlier claim was never true. ## 2026-10-15 — Page views via our Shynet instance **Status:** accepted **Context:** The user asked for analytics from their self-hosted Shynet. **Decision:** Shynet's snippet (deferred script plus `