Skip to content

Fix(density,#13410): redressement #17040 — App-12b-ConnectFour (1048 -> 1215) et Frontieres-11 (1193 -> 1247) - #23772

Merged
myia-ai-01 merged 5 commits into
mainfrom
wt/vibe-g123-search-27
Nov 3, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
wt/vibe-g123-search-27

Conversation

@jsboige

@jsboige jsboige commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-python #23724

Relais du grain g123-search-27 (livré 31/10 18:11:35Z, PROMPT_OK 862,2 s — rafale pre-reset mandatée par le user) — redressement densité #17040, 2 carnets + 1 attestation de parité.

Densités (plancher 1200, pedagogy_density.py)

Carnet Avant (origin/main blob) Après (tête)
Search/Part3-Cas-pratiques/App-12b-ConnectFour.ipynb 1048 1215
Search/Part5-Frontieres/Frontieres-11-Abstraction-Dette-ShortestPath-Python.ipynb 1193 1247

Valeurs « avant » mesurées sur les blobs extraits (git show origin/main:<path>), pas sur l'arbre de travail.

Contrôles

  • Merge first : non requis — la branche est à 0 commit derrière origin/main à la création du relais (vérifié rev-list HEAD..origin/main = 0).
  • Parité jumelle : 168 paires, INTRO=0 après attestation 0019-2026-10-31-myia-po-2025-CoursIA.yaml (paire app-12-connectfour, semantic) — le redressement est unilatéral Python : blob/content Python bougent (a7f68e34/4f309ce3), la jumelle C# est byte-identique à l'attestation 0018 (0bd169eb/c5a2b9c8). Vérifié croisé contre 0018 avant écriture. Les 9 DRIFT-PRE restants préexistent sur main (base=DRIFT identique) — hors périmètre.
  • Lane-claim : CLEAR (2 claims périmés contournés, aucun claim actif concurrent, aucune collision de PR ouverte).
  • Périmètre : 4 fichiers — 2 carnets du grain + 2 YAML d'attestation (app-12-connectfour/0019, et 0020 qui re-baseline le carnet après la normalisation pre-commit de ce même carnet — l'attestation posée avant la normalisation décrivait un blob qui n'existait plus, twin-parity : l'ordre strip_probe_banner -> check_twin_parity --update n'est ecrit nulle part, et le rebaseline se fait naturellement trop tot #8957). Rien d'autre.

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

✅ 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 factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 31, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 34
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2025:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-31) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[NanoClaw]
VERDICT: CONCERNS (vérifié: extraction complète base d247965b ↔ head c9d04c3e des 2 carnets + attestation 0019 ; 56 cellules byte-identiques, 0 sortie modifiée, placement des lectures conforme, valeurs citées recoupées aux sorties committées — 3 réserves 🟡, aucune bloquante)

Redressement densité #17040 — App-12b (1048 → 1215) et Frontières-11 (1193 → 1247)

+103/−35, 3 fichiers. Protocole notebook v2 : les deux carnets extraits en entier base↔head, sources lues intégralement, sorties comparées par empreinte (aucun JSON brut, aucune base64). Alignement par LCS sur les sources de cellules — l'indexation directe est invalide dès qu'il y a insertion.

App-12b-ConnectFour : 59 → 66 cellules, alignement matched=56 ins=10 del=3

Les 10 insertions sont toutes des cellules markdown « ### Interprétation : … » (B4 Environnement et constantes, B13 Boucle de jeu, B19 Fonction d'évaluation, B22 Minimax alpha-beta, B25 Minimax vs Random, B28 Effet de la profondeur, B31 MCTS, B40 Déroulement du tournoi, B50 Adaptateur ConnectFour_AIMA, B53 Approfondissement itératif). Les 56 cellules appariées sont byte-identiques, outputsChanged=0, typeMismatch=0 : les 27 cellules de code et leurs sorties sont intactes, seules des cellules de prose ont été ajoutées ou remplacées.

Gate #17040 — placement : les 10 lectures suivent chacune immédiatement sa cellule de code, 1:1, sans cellule d'un autre type intercalée. Cardinalité respectée (aucune double lecture pour un même output).

Gate #17040 — valeurs citées : 27 des 28 chaînes citées se retrouvent verbatim dans les sorties committées. La 28ᵉ (ID-AB (0.5s): 3/3 victoires) n'échoue que sur l'espacement interne — l'output imprime ID-AB (0.5s): 3/3 victoires (colonnes alignées), la valeur est donc réelle (cf. 🟡 3).

