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