Page MenuHomePhabricator

Provide a cross-wiki special page that renders Abstract Content from the durable storage layer
Open, MediumPublic

Description

This is the main implementation bullet of M1.

nomenclature

Decide, either:

  • we extend the current Special:ViewAbstract/<qid> page so that it's usable from abstract clients, or
  • we build a new Special:PreviewAbstract/<qid> page to isolate functionalities and make this one only accessible on AbstractClient mode

properties and behavior

  • The special page is reached under the URL subpage /<qid> with the language selected from uselang, the user interface language, and a documented fallback chain when the requested language is unavailable.
  • The page looks up a Wikidata item for the display label
  • composes a whole-article blob from the section blobs stored in the storage layer populated by M0,
  • renders that blob with appropriate lang/dir attributes and provenance framing,
  • exposes the skin-level chrome (tabs, subtitles, help link) pointing at the right places cross-wiki.

challenges or concerns

  • Unstored sections follow the cold-path fallback established by M0's migration bullet.
  • Cross-wiki fetch path from the client wiki to the durable storage: Depending on the substrate selected in M0, this may be a direct read against x1, a call into a service, or a read against an object store; the client-side code must be written against an abstraction that lets the substrate decision slot in without rewriting the special page.

out of scope

  • any non-special-page surface for Abstract Content (M2),
  • any editing affordance on the client wiki (abstract content is read-only here; the tab-linking sub-bullet below handles "edit" by sending the reader to abstract.wikipedia.org),
  • any per-reader personalisation beyond language selection,
  • and any integration with VisualEditor or WikiEditor on the client wiki.

Acceptance criteria:

  • A special page (name chosen by the implementer per the M1 header) is reachable on Test Wikipedia at the URL suffix /<qid> when abstract-client mode is enabled, and inaccessible when it is not.
  • On a successful request, the page renders a whole article, composed from the section blobs in the M0 storage layer; for non-stored sections follow the M0 cold-path fallback and return a legible response.
  • The cross-wiki fetch path is abstracted over the substrate selected in M0, so that replacing the substrate would not require rewriting the special page.
  • The class-structure decision (new class / mode branch on existing class / shared base) from the M1 header is recorded in a code comment at the chosen class's top, with a short justification for the choice.
  • Language selection follows the fallback chain driven by uselang and the UI-language chain, with the fallback behaviour documented in the class comment.
  • The three sub-bullets above (Wikidata label, banner, tab linking) are complete.