Repository navigation
fix(symbolicai,#14837): corrige le témoin de violation + recadre la parité OWL (SL-3) - #14928
Conversation
…L-3, #14837) Le diagnostic de determination exhibait comme temoin deux lignes qui s'accordent sur la cible (Cu high vs Cu high), ce qui ne prouve pas une violation. On conserve la PREMIERE paire reellement en conflit (deux lignes qui different sur la cible). Fix symetrique Python (cell 4) et C# (cell 3), plus docstring functional_violations recadree sur le contrat effectif (multiplicite sur une propriete functionelle, pas egalite stricte OWL). Notebooks re-executes AVEC outputs. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
… fix (#14837) Enregistre les nouveaux SHAs des jumeaux Python/C# apres le fix du choix du temoin de violation, et documente la difference dans known_differences. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — les 2 notebooks analysés intégralement par script (42 + 26 cellules, head 4b9df870 vs main), yaml twin_pairs lu intégralement, issue #14837 et son CLAIM relus.
FAVORABLE — le correctif de logique est réel, vérifié au code et dans les rendus, et le périmètre est exactement ce que le body annonce :
- Fix 1 vérifié au code (jumeaux symétriques) :
check_determination(PY cellule 4) construit désormais le témoin par double boucle sur les lignes du groupe en cherchant la première paire qui diffère sur la cible (row_a[target_attr] != row_b[target_attr]), avec le comment d'intention ;CheckDetermination(CS cellule 3) porte la même logique (« PREMIERE paire en conflit reel »). Les rendus annoncés sont dans les outputs :Cu(high) vs Fe(medium)etAl(medium) vs Hg(low)présents, l'ancien témoin non-contradictoire (Cu / high / high) a disparu — le défaut mesuré de #14837 est clos côté diagnostic. - Fix 2 vérifié (Python) : la docstring de
functional_violations(cellule 26) est réénoncée en détection de multiplicité, avec un NB sémantiquement correct —p(a,b) ^ p(a,c)entraîneb = cet n'est inconsistant pour un reasoner que siDifferentIndividuals(b,c)est asserté. L'encart « Précision » (cellule 25) porte la nuance au lecteur. C'est le bon réénoncé OWL. - Anti-régression vérifiée au chiffre près : cellules source modifiées = PY {4, 25, 26} et CS {3} — exactement le claim du body ; 0 cellule ajoutée ou supprimée des deux côtés (42→42, 26→26, le décompte code/markdown inchangé), donc aucune purge pédagogique sous le −627 net (re-exécution + outputs re-générés).
- Exécution réelle des deux côtés : exec_count PY
[1..17]/ CS[1..12], 0 cellule sans exec, 0 sans output, 0 erreur dans tous les outputs des deux notebooks. - prev-guard conforme :
prev: MED/notebook-python #14885vérifié MERGED ; rebaseline du registre twin assorti de l'audit 2026-09-06 et d'uneknown_differencesdocumentant précisément ce fix — traçabilité propre.
Réserve (mineure, 1 phrase) : le body affirme que « les deux jumeaux documentent ce contrat » (défaut 2), mais le réénoncé n'existe que côté Python — la cellule 12 C# (inchangée par cette PR) conserve « Un reasoner OWL (HermiT, Pellet) détecterait les violations comme une incohérence », la formulation exacte que le fix Python retire comme surclaim. Si la parité de cadrage est visée à terme, cette phrase restera à aligner (le fix mécanique, lui, est bien symétrique).
0 secret, 0 chemin machine — données synthétiques (métaux), notebooks pédagogiques purs.
Grain: MED/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #14885
Closes #14837
Résumé
Corrige les deux défauts mesurés de
SL-3-RelevanceLearning.ipynb(SymbolicAI/SymbolicLearning) et, par symétrie de parité de contenu, son jumeauSL-3-RelevanceLearning-Csharp.ipynb. Les deux notebooks sont re-exécutés avec leurs sorties.Défaut 1 — témoin de violation sans contradiction
check_determination(cellule 4 Python / cellule 3 C#) construisait le témoin de violation avec les deux premières lignes du groupe, sans vérifier qu'elles diffèrent sur l'attribut cible. Quand le groupe contient trois lignes dont deux s'accordent, le témoin exhibe la paire qui s'accorde (mesuré sur les données du notebook :Cu / high / high vs Cu / high / high).Correctif : le témoin est désormais la première paire qui diffère réellement sur la cible — rendu
Cu(high) vs Fe(medium)etAl(medium) vs Hg(low), qui montrent la contradiction. Fix appliqué àcheck_determinationdans les deux jumeaux.Défaut 2 — parité OWL surclamee
La docstring de
functional_violations(cellule 26) promettait de détecter « exactement ce que détecterait un reasoner OWL (HermiT, Pellet) ». Pour une propriété d'objet fonctionnelle,p(a,b) ^ p(a,c)entraîneb = c: ce n'est une inconsistance que siDifferentIndividuals(b,c)est par ailleurs asserté — ce que le notebook ne pose pas.Correctif : le contrat effectif est réénoncé — détection de multiplicité sur une propriété déclarée fonctionnelle, sans prétention d'égalité stricte au raisonneur OWL. Un encart « Précision » (cellule 25) rappelle cette nuance au lecteur. Les deux jumeaux documentent ce contrat, le notebook Python ne surclame plus la parité.
Rebaseline registre de parité twin
Les deux blobs ont changé (fix + re-exécution) : le registre
scripts/notebook_tools/twin_pairs.d/sl-3-relevancelearning.yamlest rebaseliné dans la même PR, avec la différence documentée dansknown_differences.Preuves de validation
execution_countrenseigné sur toutes les cellules code..net-csharp, 12/12 cellules code exécutées, 0 erreur.raise NotImplementedError/assert False/1/0introduit (2/2 passes).# Solution/# Exemple résolusupprimée ; concordance pédagogique (RBL, sélection d'attributs, top-2 sklearn = {R1,R2}) préservée.Note de distinction de grain (G-VAR-3, §3)
Le genre
notebook-pythonest repris depuis la PR précédente de la lane (#14885). Ce grain est réellement distinct du précédent : #14885 traitait des échappements LaTeX mangés par des chaînes non-raw (correction cosmétique de rendu markdown) ; le présent grain corrige une erreur de logique dans le diagnostic de détermination (construction du témoin de violation) et une promesse de parité OWL surclamee dans une docstring — mécanique et sujet différents, ni l'un ni l'autre ne relève du rendu LaTeX.