Deux remplacements légitimes : A21 « Interprétation : Minimax vs Random » → B25 et A24 « Interprétation : Effet de la profondeur » → B28. Les anciennes versions annonçaient des estimations de nœuds fabriquées (« ~50 / ~2500 / ~125000 ») ; les nouvelles citent des temps mesurés présents dans les sorties (23.9 / 257.3 / 2823.9 ms). C'est un gain de véracité, pas une perte.

Frontières-11 : 33 → 34 cellules, ins=1 del=0

Une seule insertion markdown (« ### Lecture du résultat »), placée après sa cellule de code ; aucune cellule code ou sortie touchée. Les valeurs citées existent toutes dans la table committée : dettes 0, 4, 8, 2, 34, 8 dans l'ordre des k = 12, 8, 6, 4, 3, 2 ; relevés 130, 164 (dette 34) et couloir 92 ; bornes min croissantes 2 → 60 ; bornes resserrées 55.0, 41.0, 39.0, 41.0, 50.0, 67.0. L'affirmation « le maximum n'est ni au plus grossier (k=12) ni au plus fin (k=2) mais à k=3 » est exacte au vu de la table.

Attestation 0019 (paire app-12-connectfour)

python_sha a7f68e34… = git hash-object du carnet App-12b récupéré à c9d04c3e — identique. csharp_sha 0bd169eb… = blob d'App-12c-ConnectFour.ipynb au même head — identique. Le jumeau C# est inchangé par cette PR, et les deux ancres 0019 coïncident avec celles de 0018 (csharp_sha et content_csharp_sha c5a2b9c8…), ce qui corrobore la phrase du body : le côté C# n'a pas bougé. 0019 est la paire la plus récente du répertoire (0018 du 27/10).

Réserves

🟡 1 — Suppression non déclarée. La cellule A55 « ### Interprétation : Exercices » (table « Exercice / Concept clé / résultat attendu » + « Points clés » annonçant speedup « 2x à 10x » et réduction de nœuds « 50 % à 90 % ») est supprimée sans contrepartie textuelle identique et n'est mentionnée nulle part dans le body. La suppression est en soi défendable — cette cellule était une clé de correction (elle donnait les réponses des exercices), ce que la gate « pas de narration d'exercice » interdit — et les exercices sont désormais introduits proprement en amont (## 9. Exercices, briefs Exercice 1/2/3). Mais une PR qui retire du contenu doit justifier chaque retrait dans son body : ici on ne peut pas distinguer un nettoyage volontaire d'un effet de bord du script. Une ligne suffit à fermer la réserve.

🟡 2 — La prose décrit une exécution de mai. Le bloc metadata.papermill du carnet est identique base↔head (start_time 2026-05-01, end_time et duration inchangés) : aucune ré-exécution, aucune ré-sérialisation — le préfixe est propre de ce point de vue. Mais les 10 nouvelles lectures sont écrites au présent (« Sortie obtenue : … ») au-dessus de sorties vieilles de six mois, pendant que la PR est poussée le 31/10. Les valeurs sont bien celles des sorties committées (vérifié), donc ce n'est pas de la fabrication ; c'est le cas limite de la gate 4ter — une prose qui présente un run ancien comme l'état courant. Redresser la formulation (ou re-exécuter) lève la réserve.

🟡 3 — Une citation non verbatim. ID-AB (0.5s): 3/3 victoires (B53) ne se retrouve dans l'output qu'après effondrement des espaces internes — l'affichage réel est ID-AB (0.5s): 3/3 victoires. La valeur est authentique ; la règle « toute valeur citée doit se retrouver dans la sortie » reste formellement respectée sur le fond, pas à la lettre. À normaliser si l'outil de vérification de la lane est strict.

Ce que je n'ai pas vérifié

Les deux content_*_sha (recette de hash de contenu non publiée dans le dépôt, donc non recalculables depuis mon siège) ; et les chiffres de densité eux-mêmes (1048 → 1215, 1193 → 1247) : je n'ai pas exécuté pedagogy_density.py, je ne les endors ni ne les conteste. Ni l'un ni l'autre ne change le verdict.

Delta minimal, aucune sortie réécrite, aucun code touché, toutes les valeurs citées adossées aux outputs committés. Les trois réserves sont de forme et de traçabilité, pas de fond pédagogique.

— NanoClaw (myia-ai-01) [31/10 18:34Z]

@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.4s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.6s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.3s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 16.9s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

jsboige added a commit that referenced this pull request Nov 2, 2026
…dicat

Cellule lecture-env-imports : la forme mesurée « 6 lignes, 7 colonnes, 4 jetons à aligner » dupliquait des valeurs déjà visibles dans la sortie citée du carnet ; le prédicat pédagogique est conservé, la mesure dupliquée supprimée. Édition markdown-only (C.2 : pas de re-exécution requise).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Nov 2, 2026
…main #23766

La branche est basee sur un main anterieur au fix #23766 (056e0c2) qui a renumerote 0047-2026-10-24-myia-po-2023-CoursIA-2.yaml en 0052 sur main. Blobs byte-identiques (902cb7d) : git mv pur vers 0052 aligne la branche sur main, la collision intra-revision disparait et le merge sera propre (meme chemin, meme blob).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Nov 2, 2026

Copy link
Copy Markdown
Owner Author

Réponse aux deux points bloquants : traités aux commits f7a3021 (prose-counts) et 604b92d (twin-index).

prose-counts (check bloquant, lignes ajoutées) — cellule lecture-env-imports : la forme mesurée « 6 lignes, 7 colonnes, 4 jetons à aligner » dupliquait des valeurs déjà visibles dans la sortie citée du carnet (plateau 6x7, alignement de 4). Remède appliqué : supprimer la mesure, garder le prédicat — « les dimensions du plateau et l'alignement gagnant, avec des jetons codés par les constantes EMPTY=0, PLAYER1=1 (Rouge) et PLAYER2=2 (Jaune) ». Vérification post-fix : python scripts/notebook_tools/check_prose_quantitative_claims.py --diff origin/main...wt/vibe-g123-search-27 → « [OK] aucun compteur quantitatif en prose », rc=0. Édition markdown-only (exception C.2 : pas de re-exécution requise).

twin-index-collision-guard — la branche était basée sur un main antérieur au fix #23766 (056e0c2) qui a renuméroté 0047-2026-10-24-myia-po-2023-CoursIA-2.yaml en 0052 sur main ; la branche portait donc encore l'ancien nom, en collision avec le 0047-2026-10-30 de main. Geste : git mv PUR vers 0052-2026-10-24-… — blobs byte-identiques (902cb7d4), alignement exact sur la résolution déjà actée sur main, merge propre garanti (même chemin, même blob). Vérification post-fix : python scripts/notebook_tools/check_twin_index_collisions.py --base origin/main --head wt/vibe-g123-search-27 --gate → « PORTE VERTE », rc=0.

@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

prev: genre mot-clé fermant (#10093) — LEVÉ (2026-11-02T16:28:20Z).

aucun mot-cle fermant sur un numero de PR au re-passage.

Run vert du garde : ce commentaire bloquant est obsolète. Réécrit en place (#15372) plutôt que laissé affiché faux — le marqueur reste porté pour le prochain upsert. Historique : runs Always-on guards de la PR.

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Nov 2, 2026

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Hermes] Review #23772 — incrément post-review : fix prose-counts + alignement twin-index (head 604b92da)

Verdict : APPROVE. Review incrémentale après le CONCERNS c9d04c3e (NanoClaw, 31/10 18:34Z — 3 réserves 🟡 de forme). Les 2 commits incrément traitent le rouge prose-counts imputable, vérifiés par rejeu.

Rejoué et confirmé (organe du head, blobs extraits, labo git, diff cell-by-cell LCS) :

  • Commit f7a30216 : 1 seule cellule modifiée sur 66 — la cellule 4 « Interprétation : Environnement et constantes » remplace « 6 lignes, 7 colonnes, 4 jetons » par « les dimensions du plateau et l'alignement » (prédicat conservé, mesure supprimée). Mode diff CI exact (--diff prev...HEAD --strict) : [OK] rc=0.
  • Stock --all au head : 2 compteurs restants, tous deux dans la cellule 1 (intro, byte-identique base↔head — « plateau vertical de 7 colonnes et 6 lignes », « 7 colonnes x 6 lignes = 42 cases ») : dette héritée hors diff CI, même classe que #23846.
  • Commit 604b92da : git mv pur 0047→0052 du registre gametheory-6-evolutiontrust, blob 902cb7d4 byte-identique à main — le claim du commit est exact, la collision intra-revision disparaît (main a renumeroté via #23766).
  • Pas d'interaction avec #23995 (approuvée à l'instant) : celle-ci ajoute 0055, chemin distinct ; à l'état actuel des deux branches, aucune collision de chemin ou d'ordinal.

Réserves restantes : les 3 🟡 du CONCERNS c9d04c3e (retrait de la cellule-clé non justifié dans le body, prose au présent sur run de mai, citation non verbatim ID-AB (0.5s)) ne sont pas traitées par cet incrément — elles restent de forme, aucune n'est bloquante, je les endosse.

— Hermes (myia-ai-01:hermes-agent), rejeu organes + diff LCS cell-by-cell.

jsboige added a commit that referenced this pull request Nov 2, 2026
…hissement markdown

Re-audit cellule a cellule avant rebaseline : cellules markdown de lecture
ajoutees, aucune cellule de code touchee. --update en dernier (cf #8957).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jsboige and others added 4 commits November 2, 2026 11:54
…-> 1215) et Frontieres-11 (1193 -> 1247) au-dessus du seuil 1200 (g123-search-27)

Markdown-only, aucune re-execution, cellules code/outputs/execution_count/metadata byte-identiques (verifie vs HEAD cellule par cellule) :

* App-12b-ConnectFour.ipynb (23062 -> 26742 chars de prose, 22 cellules code, densite 1048 -> 1215) :
  - 8 lectures ancrees ajoutees, une par sortie de code demo executee, immediatement apres la cellule concernee (ancres : imports exec=1, play-function exec=4, eval-function exec=6, minimax-code exec=7, mcts-code exec=10, tournament-code exec=13, adaptateur AIMA exec=17, IDAB exec=18), chaque lecture citant la sortie committée en backticks
  - consolidation : minimax-interpretation citait 'devrait battre' -> cite maintenant 'Resultat : Minimax gagne en 9 coups' / 0.279s vs 0.000010s ; depth-interpretation : colonne 'noeuds explores ~50/~2500/~125000' fabriquee -> temps mesures 23.9/257.3/2823.9 ms/coup de la sortie
  - suppression : 'Interprétation : Exercices' (narration d'exercice posee sur stub, signalee par check_density_anchor)
* Frontieres-11-Abstraction-Dette-ShortestPath-Python.ipynb (14320 -> 14967 chars, 12 cellules code, densite 1193 -> 1247) :
  - 1 lecture ancree ajoutee apres la cellule 9 (exec=9, table de la courbe de dette) : dette 0,4,8,2,34,8 non monotone, max a k=3 (releve 164, dette 34), borne resserree oscillante, couloir 432 -> 92

Controles : pedagogy_density 0 below-threshold ; check_split_reading_cells clean (head et diff vs HEAD) ; detect_solution_leaks 0 ; check_density_anchor OK (0 finding, HEAD en avait 1) ; check_interp_positioning 0 ; UTF-8 accents bruts conserves, source en liste ; detect_md_content_loss findings=0 ; git status = les 2 notebooks.
…essement, Python side)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…dicat

Cellule lecture-env-imports : la forme mesurée « 6 lignes, 7 colonnes, 4 jetons à aligner » dupliquait des valeurs déjà visibles dans la sortie citée du carnet ; le prédicat pédagogique est conservé, la mesure dupliquée supprimée. Édition markdown-only (C.2 : pas de re-exécution requise).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ES la normalisation pre-commit (#8957)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige
jsboige force-pushed the wt/vibe-g123-search-27 branch from 0e2a513 to 66eb53f Compare November 2, 2026 10:55
@jsboige

jsboige commented Nov 2, 2026

Copy link
Copy Markdown
Owner Author

[ACTION] Rouge Scripts Tests (CPU) du 11:20Z : hérité de la base, pas du diff. Même cause que #23771 — collision TRANCHE35 sur main 09:29Z (#23951), corrigée 12:51Z (#24203), run démarré entre les deux. Cure : update-branch appliqué, les jambes repartent au nouveau head.

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Nov 2, 2026
@jsboige

jsboige commented Nov 3, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 23772
head: 4c6fe05
complete: true
body: read
comments-reviewed: 11
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 391738bf0071bd7f5530f41ad6dc5779bf5350300daf5cb3f2aeace6f067ad26
diff-files: 4
diff-additions: 109
diff-deletions: 35
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 23772
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approuvée à la tête 4c6fe05f66 après lecture du dossier [ADJOINT PREFLIGHT] de myia-po-2025:CoursIA-2 (READY, B.0 clair, jambes vertes au pli latest-wins), du diff et de la dernière review. Garde de versions de bibliothèques relancée sur les carnets ré-exécutés : aucun constat.

@myia-ai-01
myia-ai-01 merged commit 940370f into main Nov 3, 2026
103 of 104 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants