docs(i18n): #192 link_* coverage research track (own the URL gap) - #600
Conversation
Research/own the link_* URL coverage gap, per ai-01 deep-queue v2 dispatch 2026-06-25 (msg-…jp3hx2). Output = docs only, 0 write under Cards/ (release freeze), master stays bef3bc6. Key findings (measured read-only on bef3bc6): - link_<lang> cells are per-language Wikipedia article URLs (quasi-exclusively; link_{ru,pt,es,ar,zh,fa} = 100% wikipedia-<lang>). - The gap is NOT translation and NOT pure human research — it is cross-language article resolution, semi-automatable via the MediaWiki `langlinks` API (no key, rate-limited). Refines memory i18n-coverage-gap-is-link-urls ("human, not gpt-5.5" -> "API-resolvable + human-validated residue"). - Fillable-candidate upper bounds (have link_en, missing link_<lang>): Virtues 364 cells, Fallacies 8110 cells. These are CEILINGS, not guarantees — langlinks returns nothing when the target article doesn't exist (genuine Wikipedia content gap, out of our control). - Root cause of per-language variance: EN 95% (reference corpus), FR 45% (sub-families lack dedicated article), RU/PT/ES/AR/ZH/FA 6-9% (these Wikipedias have fewer articles for these specific fallacies). Proposed methodology (follow-up PR, post-release): resolve via langlinks for nodes with link_en, preserve curated non-Wikipedia links, human spot-validate residue (~5%, critical for AR/FA/ZH homonym risk), CSV safety QUOTE_MINIMAL+CRLF as #595. Authoritative sources: wikipedia-<lang> (primary, via langlinks), Wikidata sitelinks (more complete for rare terms), yourlogicalfallacyis (EN depth, already used), Stanford Encyclopedia of Philosophy (academic depth). Honesty: figures are upper bounds not guarantees; disambiguation/homonym risk for RTL/CJK; no overwrite of curated links; not in #192 LLM scope. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw]
Doc de recherche propre et bien bornée pour #192 (link_* URL coverage gap). Vérifié :
Release freeze respecté. Fichier unique docs/taxonomy/192-link-coverage-research.md (+132), 0 écriture sous Cards/, master reste bef3bc6c — l'auteur le réaffirme 2× (« 0 write under Cards/ », « no CSV write »). Proposition seulement, pas d'enrichissement applyé. Correct pour une fenêtre release-frozen.
Méthodologie et concept corrects. L'analyse de domaine identifie justement link_<lang> = l'article Wikipedia localisé par langue (dominance wikipedia-<lang> quasi-totale sur les cellules remplies, tail other-url/fallacy-site = exceptions curées). La racine du gap est bien diagnostiquée : gap de contenu Wikipedia cross-langue, ni bug de saisie ni tâche de traduction — ce qui explique cohéremment EN 95 % (corpus de référence) vs FR 45 % (sous-variantes sans article dédié) vs RU/PT/ES/AR/ZH/FA 6-9 % (Wikipedias moins denses sur ces fallacies).
La proposition technique est réelle. L'API MediaWiki langlinks (action=query&prop=langlinks) existe bien, ne nécessite pas de clé, est rate-limited — c'est le bon outil pour résoudre un article EN en équivalent <lang> quand il existe. Aucune fabrication. Et le caveat « 364/8110 = plafond, pas garantie » (langlinks ne retourne rien si l'article cible n'existe pas) est honnête : le résidu irréductible est un vrai gap de contenu qu'on ne peut pas combler.
Méta-aware. Raffine explicitement la mémoire existante i18n-coverage-gap-is-link-urls (« human research, not LLM » → corrigé en « ni LLM ni purement humain : lookup API + validation humaine du résidu »). Bonne traçabilité.
0 secret (doc avec URLs Wikipedia), 0 impact runtime (docs-only). Rien à signaler.
…#600 ceiling → decision-grade) Idle-fallback of dispatch v2 ("read-only measure to enrich the jsboige decision dossier; GLM = abundant budget"). Converts #600's theoretical ceiling (8110 Fallacies candidates) into a MEASURED number by probing every unique candidate article against the MediaWiki langlinks API. Method: only en.wikipedia.org/wiki/<Title> link_en URLs qualify as langlinks-resolvable (433 non-Wikipedia URLs excluded, preserved as-is). For each candidate article, langlinks returns the cross-language article when it exists; a missing cell is resolvable iff the article has a langlink to that language. Measured (full census, 0 errors, Fallacies 741 + Virtues 88 articles): - Fallacies: 2739 / 4823 candidate cells resolve = 57% (ru 46%, pt 53%, es 61%, ar 66%, fa 53%, zh 60%) - Virtues: 180 / 322 candidate cells resolve = 56% - Combined ~2919 confirmed resolvable; ~2770 realistically auto-fillable after ~5% human spot-validation attrition (AR/FA/ZH homonym risk). AR/ZH densest (60-66%) = highest fill-pass return; RU/PT/FA mid (44-53%). This supersedes the 8110 ceiling for prioritization: the gap is a genuine Wikipedia content gap for the missing 43% (no article / not Wikidata-linked, unfixable by us), not a data-entry or translation gap. New: docs/taxonomy/192-link-coverage-langlinks-probe.py (read-only, no API key, ~0.3s throttle, descriptive User-Agent — MediaWiki 403s the default urllib UA). Default = full census; pass N for strided sample, "0 virtues"/"0 fallacies" for one dataset. Doc: +sec 5.1 (measured tables), TL;DR pt 4 updated, sec 6 effort revised, sec 9 reproducibility references the probe. 0 write under Cards/ (release freeze). master stays bef3bc6. Docs only. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… byte-identical (#606) Re-run the full link_* langlinks census (741 Fallacies + 88 Virtues articles, probe `0 fallacies` then `0 virtues`) on master c20d5d2 — an independent confirmation of the §5.1 decision-grade figures measured 2026-06-25. Result: byte-identical. Fallacies 2739/4823 (57%), Virtues 180/322 (56%), combined ~2919, 0/829 errors, and the same link_en categorization (Fallacies 900/433/75, Virtues 185/9/29). Per-language rows match cell-for-cell. Adds a one-paragraph "Reproducibility — re-confirmed 2026-06-27" note under §5.1 stating the figures are stable and not a one-run artefact. The "named number replacing the 57% estimate" was already the measured value on master (dispatch was prepared 1 min before #600 merged §5.1 at 14:40); this PR's contribution is the second-run pin that makes it reproducibly-confirmed. Read-only. 0 write under Cards/. Dispatch ai-01 2026-06-27 tertiaire (#600 census link_* complet). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
…sal (#609) Grounds #141 in the CURRENT taxonomy state (issue text is ~2 years old; DatasetUpdater + translation PRs have moved the state considerably). Census finding (read-only script on ba8e4a6, reproducible like #600/#606): - Non-card nodes: Fallacies 1232, Virtues 110 (Scenarii/Rules out of scope). - TEXT enrichment (desc/example/title x 8 langs) = 100% on both datasets => original #141 scope item 3 (descriptions + examples + translations) is DONE. No text-enrichment gap to script. - The "GPT-4 enrichment script" = already adapted: modern DatasetUpdater (PR #210, OpenAI SDK v2.10.0, gpt-5.5). Not a rewrite. Reframes #141: the genuinely-open residue is the AIF cross-reference graph (crossLink_* 8 relationship cols + AIF_skos* 4 SKOS mappings). Schema is READY (columns exist), content ~0% on non-cards: - Fallacies: crossLink 0.2%, AIF_skos 0.5% (barely started) - Virtues: crossLink_Opposes + skosDirectRef/MappingType 100% via #498 pilots, but 7 OTHER crossLink verbs = 0% - ~16700 empty cross-ref cells where schema is waiting. Proposal: 4-stage method (ground -> gpt-5.5 candidate via /v1/responses effort=low -> drift-free sidecar dry-run -> expert/jsboige ratification gate -> OWL/2sxc export). NOT auto-write: AIF/Walton mappings are specialised (memory: "Anti-Fab Validator: Walton scheme = WARN"), and Cards/ is frozen pre-tag. "Adapt the script" = add a crossLink prompt + task config to DatasetUpdater, GATED post-release on jsboige GO + schema decision (single decimal_path vs structured {target,note}). Overlaps #498 (AIF scale-up pilots produced the few filled cells). Feeds dependencies #141 declares: #130 (OWL/SKOS) + #136 (2sxc). Scope: docs + read-only script only. 0 write Cards/, 0 AssetConverter code change (pre-tag safe). Base ba8e4a6. Relates to #130, #136, #498. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
…or, 0 Cards/) (#610) * docs(taxonomy): #141 non-card census + AIF cross-ref enrichment proposal Grounds #141 in the CURRENT taxonomy state (issue text is ~2 years old; DatasetUpdater + translation PRs have moved the state considerably). Census finding (read-only script on ba8e4a6, reproducible like #600/#606): - Non-card nodes: Fallacies 1232, Virtues 110 (Scenarii/Rules out of scope). - TEXT enrichment (desc/example/title x 8 langs) = 100% on both datasets => original #141 scope item 3 (descriptions + examples + translations) is DONE. No text-enrichment gap to script. - The "GPT-4 enrichment script" = already adapted: modern DatasetUpdater (PR #210, OpenAI SDK v2.10.0, gpt-5.5). Not a rewrite. Reframes #141: the genuinely-open residue is the AIF cross-reference graph (crossLink_* 8 relationship cols + AIF_skos* 4 SKOS mappings). Schema is READY (columns exist), content ~0% on non-cards: - Fallacies: crossLink 0.2%, AIF_skos 0.5% (barely started) - Virtues: crossLink_Opposes + skosDirectRef/MappingType 100% via #498 pilots, but 7 OTHER crossLink verbs = 0% - ~16700 empty cross-ref cells where schema is waiting. Proposal: 4-stage method (ground -> gpt-5.5 candidate via /v1/responses effort=low -> drift-free sidecar dry-run -> expert/jsboige ratification gate -> OWL/2sxc export). NOT auto-write: AIF/Walton mappings are specialised (memory: "Anti-Fab Validator: Walton scheme = WARN"), and Cards/ is frozen pre-tag. "Adapt the script" = add a crossLink prompt + task config to DatasetUpdater, GATED post-release on jsboige GO + schema decision (single decimal_path vs structured {target,note}). Overlaps #498 (AIF scale-up pilots produced the few filled cells). Feeds dependencies #141 declares: #130 (OWL/SKOS) + #136 (2sxc). Scope: docs + read-only script only. 0 write Cards/, 0 AssetConverter code change (pre-tag safe). Base ba8e4a6. Relates to #130, #136, #498. Co-Authored-By: Claude-Code <noreply@anthropic.com> * tools(i18n): link_* langlinks resolver (sidecar candidate-URL generator, 0 Cards/) SECONDAIRE of ai-01 deep-queue dispatch. Extends the #600/#606 coverage track from MEASUREMENT to RESOLUTION. The existing probe (docs/taxonomy/192-link-coverage-langlinks-probe.py) measures the resolvable ceiling (~2919 cells, 57%, #600 §5.1) but discards the target title (returns only lang codes). This tool captures the target-language title via the MediaWiki langlinks API and emits the candidate fill URLs as a sidecar report — step 1 of #600 §6 methodology. For every node with an en.wikipedia.org/wiki/<Title> link_en missing link_<lang>, queries langlinks, captures the target title, emits: dataset,key,link_lang,resolved_url to stdout or --out <path>. NEVER writes under Cards/. Verified on a strided sample of 10 fallacies: 0 errors, 37 candidate fills (~57% rate, consistent with the probe ceiling), URLs correctly URL-encoded (Cyrillic %D0, PT accented %C3). Sample also surfaced the homonym risk #600 §6.4 warns about (English "Engagement" for a fallacy node) -> confirms human spot-validation is non-optional for AR/FA/ZH. Safety: - 0 write Cards/ (sidecar only, pre-tag freeze). - Public MediaWiki API, no key, 0.3s throttle, descriptive UA (default urllib UA is 403-forbidden). - Resolves FROM link_en (Wikipedia only); 433 non-Wikipedia curated sources excluded + preserved as-is (#600 §6.2). Next (post-release, gated): follow-up PR consumes the sidecar -> apply candidate URLs cell-by-cell (drift-free QUOTE_MINIMAL+CRLF, method #595), skip non-empty cells, human spot-validate ~5% residue (AR/FA/ZH, ~150). Relates to #600, #606. Co-Authored-By: Claude-Code <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
… (0 errors, 0 Cards/) (#618) PRIMAIRE of ai-01 deep-queue #2 (dispatch msg-...92kynx). Produces the candidate-URL output behind the #600 §5.1 probe ceiling. Ran tools/link-langlinks-resolve.py (PR #610, merged) over full Fallacies + Virtues taxonomy: 829 articles probed -> 2934 candidate link_<lang> URLs (fallacies 2754, virtues 180), 0 errors. Materializes the ~57% probe ceiling (~2919 cells) into concrete reviewable URLs. Step 1 of #600 §6 methodology. Per-lang: ru 371, pt 430, es 513, ar 603, fa 480, zh 537. Resolves FROM link_en (Wikipedia only); 433 non-Wikipedia curated sources excluded + preserved (#600 §6.2). Quality verified: - URL encoding correct per script (Cyrillic %D0, Arabic %D8, Persian %D8, CJK %E8, PT/ES Latin unencoded). - Homonym scan (#600 §6.4) of 1620 AR/FA/ZH candidates: 0 real leaks. AR 0/603, FA 0/480 Latin-path; ZH 3/537 (0.6%) = legit loanwords/ acronyms (FUD x2, Creepypasta) — not errors. The "Engagement" homonym from PR #610 sample does NOT recur at scale (isolated case). - Asymmetry: virtues ru/pt = 4 each (sparse abstract-concept coverage) vs ar/fa/zh 46-56 — coverage reality, flagged for spot-validation. Sidecars (reviewable snapshot, UTF-8 no-BOM LF): - docs/taxonomy/600-link-resolve-fallacies.csv (2754 rows) - docs/taxonomy/600-link-resolve-virtues.csv (180 rows) schema: dataset,key,link_lang,resolved_url Robustness: try/except + continue (skip on network error, never abort) -> 0 errors/829. Public MediaWiki API, no key, 0.3s throttle, descriptive UA. Next (gated post-release): apply PR consumes sidecar -> cell-by-cell drift-free (QUOTE_MINIMAL+CRLF, method #595), skip non-empty, human spot-validate ~5% AR/FA/ZH residue (~150 cells), re-run probe to confirm gap closed. Scope: docs/taxonomy/ only. 0 write Cards/, 0 AssetConverter code change (pre-tag safe). Base 18b4d02. Relates to #600, #606, #610. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
…ue (0 Cards/) (#619) TERTIAIRE of ai-01 deep-queue supersede (msg-...370u0q). Read-only scoping of the #202 "bulk EN translation" backlog. Reframe (stale-dispatch pattern, like #609/#618): #202's Phase-2 bulk counts (Simple_name_en 1348 empty, political_example 1373 empty) are 2-year-old and contradict the live census. Census on master 18b4d02: - Fallacies core text (desc/example/text x8 langs) = 100% (census #609). - Only 6 _en columns total. EN > FR source on the bulk-secondary ones: nom_vulgarisé (FR=3%) vs Simple_name_en (EN=4%) -> 25 translatable exemple politique (FR=3%) vs political_example_en (EN=2%) -> 10 => EN cells were curated directly in English; FR SOURCE is ~97% empty. Cannot translate content never authored. - Genuinely FR->EN translatable residue = ~35 cells total (trivial). - Scenarii baratineur leak = 0/167 (Phase-2 resolved). Virtues i18n = 100% (#218/#236/#246/#290/#295). Rules PT fixed (#306). - Real i18n gap = link_* (lane #600/#618, DONE), not text. Recommendation: close or re-scope #202. The concrete residue is (a) FR source editorial authoring (lane #191, human, not translation), (b) a ~35-cell micro-pass, (c) link_*/AIF lanes already tracked. Do NOT launch a bulk EN run — no source to translate on secondary cols, core is 100%. Memory i18n-coverage-gap-is-link-urls honored (measure FR-relatively). Scope: docs/taxonomy/202-bulk-en-scoping.md only. 0 write Cards/, 0 AssetConverter code change (pre-tag safe). Base 18b4d02. Relates to #202, #191, #609, #600, #618. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
…free, gated post-release (#622) SECONDAIRE of ai-01 deep-queue supersede #3 (msg-...v95b6l): the apply harness for the #600 step "ratify -> apply" (§6), built from the #618 sidecar (2934 candidate link_<lang> URLs). Dry-run only — 0 write Cards/. What it delivers: - drift-free write path (#595: QUOTE_MINIMAL + quotechar " + CRLF + UTF-8 no-BOM), verified to match the on-disk dialect of both CSVs. - skip-non-empty — refuses to overwrite any filled link_<lang> cell. - spot-validation ~5% of the AR/FA/ZH residue (§6.4 homonym risk): 80 candidates inspected. Dry-run headline (master d0856aa): - cands=2934, would-apply=2934, skip-nonempty=0 -> zero clobber. - 0 orphan-PK, 0 col-missing, 0 duplicate-(key,lang), 0 homonym. - Both CSVs #595 drift-safe (Fallacies: 1409 records = 1409 CRLF + 144 intra-cell-LF benign; Virtues: 224 = 224 CRLF, 0 intra-cell-LF). - All 2754 fallacies URLs host-match their declared language (0 mismatch). - Spot-sample decoded correct: ar احتكام إلى الجهل (ignorance), zh 合成謬誤 (composition), zh 定錨效應 (anchoring) — no English leak. The --apply path is wired but NOT exercised (freeze forbids Cards/ write). Post-release: `python docs/taxonomy/600-link-apply.py --apply`. PK detection is case-insensitive (Fallacies='PK', Virtues='pk'). Scope: docs/taxonomy/600-link-apply.py + 600-link-apply-report.md only. 0 write Cards/, 0 AssetConverter code change. Base d0856aa. Relates to #600, #618, #595, #192. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
#192 —
link_*coverage research track (own the URL gap)Worker: po-2024 · Base:
bef3bc6c(release-frozen) · Dispatch: ai-01 deep-queue v2 (msg-…jp3hx2)Scope: research/docs only. 0 write under
Cards/(release freeze). master staysbef3bc6c.What this is
ai-01's v2 dispatch: own & research the
link_*URL coverage gap (non-LLM, non-owned). Turns "known but unowned gap" into a bounded methodology (API resolve → human validate residue) with measured scope — so jsboige can prioritize it relative to the WE release decisions.TL;DR
link_<lang>= per-language Wikipedia article URL (quasi-exclusively;link_{ru,pt,es,ar,zh,fa}= 100 %wikipedia-<lang>). It's the localized "learn more" link.langlinksAPI (no key, rate-limited). Refines memoryi18n-coverage-gap-is-link-urls("human, not gpt-5.5" → "API-resolvable + human-validated residue").link_en, missinglink_<lang>): Virtues 364, Fallacies 8110 — ceilings, not guarantees (langlinks returns nothing when the target article doesn't exist → genuine Wikipedia content gap).File
docs/taxonomy/192-link-coverage-research.md— measured state, pattern observed, root cause, langlinks-API insight, fillable upper bounds, fill methodology, authoritative sources (Wikipedia-<lang>via langlinks, Wikidata sitelinks,yourlogicalfallacyis, Stanford Encyclopedia of Philosophy), honesty/caveats, reproducibility.Honesty
link_en, missing target). Many return no langlink (article absent in target Wikipedia) → stay empty. Doc must not be read as "we can fill 8110 cells".yourlogicalfallacyis+other-urlEN entries are intentional — fill script must skip non-empty cells.bef3bc6c.Verified
Read-only on master
bef3bc6c(2026-06-25). Re-runnable:python docs/taxonomy/192-coverage-report.py. No prod code touched.🤖 Worker po-2024 · #192 link_* research track · docs only (release-safe) · awaits prioritization