Official release dates from MangaUpdates; peers lower ecosystem dates (BL-0048, BL-0049)

- scraper/metadata/release-dates.js fills x-dates.release from MangaUpdates
  publisher releases. MangaUpdates also lists English back-catalog re-releases,
  so a date is kept only inside the AniList original run, when no scanlation or
  source upload is more than 4 days earlier, and when it fits the release order
  (no lower chapter dated after a higher one). Seasons that restart chapter
  numbers are skipped; dates this job wrote and no longer accepts are withdrawn.
- The scraper refreshes ongoing series nightly before its update checks, only
  while no download runs, and bumps the publish revision so the reader reconciles.
- tools/release-dates.js for a whole library (dry run default). Production dry
  run: 728 chapters dated (Kagurabachi, JJK, Chainsaw Man, One Piece from 928).
- Peer sync: chapters this library already has adopt a peer's earlier ecosystem
  date (job result ecosystemLowered); the peer listing now carries dates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MaashkinoozheandClaude Opus 5.5 committed 2026-10-24 08:47:36 +02:00
1 parent e0dacd81c6
commit 7b52da2f9c
8 files changed
+402 -7

No files matched your search

+16 -2
View File
@@ -229,8 +229,22 @@ An AniList refresh with a different ID is stopped for review before chapter publ
- `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.
- `release`: the official public release (`precision` `day`, `month` or `year`). It is
filled from MangaUpdates releases by publishers such as Viz, MANGA Plus or Webtoon
(`scraper/metadata/release-dates.js`). Those lists include English re-releases of old
chapters, so a date is kept only when all of these hold:
- it lies within the work's original run on AniList;
- no scanlation or source upload shows the chapter more than 4 days earlier;
- it fits the release order: walking down from the newest chapter, a lower chapter
can't be dated more than 2 days after a higher one.
Series whose chapter numbers restart in a later book are skipped.
- The scraper refreshes ongoing series nightly before its update checks, but only
while no download is running.
- `node tools/release-dates.js <library>` covers a whole library: a dry run by
default, then `--apply --writers-stopped`.
- A date that this job wrote and no longer accepts is removed. Release dates from any
other source stay.
- `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.
+4 -1
View File
@@ -118,7 +118,10 @@ date at which any version of that chapter number entered a Manga Circus library
to the sender. Older chapters fall back to their `added` date. The receiver stores the
date as `x-dates.ecosystem` (`via: "peer <alias>"`) and only lets it lower an existing
date, never raise it. See `docs/library-format.md`. Older peers omit `dates`, and the
receiver then uses its own arrival time.
receiver then uses its own arrival time. A sync also lowers the ecosystem date of
chapters this library already has, including ones it scraped itself, when the peer
knows an earlier date for the same book and chapter number. The job reports these as
`ecosystemLowered`. The reader shows the new date after its next full reconciliation.
| `GET /peer/v1/blobs/{id}` | One image, optional `Range: bytes=N-` and `If-Match`; 206 on resume |
Unknown/unshared IDs return 404. Revoked serving returns 403; bad/missing grants