Repository navigation
Conversation
Base != main (advisory, #10918)Cette PR ne livre pas sur |
…testee (tranche 3, branche d'integration) (#15799) * Add: batterie d'intervention #15480 — la chaine etat -> comportement testee Tranche 3 (critere 3 de l'acceptance) : la chaine intervention -> changement d'etat -> changement comportemental SELECTIF est testee sur le banc synthetique Mess3xRRXOR, pas seulement racontee. Deux bras d'intervention (cibles en coordonnees, primitives du moteur causal deja sur main) : sae (features latentes dediees au facteur A) et flens (coordonnees belief du support du readout de A). Familles de controles du moteur : sham, aleatoire apparie en norme/frequence, intact. Axe de dose = prefixe du classement de selectivite. Verdicts par maillon (jamais de score omnibus) : la comparaison PRINCIPALE de chaque maillon est la selectivite A vs B ; l'effet vs sham est rapporte comme controle de manipulation, hors famille Holm (sa null est "aucun effet causal", pas de la selectivite) ; vs_random se joue sur la DIFFERENTIELLE de selectivite (A - B). Test exact de permutation a signes 2^n, vectorise par blocs (n=16 : 29,6 s -> 1,9 s), Holm sur les quatre tests substantifs. Paysage mesure (16 seeds, n=700) : 7/8 tests substantifs SUPPORTED apres Holm. L'unique INCONCLUSIVE est flens/comportement vs aleatoire apparie (mediane +0,007, 10/16) — finding honnete et documente : a d=12 l'espace produit porte A sur presque toutes les coordonnees, le controle apparie n'y est pas A-aveugle ; c'est la motivation du bras latent, ou la selectivite vs aleatoire tient sur les deux canaux. Ce null est gele dans les tests. Tests : 12 gates falsifiables (identite sham/intact prouvee par les empreintes, record = spec appliquee, chaines etat/comportement selectives >= 75 % des seeds, controle apparie (mecanisme + substantif), dose monotone, enum de verdicts + p_holm < 0.05, determinisme). 12/12 sous le venv local (py3.13) ET sous python 3.9.25 sans torch (forme de l'env CI). Floors ict-tests.yml : tests/ 1071 -> 1107 (drift main posterieur a l'epoch de la floor ; 1107 sur origin/main COMME sur la branche, mesure sous py3.9.25 sans torch — le venv local avec torch collecte 1111 a cause de tests/test_sae_traces_layout.py, importorskip module-level) ; ict/tests/ 708 -> 755 (+47 = les quatre couches de la branche). La mesure anterieure du 2026-09-12 annoncait 692 -> 739 : elle portait sur un main LOCAL PERIME, anterieur a l'arrivee de ict/tests/test_attention_schema.py (PR #15547) sur origin/main. La base etait fausse de 16 et le total avec elle ; le floor 739 aurait laisse 16 items disparaitre en silence. Re-mesure le 2026-09-13 sur l'arbre rebase, env CI reconstruit (py3.9.25 + numpy 1.26.4 + scipy + matplotlib, sans torch), verifie fidele a la CI : le job 103632939140 (main@5772d72dc7) porte "Collected: 692 tests (floor: 692)", identique a la mesure locale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix: #15799 floor ict/tests 763 -> 775 apres rebase sur main courant Re-mesure firsthand sur l'arbre rebase (origin/main@1ce6d47b, py3.9.25 sans torch, deux collectes identiques) : 775 = 763 (main porte des lors les tranches 1/2a/2b) + 12 items test_intervention_battery. Label 44 -> 45 package. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#15799): header ict-tests.yml aligne sur la re-mesure 858/52 Le matrix portait deja ict/tests/ (52 package) / test-floor 858 ; le bloc « conventions de compte » du header reclamait encore 806 items, un label 57/50 et "50 fichiers". Prose alinee sur l'etat mesure (provenance re-mesure 2026-09-16 ci-dessous), aucune valeur de floor modifiee. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: myia-po-2027 <po-2027@coursia.lan>
…ble (#16025) 4e surface de #15726 : un `PR gate` FAILURE par DWELL (plancher 120 min, aucun constituant en echec) est un MINUTEUR -- seul l'ecoulement du temps le leve. Le picker le comptait comme un rouge de lane : mesure fondatrice 2026-09-13 (lane po-2024), les PRs 15888/15895/15902 toutes vertes hors gate ont fait basculer le P0 « reparer ses propres PRs » par le seul seuil count, la lane brulant son cycle a chercher dans son diff un defaut qui n'y etait pas. Et faute de banniere d'organes, il etait en plus imprime « organe non lisible -- le rouge RESTE a la lane » : litteralement vrai, semantiquement faux (l'absence de banniere EST le signal). Le verdict DWELL vit dans l'ANNOTATION du check-run (scripts/ci/ merge_dwell.py), jamais dans sa conclusion ni son nom. La lecture rend desormais les DEUX axes : fetch_check_annotation -> (organes, echeance DWELL) ; un seul appel API par check-run, le meme qu'avant, cache pareil. - blocking_causes(dwell_by_name=...) : un verdict DWELL lu n'est pas une cause -- aucun geste de lane n'avance un minuteur. - red_backlog : PR DWELL-seule -> ni red, ni seuil count ; l'echeance est rendue (print_dwell_pending) pour que l'attente soit lisible. Un point de review non leve ou un constituant reel prime toujours (fail-closed). - impute_base_reds : un DWELL ne corrobore rien et n'est pas un illisible. Fail-closed a chaque etage : pas d'id de run, annotation illisible, ou banniere d'organes -> jamais de dispense. Une dispense de reparation ne s'acquiert pas par une panne de mesure. Controle sur donnees reelles : gate FAILURE courant de la PR 16018 (tete c2ad6bc, check-run 103776736518) -- organs=[], echeance DWELL exacte 2026-09-13T21:12:02Z, lue dans l'annotation, pas dans la conclusion. Tests : 126 passed sur test_pick_idle_grain.py (+6) ; 964 passed sur la grappe dependante (15 fichiers picker/perimeter/lane-claim/light-cap). Sequencement : le fichier est tenu par les PRs 15764/15778/15813 encore ouvertes -- diff porte par le titulaire du claim, ce que la note de l'issue sanctionne explicitement. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…rdue (#16281) * fix(guard,#16194): l'advisory BASE-NOT-MAIN nomme la couverture CI perdue L'advisory disait la CIBLE de livraison (« cette PR ne livre pas sur main ») et jamais ce que la base empilee a COUTE en couverture. Un reviewer attentif en a tire l'inverse sur #15940 : « le body declare la base empilee, ce n'est donc pas un defaut ». C'est la lecture correcte du texte d'alors ; le trou restait invisible la ou on le regarde. L'organe mesure desormais le manque et le nomme. Pour chaque workflow du depot : sa conjonction (filtre de branche cible, filtre de chemins) est-elle satisfaite pour `main` ET pas pour la base de la PR ? Si oui, il est perdu -- et il n'est compte que dans ce cas, pour ne pas annoncer au reviewer une perte qui n'en est pas une (c'est le point precis que #15751 documente : les deux fichiers matchent `paths: scripts/**` terme a terme, c'est `branches: [main]` qui a tout eteint). Arbitrage des trois pistes de l'issue : piste 2 retenue (faire dire la verite a l'advisory). Piste 1 (elargir le filtre de branche) rejetee : elle multiplie les runs sur les piles profondes pour un gain d'affichage. Piste 3 (gate de merge) rejetee ici : design plus lourd, et un gate qui refuse un check ABSENT merite sa propre issue. Mesure firsthand (arbre a 2699ebd) : - 162 fichiers workflow, 90 declarent un trigger `pull_request` ; - 80 d'entre eux portent `branches: ['main']` -> jamais declenches sur une base empilee ; 9 sans filtre de branche ; 1 `branches-ignore: ['main']`. - L'issue annonce « 80 des 148 ». Le NUMERATEUR reproduit exactement (80). Le DENOMINATEUR ne reproduit pas : 90 declarent `pull_request`, et le depot compte 162 fichiers workflow (chiffre corrobore independamment par `check_self_hosted_runner_policy.py`, qui imprime `workflows=162`). `148` ne correspond a aucune des deux populations mesurees. Verification end-to-end sur les DEUX PR empilees ouvertes a cet instant : - #16160 (base `feature/15666-t2-lean-exec-admission`) -> 7 workflows perdus nommes, dont `scripts-tests.yml` et `pr-gate.yml` ; - #16251 (base `feature/16057-focal-loss`) -> 28 perdus (12 nommes + repli). Corroboration sur #16160 : sa tete `e871e193e8` ne porte que 2 check-runs (`Always-on metadata guards`, `prose-counts`). `PR gate`, `Scripts Tests (CPU)` et `Always-on guards` sont ABSENTS -- exactement les workflows que la mesure annonce perdus. Controle avant/apres sur le COMPORTEMENT (meme scenario, instance fondatrice #15751) : la source d'origine ne porte aucune mesure (« l'advisory ne peut pas nommer les workflows perdus ») ; la source corrigee en nomme 5. Source restauree byte-identique apres le controle (sha256 db427a337876fb4b...). Robustesse : `gh pr view --json files` rend la premiere page (100 max) sans dire qu'il a coupe ; sous-compter les fichiers sous-compterait la couverture perdue, soit un silence qui relache -- le defaut meme que cette issue mesure. `fetch_changed_files` pagine donc via l'API REST quand `changedFiles` depasse ce qui a ete rendu. `build_comment` reste retro-compatible (4e argument par defaut) : le corps sans mesure est byte-identique a l'ancien, donc l'appel a 3 arguments est intact. Signale, non repare (autre sujet, aucune PR ni issue ouverte a ma connaissance) : un workflow porte `branches-ignore: ['main']` -- defaut miroir, il ne tourne jamais pour une PR visant `main`. Tests : 37 passed (`test_base_not_main.py` 15 dont 13 nouveaux + le lock test de l'umbrella + `test_variation_tag_required.py`), `check_self_hosted_runner_policy` vert, YAML de l'umbrella reparsee. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(guard,#16194): les enonces de contrat de l'organe disent ce que l'organe fait La PR #16281 a change le contrat de l'organe -- il lit desormais `.github/workflows` du checkout pour mesurer la couverture CI perdue sur une base empilee -- mais trois enonces du depot affirmaient encore l'ancien, et un quatrieme propageait un chiffre que ce meme body rejette. - `scripts/tests/test_base_not_main_no_paths_filter.py`, docstring : « reads PR-level metadata via the gh API ONLY [...] and never inspects the working tree ». Les deux moities sont fausses depuis #16194 -- l'organe lit aussi `files`/`changedFiles` et l'arbre de travail. - meme fichier, message d'assertion de `test_no_paths_filter_under_pull_request` : « Organ reads PR METADATA only via gh api (baseRefName, title) ». - `scripts/base_not_main.py`, commentaire de tete de la section : « 80 des 148 workflows du depot ». C'est le DENOMINATEUR de l'issue, que le body de #16281 ecarte explicitement (le numerateur reproduit, le denominateur non : 80 des 90 declarants, dans un depot de 162 fichiers). Un lecteur du source apprenait donc exactement le chiffre que le body refusait de propager. - `_glob_to_regex` : le sous-ensemble traduit est desormais nomme, avec ce qui n'est PAS traduit (`+`, `[...]`, `!` initial). Verifie firsthand : aucun des 162 workflows du depot ne les emploie dans `paths`/`branches`. La semantique exacte du `?` GitHub n'a pas ete verifiee firsthand ; elle est signalee comme non verifiee plutot que supposee. Aucun changement de comportement : docstrings, un message d'assertion et deux commentaires. Les 18 tests des deux suites concernees sont inchanges et verts. Tests : 37 passed (`test_base_not_main.py` 15, son lock test 3, `test_variation_tag_required.py` 19). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(guard,#16194): le repli pagine de fetch_changed_files etait mort -- `--slurp` refuse `--jq` Le repli ecrit dans 30f8237 passait `--paginate --slurp` ET `--jq` a la MEME commande. gh refuse ce couplage (verifie sur 2.81.0 : « the --slurp option is not supported with --jq or --template ») : l'appel sortait en erreur, `_gh_json` rendait None, et la fonction repartait sur la PREMIERE PAGE TRONQUEE. Le repli n'a donc jamais pu reparer la troncature qu'il annoncait reparer -- le silence qui relache, soit exactement le defaut que ce module mesure. `--slurp` rend un tableau de PAGES (un tableau par page) ; l'aplatissement se fait desormais dans le code, sur `filename` (champ de l'API REST ; le `files` de GraphQL nomme le meme champ `path`). Un repli qui rendrait moins que la premiere page est refuse : il doit ameliorer la mesure, pas la degrader. Controle AVANT/APRES sur le COMPORTEMENT, pas sur les sources (meme fixture : PR de 3 fichiers servie en 2 pages, gh refusant `--jq`) : AVANT -> ['a.py'] SOUS-COMPTE APRES -> ['a.py', 'b.py', 'c.py'] OK La branche n'etait mesuree par AUCUN test : elle ne s'arme que sur les PRs de plus de 100 fichiers, qu'aucune des 200 dernieres n'atteint. Trois tests la tiennent desormais -- aplatissement + absence de `--jq` dans la commande, non-degradation, et aucun appel supplementaire quand la premiere page suffit. Tests : 40 passed (`test_base_not_main.py` 18, son lock test 3, `test_variation_tag_required.py` 19). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(guard,#16194): base_not_main fail-closed quand l'acquisition gh pr view rend vide (CR #16281) Une sortie stdout vide ou un JSON illisible sur `gh pr view` rendait un `or {}` : fetch_changed_files publiait files=0 (faux `ci_skipped=0` -- un silence qui relache, le defaut meme que #16194 mesure), et main() lisait base='' puis imprimait "pas un defaut, rien a faire" comme si la PR visait main. Les deux points rendent desormais None -> rc 2 avec verdict UNMEASURED refuse, tests de regression None ajoutes (24 passes). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…16058) (#16312) * Add: notebook TV-02 MoE SOTA OLMoE routing reel (bloc B item 6, See #16058) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix: TV-02 cell0 lien 3.4c delie - le notebook cible n'existe que sur la PR #16152 (ouverte), le lien etait mort sur toute branche sans elle Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…e Consensus (R11 companion) (#16899) * docs(safety,#16757): audit du cluster selon les 10 principes du Singapore Consensus Grille P1-P10 du companion report R11 (arXiv 2608.14611, sha8 134E9DA8) confrontee au harnais reel : etats RENFORCE/PARTIEL ancre sur regles, incidents documentes et pratiques vecues (preflight/DWELL/#16846 du jour). P6 en profondeur (cascades sorry/collisions/catalogue), P7 en profondeur (protocole anti-condensation), lecture critique inverse dans les deux sens, recommandations bornees par la gouvernance l.87. +1 ligne index docs/README. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(safety,#16899): align the 3 harness claims with the current rules Claim 1 -- force-push: the audit propagated the old global interdit; git-workflow.md 31-41 forbids it on main but allows --force-with-lease (preferred, merge first when possible) on a single-lane PR branch (lines 35, 99, 128, 153). Claim 2 -- "3 PRs en flight" is a NEW proposal (G.5 caps deep tracks at 2, proactive-coordination.md requires 2 tracks min; nothing caps PRs in flight), submitted for sign-off, not a G.5 implication (line 185). Claim 3 -- workers-do-not-merge is an operational authority bound (CLAUDE.md section A / coordinator-discipline.md), not a permissions measurement of their accounts (line 35). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…e tierce, et un dossier suivi de sa prose (#16907) * harness(gate,#16906): la prevalidation Phase 4 accepte une lane TIERCE qualifiante Le gate n'acceptait un dossier que de `ADJOINT_LANE` code en dur. Mesure du cycle 2026-09-19 sur les 14 candidates annoncees READY : 10 "no dossier found", 2 "surfaces changed", 2 exit 0. Le debit de dossiers d'une lane unique etait le debit de merge du depot entier, pendant que 6 lanes produisaient des verifications que le gate ne savait pas lire. Ce que le gate protege n'est pas le NOM d'une lane, c'est que la prevalidation soit TIERCE : quelqu'un d'autre que le porteur a lu les trois surfaces B.0 a head exact et l'a atteste dans un contrat machine-lisible. - `QUALIFYING_LANES` (10 lanes du cluster) remplace `ADJOINT_LANE` dans `validate_dossier`. Une lane inconnue ou malformee echoue toujours ferme. - Refus de l'auto-prevalidation : `carrying_lane()` lit le tag `Grain: ... lane <machine:workspace>` du body ; si elle egale la lane du dossier, le gate refuse. Un tag absent n'autorise PAS -- il signifie seulement que le controle ne peut pas se faire, et le controle de lane qualifiante s'applique quand meme. - `render_template(snapshot, lane)` + option `--lane` : une lane rend son PROPRE nom. Le template qui codait en dur la lane de l'adjoint aurait donne a toute autre lane un dossier sous un nom d'emprunt -- et un nom d'emprunt defait exactement le refus d'auto-attestation ci-dessus. - SKILL.md coordinate mis en coherence (le texte disait l'inverse du code). Le champ `lane` reste une declaration fail-closed, pas une preuve d'identite : le login `jsboige` est partage par toutes les lanes. Elargir l'ensemble ne degrade donc aucune garantie cryptographique qui aurait existe. Tests : 27 passed (5 nouveaux sur les lanes, 2 sur le rendu du template). `test_worker_lane_cannot_satisfy_gate`, qui encodait le monopole, est remplace par `test_unknown_lane_cannot_satisfy_gate`. Gate non regresse sur PRs live (#16218, #16802 : rc=1 sur motifs de fond). Changement normatif substantiel du harnais (CLAUDE.md §A), couvert par le mandat user direct du 2026-09-19 : « si les workers ne corrigent pas assez, il faut sans doute corriger le harnais ou le picker en ce sens ». See #16906 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * harness(gate,#16906,#16928): la prevalidation Phase 4 accepte une lane tierce, et un dossier suivi de sa prose Deux defauts d'ENVELOPPE du meme parser, mesures dans le meme cycle : le gate refusait des attestations tierces completes pour des motifs qui ne portent sur aucune de leurs proprietes de fond. 1. Lane unique (#16906). `ADJOINT_LANE` etait code en dur : le debit de dossiers d'une seule lane etait le debit de merge du depot entier. `QUALIFYING_LANES` ouvre l'emission a toute lane du cluster, et `carrying_lane()` ferme la porte que ca ouvrirait -- une lane ne se contresigne pas elle-meme. 2. Prose apres le marqueur (#16928). `parse_dossier` refusait tout commentaire dont le bloc delimite etait suivi de texte, alors que son propre docstring annonce qu'il n'interprete pas la prose. Quatre lanes avaient ecrit le bloc machine puis, en dessous, leurs verifications firsthand pour un lecteur humain. Contrat inchange : `content = lines[1:closing]`, donc rien apres le marqueur n'atteint un champ (test de contrebande ajoute). Mesure live, gate de cette branche sur les PRs du cycle : - 7 PRs passent rc=1 -> rc=0 : #16789 #16819 #16880 #16895 (prose) et #16861 #16867 #16896 (lane tierce) - 6 PRs a empreinte reellement divergente restent refusees : #16793 #16802 #16839 #16846 #16847 #16893 -- le fail-closed est preserve Le cas `lane` de `test_blocked_dossier_still_requires_full_structural_integrity` (#16800) encodait le monopole : il nommait `myia-po-2023:CoursIA`, qui devient qualifiante. Re-pointe sur une lane hors `QUALIFYING_LANES`, intention preservee. See #16906. See #16928. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * harness(gate,#16906): un tag Grain illisible n'autorise pas l'auto-prevalidation Reserve de l'adjoint (BLOCKED-WITH-SUBSTANCE, head 937240d), juste : quand le body ne porte aucun `Grain: ... lane ...` lisible, `carrier is None` et aucune erreur n'etait ajoutee. Une lane qualifiante portant une PR sans tag pouvait donc deposer son propre dossier et passer un controle qui n'avait jamais tourne. `carrier is None` devient un refus explicite. Un controle qui ne PEUT pas se faire n'est pas un controle qui passe. Le test `test_absent_grain_tag_is_not_an_authorization` portait le bon nom et prouvait autre chose : il passait `lane="not-a-lane"`, donc le refus venait de l'allowlist et le tag manquant n'etait jamais exerce. Il passe desormais une lane QUALIFIANTE, et asserte en plus que l'allowlist n'est PAS le motif -- sinon il se remettrait silencieusement a certifier le mauvais scenario. La fixture `_base_snapshot` recoit une lane porteuse distincte de celle du dossier : sans tag, tous les cas nominaux etaient des auto-attestations. Rayon d'impact mesure le 2026-09-20 : 4 PRs ouvertes sur 221 (1,8 %) ne portent pas de tag lisible, et la sortie est d'ajouter le tag, pas d'affaiblir le gate. 44 tests passent. See #16906. See #16928. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…0 = socle from-scratch explicitee (#16622) - Parcours recommande restructure : FT-01 point d'entree (demande user sur #16147 : « le 1 doit venir avant »), bloc socle from-scratch distinct - Table progression scindee parcours principal / socle 00a-00c - Note de numerotation honnete : FT-00x = exception locale (ailleurs dans le depot 00 = environnement), renumerotage eventuel trace par #16231 - Rule E : FT-00c (existant sur disque depuis #16072) ajoute a la structure, la table de progression et la table VRAM — stale avant cette PR - Aucun fichier renomme (references entrantes 3.9a + intra-serie intactes), marqueur CATALOG-STATUS byte-identique Closes #16151 Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…uee + 2.7c, mermaid corrige (#16854) Audit fichier-entier (regle E) : 27 notebooks sur disque, 24 liens dans la table. Ajoute 2.11c/2.11d/2.7c (table + prose mesuree + mermaid + references), deplace 2.11b dans sa famille, remplace le libelle faux "2.7c proximal" du mermaid. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Dossier READY — la PR est propre sur la classe morphologique qui bloque ses sœurs de vague. Vérifié firsthand au head exact d024ed1 (19:00-19:10Z) :
Aucune réserve. B.0 clear. — adjoint preflight, lane myia-po-2026:CoursIA (tierce) |
…the full-tree checkout (#16209) * fix(ci,#16207): restore PR-time markdown table scan without its cost pull_request trigger (paths-filtered) is back on markdown-table-guard.yml; the 2.22 Go full-tree checkout that killed it (#12817 tranche 1) is replaced by a blob:none partial clone + dynamic `git sparse-checkout add --no-cone` of the changed files only. Founding incident #16177: CODE_SPAN_PIPE merged with no review-time signal. Arbitrage consigne: re-housing in always-on-guards rejected (blast radius on the critical path). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): label description must fit the 100-char API limit ensure_label's 422 (description too long) was swallowed by 2>/dev/null, so the markdown-table-syntax label never existed and set_label failed with "not found" on the very first PR-time run. Shortened description, stderr no longer buried. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): CR 12:35Z -- lossless scan paths (NUL-safe argv), no false "Clean." on scanner failure, whitespace-filename positive control Repond aux 3 exigences de la CR ai-01 2026-09-16 12:35Z sur #16209 : 1. Passage lossless des chemins : git diff -z + grep -z + mapfile -d '' (argv octets-exacts). L'ancien "$(cat changed.txt)" splitait chaque nom a espaces du depot ('Créateur de mail personnalisé.ipynb', 'Conférence Tech 2025', 'Correction Activités GenAI.md', ...) en argv orphelins -> le scanner rendait exit 2 ("rien a scanner") -> payload vide -> faux "Clean." + retrait du label. Reproduit localement (exit 2, payload 0 octet, TOTAL=0). 2. Payload manquant/invalide != 0 : RC explicite du scanner + garde sur le parse (case numerique). Sur panne de mesure : ::error:: + label LAISSE EN PLACE (jamais d'unset sur un etat non mesure). 3. Controle positif live : fichier "$RUNNER_TEMP/md-table controle.md" (NO_SEP) scanne a chaque run -- un split whitespace le casserait en 2 argv -> exit 2 -> controle rouge. Ne nourrit pas le label (scan separe) : il gate la fiabilite de la mesure. Coordonne avec #16266 : hunks disjoints (leur ligne de description du label est deja satisfaite sur ce head). Coordonne avec #16266 (markdown-table-guard.yml partage); verifie par lecture des 2 diffs: aucun overlap textuel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ci,#16207): positive control runs on EVERY run (not only when the PR has in-scope files) Le controle positif d'abord sautait par l'early-exit COUNT==0 : sur une PR workflow-only (le cas de la PR elle-meme) il ne s'executait jamais -> la preuve live n'existait qu'en smoke local. Deplace en amont de l'early-exit, il tourne a chaque run (PR-time ET nocturne) : preuve permanente du passage argv lossless sur l'infra reelle. Drapeau SCAN_RC porte la panne de mesure (controle ou scan reel ou parse non numerique) jusqu'a la decision de label ; l'early-exit COUNT==0 est lui-meme fail-closed (unset conditionne a SCAN_RC==0). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
… hommages 2026 (#16218) * docs(search,sudoku): rewrites 8 notebook credits to match 2026 hommage pattern Refs #16214. Replaces the minimalist "### Source" sections in 8 notebooks that adapted student projects from EPITA PPC 2024/2025/2026 and ECE 2026 with a full "## Hommage a un travail etudiant" section, aligned to the 2026 hommage pattern established by PR #13323 and reused in App-22, App-26. For each notebook: authors with GitHub handles, URL to tree/main/<sub-project>, commit SHA, licence (MIT verified or "non specifiee -- utilisee avec attribution" per user confirmation 2026-09-15), plus an explicit "ce notebook distille..." sentence that places the student work in a wider pedagogical frame (Munkres-style hommage gesture, cf. user 2026-09-15 note). The credit "jsboigeEpita/2025-PPC" (404 GitHub) was replaced everywhere with the actual repo "jsboigeEpita/2025-Epita-Programmation-par-Contraintes". Only markdown cells touched -- code cells and execution_count preserved on all 174 code cells. nbformat 4.5 intact, kernelspec python3 intact. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(#16218): corrige liens profils GitHub translitteres + registre twin DRIFT 21 remplacements URL dans les cellules markdown d'Hommage de 8 notebooks Python (App-3, App-4, App-6, App-7, App-11, App-14, App-19, Sudoku-16) : chaque lien `prenom.nom` (404 verifie) est remplace par le login reel `.author.login` du commit EPITA source (ex. `leo.lopes` -> `Lazyyx`, `gabriel.monteillard` -> `CornFlexxxxxxx`, `yahya.ahachim` -> `qghrjf646`, `timothe-le-bronec` -> `thorgal27`). 4 logins non resolubles (404, ANON, Organization) : nom garde en gras, lien retire. 7 paires DRIFT Python/C# attestees via `check_twin_parity.py --update --pair` avec entree `known_differences` factuelle par paire. Cellules code intactes, le twin C# n'est pas touche. Resolution de la reserve NanoClaw #16218 + CONTRIBUTING attestation. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(twin-parity,#16218): rebaseline 7 paires DRIFT (App-3/4/6/7/11/14/19) Suite au re-ecriture des credits (#16218, commits 9b84dd3 + 2d1c9e7), les paires App-3/4/6/7/11/14/19 passent en DRIFT cote Python uniquement : la prose d'index a ete re-ecrite pour matcher le patron 2026 hommage, le SHA Python bouge ; le cote C# reste inchange (credits differents par construction, asymetrie documentee). Le rebaseline atteste la nouvelle parite pedagogique (meme socle theorique, prose d'index distincte) ; les twin_pairs.d/<slug>/*.yaml ajoutes (file-per-audit #14911) suivent le pattern append-only avec index sequentiel + by: lane. 7 paires traitees dans cette passe : - App-3 NurseScheduling (Search/Applications/CSP) - App-4 JobShopScheduling (Search/Applications/CSP) - App-6 Minesweeper (Search/Applications/CSP) - App-7 Wordle (Search/Applications/CSP) - App-11 Picross (Search/Applications/CSP) - App-14 ConnectFour Adversarial (Search/Applications/CSP) - App-19 ProceduralGeneration WFC (Search/Applications/PCG) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(docs,#16218): rebuild 3 hommages avec verite upstream (.author.login + LICENSE) Grain: MED/notebook-python -- lane myia-po-2027:CoursIA-2 -- prev: MED/notebook-python #16180 Trois CHANGES_REQUESTED ai-01 sur PR #16218 (head 3ca9976) adresses : 1. Sudoku-16 : Gautier Gally=Bl44nc (verifie), Virgile=Zar-meyo (Virgile Hermant verifie), ReoZ=Paul-abi (Paul Abi Saad, distinct de Virgile upstream), Matis=VyrtualL, Theophile=theophilestourbe, BinaryAlien=Binary, Florine=floflokie (Florine Kieraga), Nael=Naelja02 (Nael El Janati), Akaagi, Clovis=ClovisDyArx (Clovis Lechien), Alex=TopAgrume, FlorianSegard, Gaspard-s=Gaspard Saliou. Les liens fabriques par translitt. "gautiergally"/"virgile" corriges. La fusion Virgile+ReoZ en "Virgile Reoz" corrigee (deux comptes distincts upstream). Florian sans login verifie conserve en mention sans lien. 2. App-14 : Leo Sambrook=petitwhito (auteur PR #39), Arthur Hamard=reg1um (Connect4 board/Minimax/Notebook/DQN), Arthur Guelennoc=AntitheticalElysium (Negamax/MonteCarlo). Licence non specifiee -> MIT (Copyright (c) 2025 jsboigeEpita, verifie firsthand via raw.githubusercontent.com/.../LICENSE). 3. App-19 : Timothe Le Bronec=thorgal27 (commit 08dfe96 etudiant + cherry-pick 621f1cc jsboigeEpita), licence heritee du repo parent MIT (verifie 2026-09-17, pas de LICENSE locale). Methodologie : gh api users/<login> pour resolution nom reel ; gh api repos/<repo>/commits pour auteur et SHA ; gh api repos/<repo>/pulls/<N>/commits pour liste complete des contributeurs du sous-projet. Tous les identifiants consignes ici sont verifies firsthand au worktree courant. Cellules code preservees (22 code cells Sudoku-16 / 18 App-14 / 16 App-19), execution_count intact. Pre-commit hook H.3 et #13326 PASSED, fix newline final applique automatiquement. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(twin-parity,#16218): rebaseline App-14/App-19 post hommages rebuild c.1217 DRIFT_INTRODUCED par commit eb277ce (rebuild hommages upstream-first) : - App-14 ConnectFour Adversarial : Python content_sha 26c0580a -> bba8c2fd (C# intact) - App-19 ProceduralGeneration WFC : Python content_sha 9329db42 -> 8bb14d89 (C# intact) Cause : ré-écriture de la cellule 1 markdown (hommage upstream-first) qui déplace le content SHA twin parity (#8057). Pas un strip outillé, le contenu calculé reste byte-identique (22+18+16 cellules code préservées). Méthodologie Tell c.1217 stricte : update en DERNIER (cf #8957 anti-invalidation attestation après strip). Tell c.10332 pas applicable : pas de hand-edit translation-owned ici. Grain: MED/notebook-python -- lane myia-po-2027:CoursIA-2 -- prev: MED/notebook-python #16218 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(twin-parity,#16218): rename 0011-09-15 -> 0010-09-15 to dedupe twin audit prefix Grain: LIGHT/guard -- lane myia-po-2027:CoursIA-2 -- prev: MED/notebook-python #16218 Scripts Tests (CPU) FAILURE on PR #16218 head 0e4decb: AssertionError: prefixe NNNN duplique dans une paire (l'index est la cle de sort du journal, #14911/#15345) : ['app-14-connectfour-adversarial: 0011-2026-09-15-...yaml et 0011-2026-09-17-...yaml'] Cause : commit 6bf3e43 (c.609 'fix(twin-parity,#16218): rebaseline 7 paires DRIFT') a cree 0011-2026-09-15 sans verifier que 0011 etait deja pris (le test test_audit_index_unique_and_no_identical_duplicates_per_pair #15345 a ete renforce posterieurement). Commit 8bea9df (c.611) a ensuite cree 0011-2026-09-17 sans deduger non plus. Fix : renommer 0011-09-15 -> 0010-09-15 (prefixe 0010 libre). Git mv preserve le blob SHA, le journal reste coherent. Le 09-17 reste en 0011 comme audit le plus recent du rebaseline c.611 (content_python_sha bba8c2fd = source post-hommages-2026). Test verifie local : pytest scripts/notebook_tools/tests/test_twin_registry_integrity.py -> 46 passed, 0 failed. Le doublon est dedupe, aucun test casse. Tell c.564 strict (lane-repairable, fix poste) · c.566 strict (no gh run rerun) · c.1180 strict (commit sur worktree dedie). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * ci: trigger No notebook plan loss re-evaluation after marker correction c.641 - Apostrophe droite ASCII corrigée ligne 51 marker App-14 'objectifs d apprentissage' -> 'objectifs d'apprentissage' - Validation locale via detect_notebook_plan_loss.py: 5 LOST_SECTION -> 5 JUSTIFIED_BY_BODY - Pas de modification de code, juste re-trigger du job plan-loss après amend body PR * fix(16218): restaurer les cellules intro ecrasees par les hommages -- plan-loss Le garde 'No notebook plan loss' rougissait sur 3 notebooks : la cellule d'intro pedagogique (titre # + navigation + objectifs + prerequis + duree, et Architecture/Contexte pour App-19/Sudoku-16) avait ete REMPLACEE par la cellule hommage au lieu de lui etre ajoutee. Restauration : cellule intro de la base reinserdee telle quelle avant l'hommage (chirurgie raw, CRLF preserve au worktree, 128 insertions pures, 0 suppression). Validation post-fix : detect_notebook_plan_loss.py --check --base origin/main rc=0 sur les 3 notebooks (STRUCTURE_DRIFT informatif attendu : +1 cellule markdown). Code cells 16/18/22 inchangees, outputs et execution_count intacts (preuve zip-compare par script). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(16218): attest twin parity (2 paires) + re-indexer entree arXiv 2102.09544 (51->52) apres restauration intro L'insertion des cellules intro deplaçait les blob SHA des jumeaux Python et decalait la cellule citation Cappart de Sudoku-16. Rebaseline des 2 paires (note known_differences), cell_index registre arXiv corrige depuis le diff reel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: myia-po-2027 <po-2027@coursia.lan> Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…tente (roo-extensions#3677) (#16325) Convergence inverse roo-ext -> CoursIA (Epic roo-extensions#3111 candidat n°5, GO user 15/09). Portage du registre open-questions roo-ext (roo-extensions#3656/#3657) augmente de la liste re-parcourue par cycle : les escalades coord -> user ne meurent plus a la condensation du dashboard. Non-but respecte : l'auto-arbitrage coordinateur reste la norme (Regle 5.3). - coordinator-discipline.md : Regle 7 (3 invariants + test de fin de cycle R2 etendu) + renvoi sortant depuis la Regle 2 - secrets-and-coord-detail.md : §2.7 (preuve mesuree passe 3, format d'entree, frontiere exacte, verification N cycles) - .gitignore : .claude/local/ (registre machine-local ai-01) - claude-code-config.md : inventaire R1-R5 -> R1-R7 (drift preexistant R6 corrige) See roo-extensions#3677 Co-authored-by: Claude-Code <noreply@anthropic.com>
…es pour _has_strong_scope (#15950) (#16630) Issue #15950: l'extracteur testait en sous-chaine la ou le teste en mot autonome. Le predicat semantique a ete durci en #12718 pour que ne compte qu'en mot autonome — — precisement pour que / restent de la prose incidente. L'extracteur a ete corrige en #15873 (commit 815b3ce). Ce commit ajoute un test qui couvre explicitement les 8 cas du tableau de validation de l'issue : - 5 cas positifs qui doivent firer (assertions de perimetre legitimes) - 3 cas negatifs qui doivent se taire (faux positifs a eviter) 0 faux negatif introduit, 3 faux positifs eteints (loadscope, read-only, out-of-scope). See #15950, #15833, #15846, #12718, #11800. Generated by Mistral Vibe. Co-authored-by: Mistral Vibe <vibe@mistral.ai>
…ve reproductible (#16803) Trio deterministe a la cellule seed (CUBLAS_WORKSPACE_CONFIG avant import torch, cudnn.deterministic/benchmark, use_deterministic_algorithms warn_only) + prose veridique. Re-exec complete sur le kernel documente (coursia-ml-training, GPU) : 72/72 cellules, 0 erreur. Preuve falsification : 2e execution GPU → metriques bit-identiques (RMSE 0.302835 / 1.408279). DLinear cross-device stable ; TimeMixer derive avec le changement de device CPU→GPU (1.3667→1.9832), prose resynchronisee sur les sorties mesurees (12 remplacements, 0 residu, assert). Repare aussi la desynchro preexistante prose/outputs (1.9128/54.24 cites vs 1.3667/55.72 commits). Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…U locale + resync narrative (#16811) Cellule 7 (site du seed 42) : CUBLAS_WORKSPACE_CONFIG avant import torch, puis cudnn.deterministic=True / benchmark=False / use_deterministic_algorithms(True, warn_only=True). Re-execution complete kernel coursia-ml-training (RTX 3080 Ti, 16/16 cellules, 0 erreur). Ancienne execution = stack etrangere PyTorch 2.11.0+cu128 ; le run PPO derive completement : meilleur Sharpe +0.645 -> +1.191 (step 25,600), backtest OOS +57.24% / 16.38% annuel / Sharpe 1.191 / MaxDD -15.23% / win rate 43.09%, distribution d'actions inversee (94% Buy -> 99.5% Hold). Prose resynchronisee : 24 remplacements scriptes dont reecriture honnete de la cellule verdict (la comparaison DQN/PPO s'inverse : PPO devant partout — la lecon "seed unique != verdict" survit, magnitudes recalculees 0.97 interne vs 0.53 inter-algorithmes). Ancres DQN Py-32 (0.657/22.94/31.3) intactes. Zero-residu assertion avant ecriture. best_ppo_model.pt regenere avec le notebook. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…6900) Ajoute un moteur Horn pédagogique, un checker indépendant et des certificats falsifiables, puis les confronte au binaire open-ontologies v1.4.0 épinglé et exécuté réellement. Co-authored-by: Claude Code <noreply@anthropic.com>
…frees (1063 -> 1261) (#16463) * docs(game-theory,#13410): densite GameTheory-02 Part2 - lectures chiffrees (1063 -> 1261) 3 lectures chiffrees des sorties jamais interpretees (esperances 0.0000, banc Gauss x=1.0000 y=1.0000, paires {0,1},{0,2},{1,2}). Md-only : +21/-0, 0 cellule code touchee. Voir #13410. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(16463): rebaseline twin pair gametheory-2 normalform part 2 after markdown-only density tranche Pair attested: GameTheory-2 NormalForm Part 2 (Support Enumeration). Paraphyte-preservant verification (python-compare vs origin/main): all code cells byte-identical (source + outputs + execution_count) — 14/14; changes are markdown-only additions (+3 cells). Command run: python scripts/notebook_tools/check_twin_parity.py --update --pair "GameTheory-2 NormalForm Part 2 (Support Enumeration)" --by "myia-po-2026:CoursIA" Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…achine, jonction Shapley (P4) (#16632) * feat(probas,#16620): Do-Calculus-Bridge — 4 taches data-fusion + CHT + jonction Shapley (P4) Trois nouvelles sections (6-8) dans le notebook-pont, sections 6-11 renumerotees 9-14 : - Taches prototypiques du data-fusion (Bareinboim-Pearl, PNAS 2016 Fig 1) : tache 3 selection corrigee par IPW (essai randomise biaise +1.029 -> +0.808, verite 0.800, E[Z|S=1]=+0.578) ; tache 4 transportabilite par strates reponderees (source +0.396, cible 0.760, transport K=20 = +0.750) ; - Causal Hierarchy Theorem (Bareinboim 2026, Thm 2.3.1) rendu machine : deux SCM gaussiens a loi jointe identique (cov 0.803/0.798, marginales std 1.0) et interventions opposees (do(X=1) : +0.800 vs +0.002) ; - Jonction XAI <-> Pearl : baseline d'attribution do vs voir sur monde lineaire a confondeur (+0.5006 TE vs +0.8438 TV, ecart +0.3432 = chemin spurieux facture a la feature). Exercice 4 ajoute (biais-variance du transport stratifie), objectifs 1-7, synthese et README serie mis a jour. Papermill 43/43, exec 1-15 consecutifs, 0 erreur, validator PASS, catalogue intact. See #16620 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(probas,#16620): section 8bis — valeurs de Shapley L3 (Thm 6.2.6 Bareinboim) Reponse a la reserve user (jsboige 18/09) : le notebook s'arretait a l'interventional SHAP (L2), Bareinboim va plus loin avec les L3 SV ("counterfactual SHAP"). 3 cellules inserees apres la section 8 : - l3sv-intro-8bis : theorie — GDE (Def 6.2.5, p. 494), decomposition du NTE en GDEs (Thm 6.2.1, p. 496), definition des L3 SV (Def 6.2.6, p. 496), desiderata (Thm 6.2.6, p. 502 + Table 6.3). - l3sv-demo-8bis : implementation sur le SCM lineaire-gaussien du notebook — abduction/action/prediction par unite (draw_unit, Y_cf(u, do), NTE par tirages naturels conjoints m=400_000, GDE, l3_sv avec assertion d'efficacite Thm 6.2.1). Deux unites u_A1 (A=1, Z>0.5) et u_A0 (A=0, Z<-0.5) : u_A1 : phi_L3(Z)=+0.2388, phi_L3(A)=+0.2000, phi_L3(W)=+0.7665, Somme=+1.2052 | NTE=+1.2043 (efficacite) u_A0 : phi_L3(Z)=-0.6147, phi_L3(A)=-0.2000, phi_L3(W)=-0.4672, Somme=-1.2820 | NTE=-1.2830 (efficacite) phi_L3(A)=+-0.2000 unit-specifique vs TE moyen (do)=+0.5006 constant : la distinction L2/L3 est visible dans la sortie. - l3sv-lecture-8bis : lecture L3-unite vs L2-moyenne + limite honnete (abduction triviale en lineaire-gaussien, u observe => bruits connus). Execution complete papermill (kernel coursia-ml-training) : 46 cellules, 16/16 code executees, 0 erreur, 0 fuite de chemin (scan), metadata papermill normalisees au basename. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ourcis CDE corrigés (P5a) (#16639) * feat(probas,#16620): Infer-5 effets naturels NDE/NIE calcules + correction raccourcis CDE (P5a) Nouvelle cellule : NDE = 0,280 et NIE = 0,180 par enumeration sur le SCM de mediation (X formation -> M competences -> Y promotion), NDE + NIE = 0,460 = TE exactement -- identite algebrique de telescopage. Correction (G.1) : le markdown affirmait NDE = CDE(M=0) = 0,300 et NIE = TE - NDE = 0,160 avec une verification tautologique (NIE defini comme TE - NDE). Mesure : NDE = 0,280 != CDE(0) = 0,300 et part mediee vraie 0,180 != 0,160 -- l'interaction X*M (CDE(1) = 0,200 vs CDE(0) = 0,300) casse les raccourcis via CDE, pas l'identite NDE + NIE = TE. exec_dotnet_persist 16/16 cells, 0 erreur, exec counts consecutifs, validator PASS, catalogue intact. See #16620 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * chore(twin-parity,#16639): attest Probas-5 Causal-Inference pair at current head (Infer-5 P5a) Guard-demanded rebaseline (selector --pair, lessons L963/L974): 1 pair updated. Entry index 0014; the posterior twin PR (#16640 P5b) takes 0015 to avoid concurrent index collision (memory twin-registry-concurrent-index-collision). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(infer,#16639): strip kernel-injected probeAddresses banner (9 lines, output-only) Rule-6 exception (kernel-bootstrap noise, #2733/#6312 precedent): source byte-identical, stream outputs + execution_count preserved. Re-exec cannot cure (re-injects). Strip precedes twin re-attestation per #8957. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * chore(twin-parity,#16639): re-attest Probas-5 Causal-Inference AFTER banner strip (#8957) The strip moved the committed blob SHA; the 0014 entry attested the pre-strip state. 0015 records the post-strip blob. Posterior twin (#16640) moves to 0016. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
… findings on main (4 named_split) (#16786) * feat(notebook-tools,#16762): census tool for split reading cells (Lecture/Lecture chiffree) Instrument du recensement demande par le parapluie user #16762 : paires de cellules d'interpretation consecutives (signal structurel : en-tetes Lecture/Interpretation/Analyse) + mesure de recouvrement (Jaccard mots pleins + containment mots rares intra-notebook, mecanique reutilisee de detect_repeated_prose.py signal B). Sous-classes named_split (defaut user), generic_pair, separated_by_code (variante secondaire). Recensement main (c818f6a) : 84 findings -- 4 named_split, 72 generic_pair, 8 separated_by_code. Distribution C (generic_pair) : 38 < 0.10, 26 [0.10,0.20), 8 >= 0.20 -- la structure seule sur-accuse (~53% de paires benignes, lectures de signaux differents) ; un garde futur doit coupler structure + seuil C. 7 tests (pytest) dont le controle FP different-signaux. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix: propage --fail-on-findings en mode dossier (reserve adjoint #16786) scan_root(root, as_json) retournait toujours 0 : le total de findings etait calcule puis droppe, et le flag --fail-on-findings n'etait pas transmis par main() (seul le mode fichier l'honorait, l.209). Reproduction adjoint confirmee avant fix : dossier findings+flag rc=0. Fix : scan_root(root, as_json, fail_on_findings=False) retourne 2 si findings et flag ; main() transmet args.fail_on_findings. Parametre default -> aucun changement pour les appelants existants (grep : aucun autre appelant de ce scan_root). Tests : +2 (dossier positif rc=2, dossier clean rc=0) -- la reserve notait qu'aucun des 7 tests ne couvrait main/scan_root. 9/9 pass. Matrix verifiee : dossier findings+flag 2 / dossier clean+flag 0 / fichier findings+flag 2 / dossier sans flag 0 (mode recensement inchange). See #16786 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…Lens tête-à-tête) (#16814) * docs(ledger,#11690): strand 5 tranche 1 — famille SAE (21/21b/21c + JLens tete-a-tete) Consignation de la lecture complete (contenu + outputs committes) de la tranche 1 du rang 5 : ICT-21 (gates 10/11 PASS, echelle 4-echelles FVU 0.28-0.85, decroisement generation x taille, ablation dictionnaire), ICT-21b (calibration croisee FVU/variance par echelle et registre), ICT-21c (contrastes trained/control 3 echelles + cascade d'ablation : overlap_diff64 2-3/64 stable pendant que FVU passe 0.28->0.82 = "inoculation absente"), ICT-SAE-JLens-TeteATete (non-numerote, divergence semantique des deux lentilles : Pearson +0.08 malgre alignement token-a-token True). Rangs matrice 107/113 confirmes. Findings : garde-fous institutionnalises, preuve partagee != repliquee (ablation identique au millieme dans 21 et 21c), JLens non-numerote porteur de substance (candidat renumerotation #7260), axe J-lens d'ICT-21b titre une question sans reponse committee. Greffe5 exclu (rework actif #16787). Perimetre = ledger uniquement, arbitrage 21/08 inchange. See #11690 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(ledger,#11690): resolve strand-5 merge markers -- SAE tranche 1 before tranche 3 Le commit de merge precedent embarquait les marqueurs de conflit bruts (chaine bash executee malgre l'echec du script de resolution). Resolution reprise par arithmetique de lignes exacte : en-tete strand 5 ajuste (LU 2/3 tranches -- 1 SAE + 3 non-numerotes ; tranche 2 GWT = PR #16821), section SAE (tranche 1) inseree AVANT la tranche 3 (non numerotes, main). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…explicites + re-exec bit-identique (#16815) Cellule 3 (import torch) : CUBLAS_WORKSPACE_CONFIG avant import, puis cudnn.deterministic=True / benchmark=False / use_deterministic_algorithms(True, warn_only=True) — les seeds de la boucle walk-forward multi-seed (cellule 15) ne suffisent pas seuls. DEVICE reste CPU comme pinné par l'auteur. Re-execution complete kernel coursia-ml-training (11/11 cellules, 0 erreur) : les 23 valeurs numeriques 3+ decimales des outputs sont BIT-IDENTIQUES a l'ancien run — preuve de reproductibilite du pipeline walk-forward 5 folds x 4 seeds x 2 modeles, verdict INCONCLUSIVE (|z| < 2) inchange. Prose sans ancrage stale. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
… verbatim fixes (#16817) * feat(genai,#13410): releve densite pedagogique notebooks 00-Parcours-QA-OWUI et 03-Claude-CLI-References - 00-Parcours-QA-OWUI.ipynb: passe de 1056/1200 a >1200 avec 4 lectures ancrees - 03-Claude-CLI-References.ipynb: passe de 844/1200 a >1200 avec 10 lectures ancrees - Lectures explique les sorties des cellules de demonstration - Respect des garde-fous editoriaux: UTF-8, accents, source en liste, markdown-only Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai> * fix(vibe,#13410): g14 relay — dedup 4 exact triplets, correct spec-file count, drop unanchored retry claim, grammar + verbatim alignment Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Mistral Vibe <vibe@mistral.ai> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…explicites + re-exec + resync narrative (#16820) Trio determinisme (CUBLAS avant import torch, cudnn deterministic, use_deterministic_algorithms warn_only) en cellule 3 (imports). Re-execution papermill 13/13, 0 erreur. Micro-drift : MSE 0.1784->0.1793 / 0.1090->0.1091, classement inchange ; en direction accuracy PatchTST passe SOUS la baseline (-0.0035) et iTransformer double son edge (+0.0100) — 11 remplacements scriptes sur 2 cellules narratives (assertions zero-residu avant ecriture). Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
… (volet 5, tranche 1) (#16882) * fix(symbolicai,#16795): determinism flags + fresh re-executions for Planners-12, SL-13 x2, ICT-22b Same fix as previous volets. Planners-12 anchor lives inside a try block, block inserted indented there. All metrics identical vs committed except: Planners embedding sample (cross-build 2.11+cpu->2.8+cu126), SL-13 TPR binding shapes flip between equivalent factorizations (numpy 2.4.3->2.3.5, acc/R2 identical), ICT-22b damage-clamp ratio inf (last-bit residual). 0 non-deterministic-op warning. Sudoku-16 running, rattrapage to follow. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(symbolicai,#16795): SL-13 — from_numpy sur copie writable, fuite MACHINE_PATH fermee (x2 fichiers) Ratchet Output-failure : MACHINE_PATH 1->2 sur cell[11] des DEUX fichiers (SL-13 + artefact -output). Cause : "UserWarning: The given NumPy array is not writable" — reconstruct_tpr/surgery_swap_roles retournent des vues broadcast read-only, et torch.from_numpy(H_tpr_init) sur un array non writable emet un warning dont la LOCALISATION est le fichier temp ipykernel (C:\Users\jsboi\AppData\Local\Temp\ipykernel_<pid>\NNN.py). Fix a la source (cellule 9, fonction accuracy_with_tpr_init) : torch.from_numpy(H_tpr_init.copy()) — copie bitwise identique, toujours writable, warning disparu. Jamais de scrub de sortie (secrets-hygiene 6). Re-execution complete (kernel python3, 38 s) : - cell[11] : table surgery propre, metriques IDENTIQUES a la run precedente (copy 0.132/0.132/0.115, reverse, interleave — seeded) - 10/10 cellules code ec 1..10, 0 erreur, 0 chemin machine - artefact -output.ipynb regenere, metadata.papermill normalisees au basename (exception autorisee) - unique diff source vs HEAD : +4 lignes commentaire/copie dans la cellule 9 (cellule Parameters papermill retiree avant commit) NB : le WIP rattrapage Sudoku-16 (8 lignes, non commis) reste hors de ce commit — re-review en delta demandee par Hermes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(sl,#16795): re-execute SL-13 TPR twins on fresh kernel (ratchet NOT_FROM_1) Both committed runs started at execution_count=2 (resumed-kernel artifact). Fresh end-to-end re-execution: counts 1..9 contiguous, 0 errors, 0 machine-path occurrences. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(sl,#16795): untrack MNIST data sweep + revert Sudoku-16 WIP from previous commit git add -A swept two unrelated things into 08f5d11: (a) 8 torchvision MNIST data files (binary dataset artifacts under 03-DeepLearning/data, regenerable, never repo material), (b) a Sudoku-16 notebook carrying un-re-executed determinism flags (pre-existing WIP from an earlier session; belongs to the blocked Sudoku-16 sub-track, not this PR). This restores PR scope: SL-13 twins only. Local MNIST copies deleted. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(sl,#16795): actually untrack MNIST data files (follow-up) dbe42cb intended to untrack the 8 torchvision MNIST artifacts but a stray 'git add' in the same chain re-staged them unchanged, so only the Sudoku-16 revert landed. This commit removes them from the index for real (disk copies already deleted, files regenerable by any exec). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ntext_Strategies au-dessus de 1200 (#16885) * feat(genai,#13410): relever densite pedagogique au-dessus de 1200 chars/cellule - 02-2-FLUX-1-Advanced-Generation.ipynb: ajoute 10 cellules markdown de lecture ancree - 10c_Long_Context_Strategies.ipynb: ajoute 18 cellules markdown de lecture ancree - Lectures expliquent les resultats des cellules DEMONSTRATION (outputs commites cites) - Aucune lecture pour cellules EXERCICE (detect_solution_leaks reste a 0) - Respect des garde-foux: UTF-8, source en liste, markdown-only, pas de re-execution Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai> * fix(g24-genai-9,#13410): relever densite pedagogique au-dessus de 1200 c/cell Relais humain du run g24-genai-9 : 24 correctifs sur FLUX-1-Advanced-Generation et 10c_Long_Context_Strategies. FLUX : temps "proportionnels/quasi-lineaires" aux steps FABRIQUES (b[13] = 786.4s/84.0s/35.8s/36.7s — echauffement du premier appel, quasi-constant ensuite) ; ratio "21:9" jamais teste (serie = 1:1/16:9/9:16/4:3) ; "plusieurs inferences simultanees" sans mesure ; exemples de generation inventes ("paysages naturels, scenes urbaines" — une seule image en base) ; 3 styles cites sur 4 (ANIME oublie) ; lisibilite du texte des images non affiches affirmee -> rencree sur les 4 prompts verbatim + la reputation citee par le notebook lui-meme. LongContext : "fenetre de 32768 tokens du modele servi" x2 — 32768 est le BUDGET de travail choisi, la fenetre reelle est 262144 (b[4] distingue les deux) ; troncation "perdrait" -> perd (map-reduce retrouve 5, troncation 1, perte relative 80%) ; "plus de 60%" -> 60% exact (verbatim) ; pattern paires par fait en recidive (g23) : 12 cellules redondantes reecrites sur le materiel verbatim non cite (decomposition 6349/6240/6089, DOC-1/DOC-2, reponses brutes '749', 6 essais TTFT individuels, reserve 512 tokens, verdict creux/bords). Validation : multiset full-JSON 0 perdu, anti-dup exact/prefix-380/source-level 0, densite 2/2 >= 1200 re-mesuree, scan newlines vide, git status 2 notebooks. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Mistral Vibe <vibe@mistral.ai> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ics au-dessus de 1200 (#16894) * fix(density,#13410): relever ICT-03 et IIT-02 au-dessus de 1200 chars/cell Ajout de lectures ancrées pour expliquer les résultats des cellules de démonstration : - ICT-03-RobustnessDelayedGratification-Python.ipynb : 5 lectures ajoutées - IIT-02-AdvancedTopics.ipynb : 9 lectures ajoutées Densité avant/après : - ICT-03 : 1105 → 1201 chars/cell (seuil 1200) - IIT-02 : 1097 → 1202 chars/cell (seuil 1200) Respect des garde-foux éditoriaux : UTF-8, source en liste, markdown-only, aucune re-exécution, pas de narration d'exercices, chiffres cités tels quels. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai> * fix(g26-iit-2,#13410): 5 correctifs relais ICT-03 + IIT-02 - IIT-02: Big Phi != somme des small phi (1.875 != 1.5, verbatim b[22]) x2 - IIT-02: EMD 0.0000 = aucune information specifiee pour le purview (0,) - IIT-02: anneau 4 noeuds 0.2569 < XOR 3 noeuds 1.8750 (non-linearite != integration) - ICT-03: grammaire 'son progression' -> 'sa progression' Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Mistral Vibe <vibe@mistral.ai> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…b au seuil densite pedagogique (#16902) - Ajout de 8 cellules markdown de LECTURE ANCREE apres les cellules DEMONSTRATION - Cellules concernees: 2 (config), 4 (morphogenese), 6 (ablation), 10 (mondes contrefactuels), 12 (scores), 16 (contraste), 18 (controle variance), 22 (balayage) - Respect des garde-foux: UTF-8 preserve, source en liste, pas de re-execution - Densite passe de 1160 a >=1200 chars/cellule (seuil atteints) - Aucune lecture ajoutee pour les cellules EXERCICE (8, 14, 20) Generated by Mistral Vibe. Co-authored-by: Mistral Vibe <vibe@mistral.ai>
Tell c.1374-L1 ★★★★ narrow strict 1:1 + Tell c.1086 strict fail-CLOSED -- CLOSE w/stale batch (5 PRs)Tell c.974 §G.9 strict fondateur vérif first-hand (lecture Toutes les 5 PRs (#16991 #16992 #16994 #16999 #17001) ont le MÊME pattern composite mal empilé :
Tell c.1374-L1 ★★★★ ★★★ red-flag G.4 composite trop large ★★★ : TOUTES dépassent les seuils (3000 lignes / 15 fichiers / 4 features / 1 domaine). Aucune cohérence avec le titre « REPAIR-3 narrow strict 1:1 ». Tell c.1086 strict fail-CLOSED ★★★ : le rebase produirait des branches qui RE-SUPPRIMENT du code / fichiers de retour sur main (work de #17140, #17440, etc.). Pas safe. Décision : CLOSE w/stale batch. Le contenu narrow strict pertinent (corrections REACCENT sur fichiers Lean-X spécifiques) est ailleurs dans les PRs canoniques EPIC #16638 ( Leçon c.1413 ★★★ Tell c.898 ★★★ collision guard généralisée : avant tout rebase, TOUJOURS vérifier le scope narrow strict 1:1 par Tell c.594 strict fondateur respecté : closes de MES PRs. Suivi adjoint po-2025 (DM — myia-po-2024:CoursIA-2, c.1413 |
|
Tell c.1374-L1 ★★★★ narrow strict 1:1 + Tell c.1086 strict fail-CLOSED — close w/stale, voir commentaire détaillé cid 5785184795. |
Grain: MED/notebook-lean — lane myia-po-2024:CoursIA-2 — prev: MED/notebook-lean #16994-REPAIR-3-merge
Résumé
REPAIR-3 morphologique de la PR #16970 Lean-16a Conway Man and Work : map REACCENT sub-grain #16638 a transformé
donne(verbe) endonné(participe) etprouve(verbe) enprouvé(participe) en prose markdown. 5donne+ 0prouvecorrections cellules [0].Diagnostic Tell c.1319-L1 ★★★★ fondateur NEW
Batch REPAIR-3 final sur les 8 PRs sub-grain #16638 restantes non REPAIRed c.1315-c.1318. Total : 5 corrections c.1319 + 35 corrections c.1318 + 82 c.1315-c.1316 + 33 c.1317 = 155 corrections totales REPAIR morphologique sub-grain #16638.
Voie canonique Tell c.1315-L4 ★★★ fondateur NEW (étendue c.1317)
Script
repair_morpho_c1318.pyavec heuristiques complètes (Tell c.1318-L2 ★★★★).Intégrité C.2
🤖 Generated with Claude Code