Repository navigation
Conversation
… CRLF/mixed sous attribut text/eol=lf Issue #19374, classe de #19287. Le precedent #19373 a renormalise les deux fichiers d'#19287 (git add --renormalize), mais aucun garde n'empechait la prochaine instance : un fichier CRLF/mixed committe avec `.gitattributes` declarant `text` ou `eol=lf` fait paraitre le fichier modifie apres chaque checkout (git renormalise le worktree mais ne reecrit jamais le blob), et tout check sur tree propre s'arrete (merge_ready, check_clean_cycle_exit). Mesure pre-absorption sur main au 2026-10-06 : `git ls-files --eol` rend 232 lignes `i/crlf` ou `i/mixed`, TOUTES portant `attr/` (vide) ou `attr/-text` -- aucune n'est `attr/lf` ou `attr/text`. Le garde ne rougit donc pas main, et l'absorption ne decouvre pas de dette heritee. Geste : - Nouveau script `scripts/ci/check_eol_blob_attribute.py` qui lit `git diff --name-only --diff-filter=AM origin/main...HEAD`, puis `git ls-files --eol -- <paths>`, et flag toute ligne `i/crlf`/`i/mixed` + `attr/lf`/`attr/text` (les 2 attributs equivalents ; `text` par defaut eol=lf). Sortie FAIL (exit 1) avec commande de reparation : `git add --renormalize <path>`. - Tests offline : `scripts/tests/test_check_eol_blob_attribute.py` couvre 4 cas de parsing + 7 cas de decision matrix + 2 tests d'integration sur le repo courant. 13/13 PASS au commit. - Enregistrement TRANCHE18 dans `scripts/ci/fast_lane_registry.py`, avec paths globs etroits sur les extensions textuelles + le `.gitattributes`. `absorbed=True` (#19168) : pas de workflow d'origine pour le check-run. `needs_base=True` pour substituer `{base_ref}` par la base de la PR dans le runner. Temoins : - POSITIF : sur la tete de #19287 (commit 92f999a), modifier un des deux `_fallacy_*.py` fait rougir le garde (les deux fichiers sont `i/mixed` + `attr/text eol=lf` au moment de leur commit). - NEGATIF : la verification pre-absorption (rc=0, 0 mismatch) tient en l'etat. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
[ai-01] Collision de claim sur #19374, lane myia-ai-01:CoursIA. L'issue #19374 portait un Décision du coordinateur : #19385 garde le grain, cette PR est à fermer par sa lane. Un seul organe de la classe EOL doit exister, et c'est #19385 qui le porte. Ce que cette PR apporte et que #19385 n'a pas encore, c'est le fichier de tests (13 tests). Je demande à la lane de #19385 d'ajouter ses propres tests, et elle peut reprendre ceux-ci en le créditant. |
|
Closing per ai-01 dispatch (DM ai-01 lane claim on #19374 etait anterieure (21:35Z, PR #19385 ouverte 22:40Z). Ma PR #19388 ouverte 22:56Z avec claim pose apres coup -- Travail preserve : 13 tests offline (4 parsing, 7 decision matrix, 2 integration) + script Recyclage worktree : Grain: LIGHT/guard (annule par cette close) -- lane myia-po-2023:CoursIA-2 See #19388 #19385 #19374 #19373 #19287 Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com |
Le review 5421649286 du coordinateur a releve 3 points :
- la matrice etait in-line dans main() -> pas testable hors subprocess
- pas de tests sur le controle positif (blob mixte), -text, ou
i/crlf sans attribut
- tag `Grain:` absent du body, et l'enumeration fermee exige
`guard` ou `tooling` (le body disait `MED/ci`, hors liste)
Refactor :
- expose BAD_INDEX = ("crlf", "mixed"), LF_ATTRS = ("text", "lf")
- expose EOL_LINE_RE pour le parsing des lignes `git ls-files --eol`
- extrait _classify(i_attr, attr) -> bool, matrice pure testable
- extrait _parse_ls_files_line(line) -> (i_attr, attr, path) | None
- main() utilise les helpers, comportement identique (rouge/vert
et messages preserves a l'octet)
Tests `scripts/tests/test_check_eol_blobs.py` :
- 4 cas parsing (typical, attr vide, garbage, espaces dans path)
- 7 cas matrice de decision (lf/crlf/mixed x text/crlf/-text/empty/lf)
- 1 cas pas-de-changements -> exit 0/2
- 1 cas blob CRLF declare -> la garde NE rougit PAS (attr vide,
contrat non-claim -> hors du filet)
- 14/14 passent localement (Python 3.14.3)
Le precedent PR #19388 (sa lane) portait des equivalents autour de
`BAD_INDEX = "crlf"` string simple ; les 13 tests fondateurs sont
recredites ici via la structure de la suite (importlib spec, BAD_INDEX
constante, matrice i_attr x attr). La forme du module est ici adaptee
au refactor en tuple + helpers, pas recopiee.
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Le review 5421649286 du coordinateur a releve 3 points :
- la matrice etait in-line dans main() -> pas testable hors subprocess
- pas de tests sur le controle positif (blob mixte), -text, ou
i/crlf sans attribut
- tag `Grain:` absent du body, et l'enumeration fermee exige
`guard` ou `tooling` (le body disait `MED/ci`, hors liste)
Refactor :
- expose BAD_INDEX = ("crlf", "mixed"), LF_ATTRS = ("text", "lf")
- expose EOL_LINE_RE pour le parsing des lignes `git ls-files --eol`
- extrait _classify(i_attr, attr) -> bool, matrice pure testable
- extrait _parse_ls_files_line(line) -> (i_attr, attr, path) | None
- main() utilise les helpers, comportement identique (rouge/vert
et messages preserves a l'octet)
Tests `scripts/tests/test_check_eol_blobs.py` :
- 4 cas parsing (typical, attr vide, garbage, espaces dans path)
- 7 cas matrice de decision (lf/crlf/mixed x text/crlf/-text/empty/lf)
- 1 cas pas-de-changements -> exit 0/2
- 1 cas blob CRLF declare -> la garde NE rougit PAS (attr vide,
contrat non-claim -> hors du filet)
- 14/14 passent localement (Python 3.14.3)
Le precedent PR #19388 (sa lane) portait des equivalents autour de
`BAD_INDEX = "crlf"` string simple ; les 13 tests fondateurs sont
recredites ici via la structure de la suite (importlib spec, BAD_INDEX
constante, matrice i_attr x attr). La forme du module est ici adaptee
au refactor en tuple + helpers, pas recopiee.
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
… de #19287) (#19385) * ci(#19374): garde contre les blobs CRLF ou mixtes sous eol=lf (classe de #19287) Issue #19374 : depuis #19287 (merge 7 fichiers EPITA, dont 2 CRLF chez l'amont sortis en blob mixte), `merge_ready` a refuse tous ses tours de 18:16Z a 21:10Z. Le correctif ponctuel est #19373 (`git add --renormalize`). Cette garde empeche la prochaine de la classe. Detection : `git diff --name-only --diff-filter=AM origin/main...HEAD` puis `git ls-files --eol -- <path>` par chemin, awk-equivalent en Python. Un fichier AM est rouge si `i/crlf` ou `i/mixed` ET `eol_attr != eol=crlf` (donc `eol=lf` par defaut). Un blob CRLF voulu (.bat, fixture) se declare par `eol=crlf` ou `-text` dans `.gitattributes`, jamais par exemption. Sortie de rouge : nom de fichier + commande de reparation `git add --renormalize <fichier>`. Cablage : TRANCHE17 dans `scripts/ci/fast_lane_registry.py`, absorbed=True implicite par la convention TRANCHE17. Aucun workflow d'origine (FAST_LANE_NATIVE), source = `scripts/ci/check_eol_blobs.py`. Acceptance #19374 : - rougit sur le blob mixte de #19287 (controle positif, verifie localement en injectant le blob via `git hash-object -w` puis `git update-index --cacheinfo`, le `core.autocrlf` global empechant `git add` de garder un blob CRLF) - vert sur main apres reset (le test commit est revenu, le merge reste sur main) - message de rouge nomme le fichier et la commande de reparation - mesure main : `git ls-files --eol | awk '($1=="i/crlf"||$1=="i/mixed") && /eol=lf/'` rend 0 ligne Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * test(#19374): extrait la matrice de decision + 14 tests unitaires Le review 5421649286 du coordinateur a releve 3 points : - la matrice etait in-line dans main() -> pas testable hors subprocess - pas de tests sur le controle positif (blob mixte), -text, ou i/crlf sans attribut - tag `Grain:` absent du body, et l'enumeration fermee exige `guard` ou `tooling` (le body disait `MED/ci`, hors liste) Refactor : - expose BAD_INDEX = ("crlf", "mixed"), LF_ATTRS = ("text", "lf") - expose EOL_LINE_RE pour le parsing des lignes `git ls-files --eol` - extrait _classify(i_attr, attr) -> bool, matrice pure testable - extrait _parse_ls_files_line(line) -> (i_attr, attr, path) | None - main() utilise les helpers, comportement identique (rouge/vert et messages preserves a l'octet) Tests `scripts/tests/test_check_eol_blobs.py` : - 4 cas parsing (typical, attr vide, garbage, espaces dans path) - 7 cas matrice de decision (lf/crlf/mixed x text/crlf/-text/empty/lf) - 1 cas pas-de-changements -> exit 0/2 - 1 cas blob CRLF declare -> la garde NE rougit PAS (attr vide, contrat non-claim -> hors du filet) - 14/14 passent localement (Python 3.14.3) Le precedent PR #19388 (sa lane) portait des equivalents autour de `BAD_INDEX = "crlf"` string simple ; les 13 tests fondateurs sont recredites ici via la structure de la suite (importlib spec, BAD_INDEX constante, matrice i_attr x attr). La forme du module est ici adaptee au refactor en tuple + helpers, pas recopiee. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ci,#19385): eol-blob-guard isole en TRANCHE18 + absorbed=True Diagnostic : Scripts Tests (CPU) sur #19385 rougit sur 3 tests qui ne sont pas environnement (cf. xdist PRE-EXISTING du c.186) : - test_aucun_garde_bloquant_n_est_inert_sans_declaration -> ['eol-blob-guard'] en inertes (blocking=True sans absorbed ni shadow_reason) - test_tranche17_enregistree_avec_contrat (TRANCHE17: assert 2 == 1) - test_tranche16_enregistree_avec_contrat (TRANCHE16: assert 2 == 1) Cause : le garde eol-blob-guard (#19374) a ete ajoute a la main dans TRANCHE16 et TRANCHE17, duplique deux fois. La forme canonique est une TRANCHE dediee (TRANCHE18, deja referencee dans le commit 7542ae4). Correctif : 1. Retrait des deux occurrences (TRANCHE16 fin + TRANCHE17 fin). 2. Nouvelle TRANCHE18 avec le seul eol-blob-guard + absorbed=True (meme convention que twin-parity-guard TRANCHE17 et control-chars-in-cells-guard TRANCHE16, le garde n'a pas de workflow d'origine -- fast_lane.py --shadow est son seul emetteur). 3. fast_lane.py importe TRANCHE18 et concatene la liste. Verification : `pytest scripts/tests/test_fast_lane.py scripts/tests/test_check_control_chars_in_cells.py scripts/translation/tests/ scripts/tests/test_check_eol_blobs.py` -> 508 passed, 2 skipped (vert). Effet sur les PRs rouges : #19385 Scripts Tests (CPU) devrait passer le rouge reel (les 3 tests reussissent localement) et ne plus depender du xdist pour le masquer. PR gate aggregator c.85 stale devrait suivre au prochain sweep. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * test(eol,#19385): ajouter test rc==1 fondateur, regex accepte w/ vide Revue ai-01 (CHANGES_REQUESTED, point 2) : les deux tests d'integration 'control positif -> exit 1' etaient muets, parce que : 1. aucun ne cree origin/main, donc 'git diff origin/main...HEAD' echoue, la garde sort en rc 2, et les deux tests acceptent rc 2 comme 'vert implicite' ; 2. le test dit 'controle positif' dans la docstring mais n'assert rien sur rc -- son seul assert est 'rc != 1', qui passe en rc 0 et en rc 2. Fix : - renomme le test precedent en test_main_no_origin_main_returns_two_or_zero et corrige la docstring ('attr vide -> la garde ne rougit pas', pas 'controle positif -> exit 1') ; - ajoute test_main_mixed_blob_flagged_rc1 : commit base avec '.gitattributes' declarant mixed.txt text eol=lf, pose 'git update-ref refs/remotes/origin/main <base_sha>' pour rendre la sonde reellement fonctionnelle, commit head avec mixed.txt en blob mixte (force par 'git hash-object -w --no-filters' pour bypasser la renormalisation .gitattributes), assert 'returncode == 1' (rc 2 fait echouer le test), assert 'mixed.txt' et 'renormalize' dans la sortie. Le test faisait sortir le regex EOL_LINE_RE en None : 'w/(?P<w_attr>\w+)' n'acceptait pas un w/ vide ou avec espaces, comme c'est le cas quand git rend 'i/mixed w/ attr/text eol=lf' (worktree pas encore checkout). Remplace \w+ par \S+ / \S* sur les champs concernes : i_attr en \S+ (word), w_attr en \S* (peut etre vide). 15/15 tests verts (avant : 14, avec 1 test rename + 1 test neuf). --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> Co-authored-by: ai-01 <ai-01@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
…anche 1 refs anchoring (#19331) * docs(gametheory,#19263): Handbook of Computational Social Choice - tranche 1 refs anchoring Tranche 1 du ticket #19263 : ancrage bibliographique du Handbook de Computational Social Choice (Brandt-Conitzer-Endriss-Lang-Procaccia 2016, CUP, ISBN 978-1-107-06043-2) dans la sous-serie SocialChoice/, au chapitre pres. - README SocialChoice/ : entree dans la table Ressources avec chemin biblio cluster - SC-01 (Arrow) : ancrage ch. 1-2 (impossibilites, fonction de choix social) - SC-03 (Voting Methods) : ancrage ch. 2 (Zwicker, regles polynomiales) + mention explicite du trou conceptuel (Kemeny/ranked pairs/Dodgson, grain d'extension) - SC-04 (SAT/Z3) : ancrage ch. 6 (computational barriers, encodage SAT/Z3 des theoremes d'impossibilite) - SC-05 (Gibbard-Satterthwaite) : nouvelle section References bibliographiques avec Gibbard 1973 + Satterthwaite 1975 + ancrage ch. 6 Critere d'acceptation verifie : `git grep -icE "Handbook of Computational Social Choice" MyIA.AI.Notebooks/GameTheory/` rend 5 (README + 4 carnets). L'ouvrage est deja dans la biblio cluster (G:\Mon Drive\...\Handbook of Computational Social Choice.pdf) ; aucun PDF n'est committe dans le repo public (voir CLAUDE.md section Secrets + bibliography-hygiene.md). Tranche 2 (implementation Kemeny + ranked pairs + Dodgson) reportee a un futur cycle -- le claim #19263 reste actif avec paths: scope limite a la presente tranche (README + 0*.ipynb). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(twin-parity,#19331): rebaseline 3 paires SocialChoice post-Handbook refs 3 paires en DRIFT_INTRODUCED par la PR #19331 (Handbook tranche 1) : - SocialChoice-1 Arrow-Impossibility - SocialChoice-3 Voting-Methods - SocialChoice-4 Computational-Aggregation-SAT-Z3 Cause : PR #19331 a enrichi la cellule bibliographique de chaque carnet Python d'une reference (Brandt, Conitzer, Endriss, Lang, Procaccia 2016, Handbook of Computational Social Choice, Cambridge UP). Markdown-only (C.2 exception), cellules code byte-identiques, execution_count et outputs intacts. Cote C# inchange. Drift CONTENT unilateral cote Python. Fix : rebaseline par script (--update --by myia-po-2023:CoursIA-2) sur les 3 paires, avec entree known_differences expliquant l'edition. Le python_sha avance, le csharp_sha reste inchange -- parite semantique preservee sur les axes algorithmiques (preuve par exhaustion 216 profils, encodage SAT, defs axiomatiques). Verification : `python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main` rend INTRO=0 (152 OK + 5 PRE, PRE handled by #8264). 43/43 tests offline PASS. Grain: REPAIR/MED -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/guard #19388 (c.1066) See #19331 #19263 #8057 #8264 * fix(gametheory,#19331): CR 5422568917 levee -- ch.6 (04) -> §1.4.5, Gibbard 1973 titre exact (05), ch.6 -> §6.2 (05) CR ai-01 5422568917 signalait deux references inexactes verifiees contre le PDF du Handbook archive au gisement GDrive. Corrections : **Carnet 04 (Computational-Aggregation-SAT-Z3) cell 62** : - Avant : 'Ancrage ch. 6 (computational barriers to manipulation) -- encodage SAT/Z3 des theoremes d'impossibilite... le meme encodage est employe pour l'analyse de la complexite des manipulations strategiques (ch. 6.3-6.5).' - Apres : 'Ancrage §1.4.5 "Computer-Assisted Theorem Proving in Social Choice" (p. 14-15) -- encodage SAT/Z3 des theoremes d'impossibilite (Arrow, Sen)... Le ch. 6 ("Barriers to Manipulation in Voting", Conitzer et Walsh) traite la complexite comme barriere a la manipulation (cf. carnet 05).' - Justification : le ch. 6 du Handbook est 'Barriers to Manipulation in Voting' (Conitzer et Walsh), pas l'encodage SAT/Z3 des theoremes d'impossibilite. L'encodage assiste par ordinateur releve du §1.4.5 (p. 14-15). **Carnet 05 (Gibbard-Satterthwaite) cell 13** : - Avant : 'Gibbard, A. (1973). Manipulation of Schemes that Mix Voting with Chance. Econometrica 41(4):587-601.' - Apres : 'Gibbard, A. (1973). Manipulation of Voting Schemes: A General Result. Econometrica 41(4):587-601.' - Justification : 'Manipulation of Schemes that Mix Voting with Chance' est l'article de 1977 (Econometrica 45(3):665-681), pas 1973. L'article de 1973 s'intitule 'Manipulation of Voting Schemes: A General Result'. **Carnet 05 (Gibbard-Satterthwaite) cell 13 -- ref Handbook** : - Avant : 'Ancrage ch. 6 (computational social choice)' - Apres : 'Ancrage ch. 6, §6.2 "Gibbard-Satterthwaite and Its Implications" (Conitzer et Walsh)' - Justification : precision sur la section specifique du ch. 6 qui traite Gibbard-Satterthwaite. **Pas de re-execution** : corrections markdown seules (le PR body le dit explicitement, cellules markdown uniquement). **Jumeaux** : 04-C# n'a pas de ref Handbook-Ancrage (verifie), 05-C# n'existe pas. Pas de jumeau a mettre a jour. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(twin-parity,#19331): rebaseline SC-4 post-CR fix (audit 0021) La CR 5422568917 (8bf1997) a re-modifie la cellule bibliographique de SC-04 (4c6-anchor 2e round) ; le rebaseline 6dabe6b (audit 0020) a ete depasse par ce commit. Re-atteste SC-4 avec le contenu actuel : - python_sha 0f697fc - content_python_sha 1796365cc7539f15d6649f818151f79fbef8a84b37eaad9baa491c687ab08bbd - csharp_sha / csharp_content_sha inchange (jumeau C# non touche par la CR) Drift introduit: 0 (base=OK head=OK) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
ci(#19374): TRANCHE18 eol-blob-attribute-guard -- rougit les fichiers CRLF/mixed sous attribut text/eol=lf
Issue #19374 (classe de #19287). Le precedent #19373 a renormalise les deux fichiers d'#19287 (
git add --renormalize), mais aucun garde n'empechait la prochaine instance : un fichier CRLF/mixed committe avec.gitattributesdeclaranttextoueol=lffait paraitre le fichier modifie apres chaque checkout (git renormalise le worktree mais ne reecrit jamais le blob), et tout check sur tree propre s'arrete (merge_ready, check_clean_cycle_exit).Les precedents (#13493, #14353, #14570, #11109) ont corrige des instances ou ajoute des regles
eol; aucun organe n'empechait la suivante.Mesure pre-absorption (2026-10-06)
git ls-files --eolsur main rend 232 lignesi/crlfoui/mixed; TOUTES portentattr/(vide) ouattr/-text, jamaisattr/lfouattr/text-- le garde ne rougit pas main.python scripts/ci/check_eol_blob_attribute.py --diff origin/main...HEAD->CLEAN :: 0 changed file(s)(rc=0).Geste
scripts/ci/check_eol_blob_attribute.pygit diff --name-only --diff-filter=AMpuisgit ls-files --eol -- <paths>, flagi/crlf/i/mixed+attr/lf/attr/text.scripts/ci/fast_lane_registry.pyeol-blob-attribute-guard,absorbed=True(#19168),needs_base=True,blocking=True.scripts/tests/test_check_eol_blob_attribute.pyTotal : 3 fichiers, +440/-0, commit
7542ae4ea6.Acceptance (cf #19374)
i/mixed w/mixed attr/text eol=lf(cfgit ls-files --eolsur les deux_fallacy_*.pyau 2026-10-06). Modifier l'un des deux dans une PR fait rougir le garde.main:--diff origin/main...HEAD->CLEAN :: 0 changed file(s). L'absorption ne decouvre pas de dette heritee.[FAIL] <path> :: i/mixed (attr/text)+run: git add --renormalize <path>.git ls-files --eol | awkne rend aucune ligneeol=lfeni/crlfoui/mixed(les 232 CRLF portent toutesattr/vide ouattr/-text).Critères de wiring
fast_lane_registry.py(meme convention que TRANCHE16/17 : bloc docstring,Guard(...),absorbed=True,needs_base=True).paths:couvre les extensions textuelles pertinentes (.py,.md,.ipynb,.json,.csv,.yml,.yaml,.bat,.sh,.cs,.lean) +.gitattributes+ les 3 fichiers du garde lui-meme.**/*est trop large ; les vendors JSON/CSV sont deja sur main sans mismatch, donc inutile de les enumerer.workflow_dispatch:ni de workflow d'origine -- le check-run sort sousfast-lane (ombre): eol-blob-attribute-guardque l'absorption fait passer en conclusionfailurereelle.Verification
pytest scripts/tests/test_check_eol_blob_attribute.py).python scripts/ci/check_eol_blob_attribute.py --diff origin/main...HEAD --json->{"verdict": "CLEAN", "scanned": 0, "offending": []}(rc=0).Substance
git ls-files --eol, pas un parser maison de.gitattributes).Grain: LIGHT/guard -- lane myia-po-2023:CoursIA-2 -- prev: LIGHT/guard #19381 (c.1064)
See #19374 #19287 #19373
Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com
🤖 Generated with Claude Code