Record the lightnovelworld series-identity decision (#77) #81

Merged
sulthan merged 1 commits from docs/77-lightnovelworld-series-identity into main 2026-08-11 09:34:27 +07:00
Owner

Docs only. No code, no tests, nothing to run. Implementation is specified in #80.

Outcome of a grilling session on 2026-08-11 against #77, backed by live measurement of lightnovelworld over 2026-08-10/11.

What changed

docs/adr/0008-series-identity-is-discovered-not-derived.md (new)

A Series identity is discovered from the Site's own links, never derived from an address.
On lightnovelworld the userscript reads the chapter page's All Chapter anchor instead of
building a /novel/<slug>/ address by string manipulation. A Chapter Slug is not an
identity and is not stored. The backend's chapter scan drops its per-Series scoping and
runs against the body truncated before the visitor comment thread.

Evidence in the ADR: 3 of 41 sampled novels serve chapters under a slug that differs from
their series slug, divergence runs in both directions, one novel serves chapters under two
slugs, and neither slug is computable from the other. The pointer was checked on 8 chapter
pages and agreed every time. Three narrower selectors are recorded as rejected, each with
the measurement that killed it.

Three rejected options are recorded with reasons: correcting the stored address only, which
keeps an identity the Site does not guarantee; scoping the scan to a container, which the
probe refuted; and a SQL migration, which is impossible because the database holds no
source for the correct slug.

CONTEXT.md

  • Series - identity is the canonical slug the Site publishes, never the title and never a Chapter Slug.
  • Chapter Slug - new term. A slug a Site builds its chapter addresses from. Not an identity: one Series may have several, and none is computable from another.
  • Latest Chapter - now the highest-numbered chapter, explicitly not a date and not the Site's own newest-chapter banner. Settles #79.

docs/research/lightnovelworld-chapter-vs-series-slug.md (new, committed with its corrections)

The 41-novel survey behind the ADR. Two claims are struck through and corrected in place,
with the date and sample size of the probe that refuted each: the ul.clstyle container it
named is the hidden, empty "Latest Reading" template rather than the chapter list, and its
caveat about the comment region understated the risk, because that region is writable by
any visitor while the scan takes an unbounded maximum into a Series row shared by every
Reader (ADR-0003).

Review notes

Nothing here constrains code that exists today - the ADR describes work not yet written.
The part worth disagreeing with, if any of it is wrong, is the fail-closed rule: a missing
truncation marker means skip the Series and log, never scan the whole page.

Related: #77 (the defect), #80 (the spec), #79 (the numbering anomaly, closed by decision),
#71 (the same size cap seen from the cover side).

Docs only. No code, no tests, nothing to run. Implementation is specified in #80. Outcome of a grilling session on 2026-08-11 against #77, backed by live measurement of lightnovelworld over 2026-08-10/11. ## What changed **`docs/adr/0008-series-identity-is-discovered-not-derived.md`** (new) A Series identity is discovered from the Site's own links, never derived from an address. On lightnovelworld the userscript reads the chapter page's `All Chapter` anchor instead of building a `/novel/<slug>/` address by string manipulation. A Chapter Slug is not an identity and is not stored. The backend's chapter scan drops its per-Series scoping and runs against the body truncated before the visitor comment thread. Evidence in the ADR: 3 of 41 sampled novels serve chapters under a slug that differs from their series slug, divergence runs in both directions, one novel serves chapters under two slugs, and neither slug is computable from the other. The pointer was checked on 8 chapter pages and agreed every time. Three narrower selectors are recorded as rejected, each with the measurement that killed it. Three rejected options are recorded with reasons: correcting the stored address only, which keeps an identity the Site does not guarantee; scoping the scan to a container, which the probe refuted; and a SQL migration, which is impossible because the database holds no source for the correct slug. **`CONTEXT.md`** - **Series** - identity is the canonical slug the Site publishes, never the title and never a Chapter Slug. - **Chapter Slug** - new term. A slug a Site builds its chapter addresses from. Not an identity: one Series may have several, and none is computable from another. - **Latest Chapter** - now the highest-numbered chapter, explicitly not a date and not the Site's own newest-chapter banner. Settles #79. **`docs/research/lightnovelworld-chapter-vs-series-slug.md`** (new, committed with its corrections) The 41-novel survey behind the ADR. Two claims are struck through and corrected in place, with the date and sample size of the probe that refuted each: the `ul.clstyle` container it named is the hidden, empty "Latest Reading" template rather than the chapter list, and its caveat about the comment region understated the risk, because that region is writable by any visitor while the scan takes an unbounded maximum into a Series row shared by every Reader (ADR-0003). ## Review notes Nothing here constrains code that exists today - the ADR describes work not yet written. The part worth disagreeing with, if any of it is wrong, is the fail-closed rule: a missing truncation marker means skip the Series and log, never scan the whole page. Related: #77 (the defect), #80 (the spec), #79 (the numbering anomaly, closed by decision), #71 (the same size cap seen from the cover side).
sulthan added 1 commit 2026-08-11 09:33:04 +07:00
A Series identity is discovered from the Site's own links, never derived
from an address. ADR-0008 carries the decision and the evidence behind
it: 3 of 41 sampled novels serve chapters under a slug that differs from
their series slug, one novel serves chapters under two, and neither slug
is computable from the other.

CONTEXT.md gains Chapter Slug as a term, defines it as plural by nature
and never an identity, and pins Series identity to the canonical slug the
Site publishes. Latest Chapter is restated as the highest-numbered
chapter rather than the newest-dated one, settling #79.

The research note is corrected in place where later probes refuted it:
the ul.clstyle container it named is the hidden empty "Latest Reading"
template rather than the chapter list, and its caveat about the comment
region understated the risk, since that region is writable by any
visitor and the scan takes an unbounded maximum into a shared row.

Docs only; no code. Implementation is specified in #80.
sulthan merged commit f1eb7d514c into main 2026-08-11 09:34:27 +07:00
Sign in to join this conversation.