Skip to content

docs(i18n): #192 link_* coverage research track (own the URL gap) - #600

Merged
jsboige merged 2 commits into
masterfrom
docs/192-link-coverage-research
Jun 27, 2026
Merged

docs(i18n): #192 link_* coverage research track (own the URL gap)#600
jsboige merged 2 commits into
masterfrom
docs/192-link-coverage-research

Conversation

@jsboige

@jsboige jsboige commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

#192link_* 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 stays bef3bc6c.

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

  1. 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.
  2. The gap is NOT translation, NOT pure human research — it's 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").
  3. Fillable-candidate upper bounds (have link_en, missing link_<lang>): Virtues 364, Fallacies 8110ceilings, not guarantees (langlinks returns nothing when the target article doesn't exist → genuine Wikipedia content gap).
  4. Root cause of per-lang 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).
  5. Proposal only — no CSV write. Follow-up PR (post-release) runs the langlinks script + human spot-validation.

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

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

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 clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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>
@jsboige
jsboige merged commit 32dd809 into master Jun 27, 2026
3 checks passed
@jsboige
jsboige deleted the docs/192-link-coverage-research branch June 27, 2026 12:37
jsboige added a commit that referenced this pull request Jun 28, 2026
… 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>
jsboige added a commit that referenced this pull request Jun 29, 2026
…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>
jsboige added a commit that referenced this pull request Jun 29, 2026
…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>
jsboige added a commit that referenced this pull request Jul 1, 2026
… (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>
jsboige added a commit that referenced this pull request Jul 1, 2026
…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>
jsboige added a commit that referenced this pull request Jul 1, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants