Chapter dates: read date setting and tiered release dates (BL-0047)
- Chapter rows show when you first finished a chapter (setting: date + hour, date, off) from a new durable progress doneAt; older reads fall back to the reading clock's earliest remembered completion. - chapter.json keeps added (arrival in this library, now kept on replace) plus x-dates.source (source upload, bulk imports flagged), x-dates.release (official, for a later metadata job) and x-dates.ecosystem (first entry into any Manga Circus library; carried over peering, earliest wins, clamped). - Rows show one release date by tier: official > source upload > ecosystem > library, with all known dates in the tooltip (setting to hide). - Fixes: WeebCentral dates came from the chapter page, which has none (every chapter got the download time); they now come from the full chapter list. MangaDex no longer writes a group's publishAt into added. Peering sends dates. - tools/backfill-chapter-dates.js migrates an existing library (dry run default). - Coverage dry run on the server: docs/chapter-dates-coverage-2026-10-24.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b2bb34174c
commit
e0dacd81c6
21 files changed
+470
-32
No files matched your search
+29
-1
@@ -208,11 +208,39 @@ An AniList refresh with a different ID is stopped for review before chapter publ
|
||||
|-------|------|---------|
|
||||
| `title` | string | Chapter title without "Chapter N" (default: title part of the folder name) |
|
||||
| `source` | `{name, url}` or string | Where this version came from (default: `[source]` in the folder name) |
|
||||
| `added` | ISO date/time string | Release (or download) date, used for "recently updated" (default: the folder's modification time) |
|
||||
| `added` | ISO date/time string | When this version entered **this** library, used for "recently updated" (default: the folder's modification time). The scraper keeps it when it replaces a version |
|
||||
| `x-dates` | object | Other chapter dates, written by the scraper (see below) |
|
||||
| `extra` | boolean | Marks the chapter as extra without moving it |
|
||||
| `priority` | number | Tie-breaker between versions with equal votes. Higher wins (default `0`) |
|
||||
| `direction` | as above | Overrides book/manga direction, e.g. a colour webtoon special inside a printed series |
|
||||
|
||||
#### Chapter dates (`x-dates`)
|
||||
|
||||
```json
|
||||
"added": "2026-10-17T15:04:03.424Z",
|
||||
"x-dates": {
|
||||
"version": 1,
|
||||
"source": { "at": "2026-10-18T15:06:05.348Z", "name": "WeebCentral", "batch": false },
|
||||
"release": { "at": "2023-09-17", "precision": "day", "source": "MangaUpdates · Viz" },
|
||||
"ecosystem": { "at": "2026-10-17T15:04:03.424Z", "via": "this server" }
|
||||
}
|
||||
```
|
||||
|
||||
- `source`: when the source site uploaded this version (WeebCentral's full chapter list,
|
||||
MangaDex `publishAt`). `batch: true` means it arrived with 3 or more other uploads
|
||||
less than 10 minutes apart, which is a site import, not a release.
|
||||
- `release`: the official public release (`precision` `day`, `month` or `year`). Not
|
||||
filled yet; a metadata job will add it.
|
||||
- `ecosystem`: when the chapter first entered any Manga Circus library. Peer transfers
|
||||
carry it, and the earliest known date always wins. A peer's claim can't be earlier than
|
||||
the source upload or later than now.
|
||||
|
||||
The chapter list shows one release date per chapter, choosing the first tier that has
|
||||
a date: `release` → `source` unless `batch` (shown as ≈) → `ecosystem` (◎) → `added` (↓).
|
||||
Each tier takes the earliest value across the chapter's versions. Existing libraries get
|
||||
these fields from `node tools/backfill-chapter-dates.js <library>`: a dry run by default,
|
||||
then `--apply --writers-stopped` and a deep Rescan.
|
||||
|
||||
Manual directions have priority at **chapter → book → manga**. A `directionOverride`
|
||||
or a plain `direction` without matching generated provenance is manual. Otherwise,
|
||||
the scanner checks the version's existing image dimensions for coherent tall strips
|
||||
|
||||
Reference in new issue
Block a user