Count only kit-initiated policy-page translations as reach

The kit offers exactly ONE way to do this task — translating en:Wikipedia:Five pillars through Content Translation — so a policy page the kit never sent the user into is not kit reach however it came to exist. The tile did not enforce that: it counted the wiki's Five-pillars langlink target whenever its creator was ANY contributor of that wiki, with no anchor of any kind.

On production that credited a page created 2026-04-19... in 2023: rki.wikipedia's policy page predates the kit's existence by roughly three years, and counted because its author later became a kit user. The tile read 4 while this task's OWN verification ledger read 2 — the same subsystem answering "did the kit cause this?" two ways, which is what makes it a defect rather than a definition preference.

Both tile and drill-down now read task_verifications (task_key='translate-policy-page'), which exists only when the user opened the translation from a kit CTA and the creation was then verified as theirs — precisely "initiated from the kit". One page per wiki, so DISTINCT wiki_url, windowed on verified_at (the creating revision's own timestamp). The drill-down links created_title, the localized page the run produced; article_title is the constant English source (fixedTitle) and must never be linked.

Consequences handled:

  • policy-pages leaves ITEM_CONTRIBUTION_TILES. Its headline is no longer item-sourced, so leaving it there would let an orphaned mobile-tagged item row raise the mobile figure above a headline that no longer counts it — the same source-mismatch 502621cb fixed for main-pages. Accepted cost, documented at the constant: a policy page translated on a phone no longer raises the mobile figure, because the ledger records the revision id but no tags.
  • scanPolicyPages is retired, with its constants, its now-unused imports, and the file's last MediaWikiAPI use. It was the only writer of these item rows and nothing reads them now; leaving it would spend two API calls per unretired wiki per pass to maintain dead data. Existing rows are inert — no cleanup script needed.

Verified in production mode with a live admin list (11 checks, dev DB copy seeded with the real prod rows): the tile counts 2 not 4, both disqualified wikis disappear, the two ledger wikis remain, the drill-down links the localized title rather than the English source and dates on the creating revision, a mobile-tagged orphan item provably cannot raise the mobile figure, and mobile <= contributions holds at both a wide and a narrow window.

Prod effect: policy-pages 4 -> 2 (fon, mni — the two runs the T433617 backfill credited). No deploy coupling, no schema change, no backfill.

Bug: T433621 Co-Authored-By: Claude Fable 5

Merge request reports

Loading