f7130e7cfa
Cover was named in the Series entry but never defined, and the gap is what #47 is: nothing said whether a Cover is an address on a Site or an image a Reader's browser can actually display. Kagane proved they are not the same thing. The ADR records the decision that follows — the backend fetches, stores and serves every Site's cover bytes — along with the alternatives that were rejected and the two knowing relaxations: destination-class control instead of the host allowlist fetchableSeriesURL sets as precedent, and a public cover route where the kagane proxy is session-gated.
77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
# Bookmark Manager
|
|
|
|
Read-progress tracker for serialised fiction. A reader browses third-party manga and
|
|
novel sites; userscripts capture where they got to and sync it to a self-hosted backend,
|
|
so progress survives across sites and devices.
|
|
|
|
## Language
|
|
|
|
**Series**:
|
|
One ongoing work — a manga or a novel — as published by a Site. Identified by its
|
|
stable slug on that Site, never by its title. A Series exists once and is shared by
|
|
every Reader who bookmarks it; it owns the facts that are true regardless of who is
|
|
reading — title, cover, Latest Chapter. A Reader cannot change them; they describe the
|
|
Series, not anyone's relationship to it.
|
|
_Avoid_: manga, title, book, comic
|
|
|
|
**Site**:
|
|
One third-party source a Series is published on. A Series on two Sites is two Series.
|
|
_Avoid_: source, host, provider, domain
|
|
|
|
**Cover**:
|
|
The image that stands for a Series wherever it is listed. A fact about the Series like
|
|
its title — one Cover per Series, shared by every Reader, never per-Reader. Defined by
|
|
what a Reader's browser can display, not by where the Site keeps the picture: an address
|
|
no client can load is not a Cover, it is a missing one.
|
|
_Avoid_: thumbnail, poster, image URL, artwork
|
|
|
|
**Reader**:
|
|
A person with their own Progress. Exactly one per set of credentials, so there is no
|
|
separate "account" concept to model — the credential belongs to the Reader.
|
|
_Avoid_: user, account, member, subscriber
|
|
|
|
**Bookmark**:
|
|
One Reader's tracked relationship with one Series, holding only what differs between
|
|
Readers: Progress, Favourite, Lifecycle bucket. Facts about the Series itself belong
|
|
to the Series, not here.
|
|
_Avoid_: entry, item, record, subscription
|
|
|
|
**Library**:
|
|
One of the two halves of the collection — manga or novel — selected by a Bookmark's
|
|
`kind`. The web UI and the userscripts each address exactly one Library at a time.
|
|
Not a per-person concept: "everything one person has bookmarked" is a different idea
|
|
and must not be called a Library.
|
|
_Avoid_: section, tab, category
|
|
|
|
**Progress**:
|
|
The furthest chapter a reader has actually read in a Series. Only a change in Progress
|
|
is real activity, so only Progress reorders the list.
|
|
_Avoid_: position, bookmark (the noun is taken), last read
|
|
|
|
**Latest Chapter**:
|
|
The newest chapter a Site has published for a Series, discovered without the reader
|
|
present. Distinct from Progress in every way that matters: it is a fact about the Site,
|
|
not about the reader, and it must never reorder the list.
|
|
_Avoid_: newest, current chapter, update
|
|
|
|
**Poll**:
|
|
The backend's own check of a Site for a Series's Latest Chapter, made without the
|
|
Reader present. Performed once per Series no matter how many Readers bookmarked it —
|
|
a Poll is work done on behalf of the Series, never on behalf of a Reader.
|
|
_Avoid_: scrape, refresh, check, sync
|
|
|
|
**New Chapter**:
|
|
The state where Latest Chapter is ahead of Progress. The single condition the ember
|
|
accent is permitted to signal.
|
|
_Avoid_: unread, update available
|
|
|
|
**Lifecycle bucket**:
|
|
Which of three mutually exclusive states a Bookmark sits in — reading, archived, or
|
|
finished. A Bookmark is in exactly one. Orthogonal to being a favourite.
|
|
_Avoid_: state, status (as a domain word), list
|
|
|
|
**Favourite**:
|
|
A reader's manual pin on a Bookmark. Orthogonal to the Lifecycle bucket, and never a
|
|
reason to reorder the list.
|
|
_Avoid_: starred, pinned, priority
|