Page MenuHomePhabricator

[Milestone 1] Build a cross-wiki read surface for Abstract Content on local wikis
Open, HighPublic

Description

The goal of this milestone is to stand up the first cross-wiki consumer of the durable cache built in M0: a special page on client wikis (initially Test Wikipedia) that renders pre-generated Abstract articles end-to-end, reading from a cache tier that was populated by pre-generation on abstract.wikipedia.org. The cross-wiki property is the particularly novel work in this milestone — it is the first time on WMF infrastructure that a client wiki's normal reader read path pulls rendered article content from a cache authored on a different wiki, and most of M1's risk comes from that fact rather than from the rendering work itself.

M1 exists as a distinct milestone — rather than being folded into M2 — for two reasons. First, it is the smallest possible unit of the pipeline that proves the M0 cache is usable from a wiki other than abstract.wikipedia.org, which is the single biggest integration risk in the whole epic; shipping it behind a special page means we can exercise the full cross-wiki read path on a real production wiki without touching any reader's expectation of what lives at a mainspace URL. Second, M1 is the rendering component that M2 will reuse rather than reimplement: when a sysop opts a topic in to mainspace, the request ultimately lands on the same rendering code M1 ships, just reached via a different URL and a different permissions check. Getting the cross-wiki rendering right in a contained surface before exposing it in mainspace is the only way to keep M2 tractable. M1 is therefore better read as a risk-reduction milestone than a product milestone: its acceptance criteria are shaped by "the cross-wiki path works and we have confidence in it", not by "a particular user outcome is achieved".

The milestone also introduces the new abstract-client-mode feature flag ($wgWikiLambdaEnableAbstractClientMode). Whether the new client-mode special page is built as a new class, as a mode branch inside the existing repo-side SpecialViewAbstract, or as some shared-base arrangement is deliberately left to the implementer to decide after reading both the existing class and the cross-wiki fetch path side by side; the planning doc does not pre-commit to a default because that decision is genuinely easier to make with the code in front of you than in the abstract.

Out of scope for M1, to prevent scope drift into M2: any mainspace surfacing of Abstract Content, any CommunityConfiguration schema for opt-in, any CirrusSearch integration, any external-indexing declarations. M1 is strictly the cross-wiki special-page read surface plus the infrastructure it needs to exist (feature flag, cross-wiki fetch path, Wikidata label lookup, banner, tab linking).

Event Timeline

please review my patchset and tell me if any changes are needed.