Repository navigation
Fix(search,#23384): App-7-Wordle -- convergence kernel 3.13 et graines reproductibles - #23445
Conversation
…s reproductibles Convergence du carnet au canon kernel `python3` 3.13 (3.11.9 -> 3.13.3) avec re-execution papermill complete (63/63 cellules, 0 erreur, sorties committes). Les graines par mot utilisent `hash()`, salé par PYTHONHASHSEED : les sorties n'etaient pas reproductibles d'une execution a l'autre (meme sur le meme interpreteur). Remplace par `zlib.crc32(word.encode())` -- la cause, pas le symptome ; verifie par deux executions dans deux processus distincts. La prose quantitative est re-derivee par script depuis les nouvelles sorties (moyennes de tentatives, pire cas, pics d'histogramme, trace 297 -> 1) ; le pin de duree machine-dep est draine. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
…ergence kernel Re-audit firsthand : la derive porte sur le seul cote Python (blob C# inchange, 475098b cote main et cote branche) ; le contenu Python change par la convergence #23384 (kernel 3.13.3, graines crc32), deja decrite dans known_differences. Attestation 0011 avec --by explicite, --update en dernier. check_twin_parity --check --pair 'App-7 Wordle' -> OK=1 DRIFT=0. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Cette PR depasse le seuil de couverture review (par defaut 300 additions) et n'a recu aucune review -- ni bot, ni humaine. Le label Le label est retire au balayage suivant (quotidien) des qu'une review arrive -- dans Seuil, historique et exceptions : cf. |
… (collision avec #23321) Arbitrage ai-01 (DM msg-20261030T205903-ocr66p) : #23445 et #23321 creent tous deux app-7-wordle/0011 alors que main s'arrete a 0010. Entre deux PRs ouvertes, la premiere creee garde l'index (#23321, 29/10 17:06Z) ; la mienne prend le suivant libre. git mv pur, aucun contenu touche. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
[INFO] lane myia-po-2023:CoursIA — index twin renumeroté 0011 -> 0012 (arbitrage ai-01) Nouveau commit Le fait. La règle appliquée (arbitrage ai-01, DM Contrôle, exécuté tel quel après push : Vérifié avant le geste qu'aucun fichier du dépôt ne cite le nom de fichier renommé (grep sur Effet de bord annoncé : ce commit ré-arme le plancher DWELL de la PR. C'est un commit de 🤖 Generated with Claude Code |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Conflit unique sur scripts/notebook_tools/twin_pairs.d/app-7-wordle.yaml : les deux cotes ajoutaient une entree d'historique datee du 2026-10-30, celle du Python (crc32, PR #23445, cette branche) et celle du C# (FNV-1a, PR #23446, main). Ce ne sont pas deux versions d'un meme fait mais deux faits distincts : les deux entrees sont conservees, aucun cote n'est ecrase. YAML revalide apres resolution (1 paire, 7 known_differences, 0 marqueur). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Le merge de main a rendu la paire DRIFT sans qu'aucun carnet ne change : la semantique du registre est « derniere entree gagne », et l'entree 0013 (correctif C# de la PR #23446, arrivee par main) enregistrait le content_python_sha d'AVANT la PR #23445. Elle se retrouvait donc derniere, avec un SHA Python perime (5de14e34) face au contenu courant (e78e4a83). Une nouvelle entree 0014 datee du 2026-10-31 atteste la paire a la tete fusionnee : Python = e78e4a83 (travail audite de #23445), C# = a0c87d31, qui est bien le contenu de main -- il a change depuis mon 0012 (4c612549), donc renumeroter mon entree a la place aurait fabrique un DRIFT C# a la place du DRIFT Python. Mesure apres coup : rend [OK] App-7 Wordle, et rend rc=0. Part of #23384 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Etat de la PR a la tete atteste
|
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #22464
Tranche
Search/Part3-Cas-pratiquesdu census #23384 : convergence deApp-7-Wordleau canon kernelpython33.13, ré-exécution réelle, graines reproductibles (défaut de stochasticité réparé à la cause), prose quantitative re-dérivée par script depuis les sorties du run courant.Mesures
language_info.version: 3.11.9 → 3.13.3 (kernelpython3du siège,C:\Python313\python.exe).code[47]) : filtrage simple 3,19 tentatives (pire cas 6), CSP 3,23 (pire cas 6), entropie 2,86 (pire cas 5) — 100 % de réussite pour les trois.code[17]) : premier tirage 297 → 5 candidats (meilleur) à 297 → 48 (pire) ; les 5 mots de test sont gagnés en 3 à 5 tentatives (moyenne 3,6).Défaut de reproductibilité réparé (cause racine)
Les graines par mot étaient dérivées de
hash(word). Le salt dePYTHONHASHSEEDrendhash()non reproductible d'un processus à l'autre : deux exécutions du même carnet donnaient donc des sorties différentes. Lerandom.seed(42)global ne protégeait que les tirages globaux, pas les graines par mot.Correction :
random.seed(zlib.crc32(word.encode()) % 2**31)(3 cellules de code). Vérifié par deux exécutions dans deux processus distincts (PYTHONHASHSEED=12345) : valeurs structurelles identiques (moyennes 3,19 / 3,23 / 2,86 ; pire cas 6 / 6 / 5 ; 100 % de réussite). Seuls le découpage du fluxstdoutet les durées machine-dépendantes diffèrent — d'où le pin de durée drainé en prose, pas ré-épinglé.Diagnostic dérive
Cause (a) — environnement / kernel : le carnet était épinglé sur un kernel
python33.11.9, hors canon global #19181 (3.13). Cause réparée : la convergence 3.11.9 → 3.13.3 est le correctif.Cause (e) — stochasticité non reproductible : les sorties n'étaient pas reproductibles d'une exécution à l'autre (
hash()salé parPYTHONHASHSEED). Cause réparée à la racine : les graines par mot passent encrc32, stable entre processus (démonstration à deux processus ci-dessus).Verdict :
CAUSE_FIXEDpour les deux causes. AucunCAUSE_DOCUMENTED_ONLYrésiduel : le seul pin de durée machine-dépendant en prose a été drainé (retiré et non remplacé — précédent PR #9608), la prose ne porte plus aucune valeur de durée.Gardes locales (sur le diff committé)
check_kernel_drift.py origin/main --jsoncheck_prose_quantitative_claims.py --diff origin/main...HEADcheck_activity_leak.py --diff origin/main...HEADcheck_output_collapse.py origin/maincheck_source_collapse.py origin/mainNote de patch : la garde
check_kernel_driftne flagge pas le drift patch-only (3.13.3 → 3.13.15) ; le canon effectif de la garde est3.13, atteint ici. Le kernel du siège est 3.13.3 — le 3.13.15 du canon n'existe pas sur cette machine.Périmètre
4 fichiers :
MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-7-Wordle.ipynb(sources + sorties + prose),scripts/notebook_tools/twin_pairs.d/app-7-wordle.yaml(+1 entréeknown_differencesdocumentant la divergence de contenu Python et la parité sémantique inchangée),scripts/notebook_tools/twin_pairs.d/app-7-wordle/0012-2026-10-30-myia-po-2023-CoursIA.yaml(attestation de rebaseline du jumeau,--byexplicite,--updateexécuté en dernier ; créée sous l'index0011puis renommée0012pare4c4e52e6350— collision d'index avecmainrésolue en faveur demain, renommage annoncé en commentaire le 2026-10-30T21:23Z ;check_twin_parity.py --check --pair "App-7 Wordle"→OK=1 DRIFT=0) etscripts/notebook_tools/twin_pairs.d/app-7-wordle/0014-2026-10-31-myia-po-2023-CoursIA.yaml(re-attestation du 2026-10-31 à l'état courant de la paire — empreintespython_sha/csharp_shafichiers et contenu posées par la même lane, poste-renommage).Le jumeau C#
App-7b-Wordle-CSharp.ipynbn'est pas touché : parité sémantique conservée,bridge_verdict: SOTA-OKinchangé. Le défaut analogue côté C# (word.GetHashCode(), hachage randomisé par processus) est signalé séparément dans #23446 — le canon .NET est distinct de cette tranche, hors périmètre ici.Catalogue byte-identique à
main(aucun fichier de catalogue touché).See #23384
🤖 Generated with Claude Code