Skip to content

enrich(genai,#13410): prose interpretative 02-Retrieval-Avance (densite 713 -> 1737) - #16044

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/densite-13410-rag
Sep 15, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/densite-13410-rag

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2026:CoursIA — prev: MED/tooling #15994

Tranche densite #13410 — GenAI/RAG-et-Memoire-Semantique (02-Retrieval-Avance)

Rotation R6, 9e famille du jour (apres ML, DecInfer, tooling, SMT/Z3, Search, Sudoku, GameTheory, SemanticWeb, GenAI/Texte). Candidat choisi sur mesure LIVE (pedagogy_density.py sur origin/main 854630a72) : 713 prose/cellule pour 11 cellules code.

Notebook Avant Apres Plancher
02-Retrieval-Avance.ipynb 713 1737 1200

Hors twin registry (verifie : grep -rl "RAG-et-Memoire-Semantique" scripts/notebook_tools/twin_pairs.d/ = vide) -> aucune rebaseline requise.

Substitution vs le claim — a declarer

Le [CLAIMED] du 2026-09-13 23:15Z nommait deux notebooks : 02-Retrieval-Avance et 04-Tokenisation-From-Scratch. Apres lecture, 04-Tokenisation-From-Scratch a ete ECARTE : chaque cellule d'enseignement y porte deja sa propre « Lecture du resultat » — l'enrichir aurait produit de la redondance, pas une interpretation manquante. La tranche est donc livree solo sur 02. Le 3e candidat identifie (08-KernelMemory-Hybrid-Search, 886, 14 cellules code sans interpretation suivante) est reporte au cycle suivant : la fenetre ne permettait pas deux notebooks de cette densite.

Les 7 lacunes comblees

Enrichissement markdown-only : 7 cellules inserees APRES la cellule de code lue, chacune ancree sur sa sortie executee. Le notebook portait les en-tetes de section mais aucune lecture de sortie — c'est exactement la lacune traitee.

Cellule code Sortie ancre Lecture ajoutee
[1] env PyTorch 2.11.0+cpu | device : CPU, Seed : 42, 3 modeles locaux le protocole : CPU explicite (portable, cout en temps), cloture locale (scores reproductibles = condition du benchmark de §5), petits modeles = hypothese a tester, pas garantie
[3] corpus 60 documents | 20 themes, 24 questions (20 in-corpus, 4 hors corpus) le corpus est un dispositif de mesure (3 variantes/theme = perturbation seule variable) ; les 4 hors-corpus sont le groupe de controle, pas un oubli ; verite terrain binaire -> nDCG degenere en mesure de position
[5] metriques Recall@3=1.00, nDCG@3=0.693 les deux nombres se recomptent a la main : ideal 1/log2(2)+1/log2(3) = 1,6309, reel 1/log2(3)+1/log2(4) = 1,1309, rapport = 0,693. Recall ignore l'ordre, nDCG non — d'ou sa sensibilite au reranking
[9] bi-encoder (60, 384), top-5 rag-0 0.517 … overfit-1 0.403 … la factorisation (60 docs encodes une fois) et son prix : l'intrus overfit-1 au rang 3, devant rag-1 — proximite semantique de surface (vocabulaire validation/generalisation partage), invisible a deux encodages separes
[11] HyDE document hypothetique degenere + top-5 les 3 symptomes (recopie la consigne, melange FR/EN, invente ancrear) ; le mecanisme encode le texte genere sans le verifier ; solde = bruit (rag-1 monte, rag-0 recule du rang 1 au 3, kubernetes-0 entre). L'hypothese du papier (Gao 2022 : instruct-model) n'est pas satisfaite par flan-t5-small — expose, pas masque
[15] cross-encoder avant/apres rerank le reranker corrige l'intrus (overfit-1 3->4, les 3 docs rag aux rangs 1-3) mais ne recupere rien (composition du top-5 identique) : structurel, il ne choisit que dans la fenetre recue. Cout = 1 forward par PAIRE -> rappel large/pas cher puis rerank etroit/cher
[19] verdict 5 x delta_nDCG -1.000 + hors-corpus -1.000 = disparition (nDCG@10 -> 0), pas une baisse ; HyDE + rerank aussi a -1.000 = un reordonnanceur ne repare pas un rappel manquant. Et le signe : hors corpus, baseline = scores positifs faibles (0.254/0.307/0.233/0.278) contre logits negatifs (-6.658/-4.874/-4.719/-4.043) au rerank — la non-pertinence s'ecrit, ce qui fournit le signal de l'exercice 3 (should_abstain)

Validation

Gate Resultat
Round-trip byte-identity avant edition OK (assert avant ecriture)
Cellules code byte-identiques a origin/main OK (11/11, re-verifie post-commit apres hooks)
Diff +217 insertions pures (commit b9006373a)
enrich_quality_ci.py --base --head rc=0
detect_repeated_prose.py avant : clean ; apres : clean — aucun finding
pre-commit (gitleaks, H.3, #13326 cell-parses, markdown-rendering) Passed au premier essai, aucun auto-fix
pedagogy_density.py (LIVE, post-commit) 1737 >= 1200
C.1 patterns interdits 0
structure 23 -> 30 cellules (+7), aucun id duplique, aucune cellule existante perdue

Notebook deja execute (execution_count = 1..11, 0 erreur, toutes les cellules code portent leurs outputs) -> exception C.2 markdown-only, aucune re-execution requise.

Honnetete

  • La densite livree (1737) depasse le plancher de 45 % la ou les tranches precedentes se posaient vers 1206-1286 : les 7 lacunes de ce notebook etaient des en-tetes de section sans lecture, chacune demandait une interpretation complete, et les blocs [5] (recompte des metriques) et [19] (deux tableaux : regressions + hors corpus) portent une verification manuelle qui ne se raccourcit pas sans perdre l'ancre. md_pct = 57,2 %.
  • Les observations -1.000 et scores negatifs ne sont pas des defauts du notebook : ce sont ses resultats, deja presents avant cette PR. Aucune sortie de cellule n'a ete touchee (markdown-only).

See #13410

🤖 Generated with Claude Code

…te 713 -> 1737)

7 cellules markdown d'interpretation (HyDE, reranking, metriques) ancrees
sur les sorties executees. Markdown-only, C.2 exception : 11 cellules code
byte-identiques a origin/main, 0 erreur, tous outputs presents.

See #13410

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

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

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: 1
  • Code cells validated: 11
  • 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

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 10.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 11.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 13.2s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 13.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 7.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.3s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 60.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.0s

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

@github-actions

Copy link
Copy Markdown
Contributor

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

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.

jsboige added a commit that referenced this pull request Sep 13, 2026
…ill + exec-sequence)

Les deux ratchets bloquants rougissaient sur le meme fichier et la meme
cause : le notebook avait ete EDITE sans etre re-execute.

  - Exec-sequence : CLEAN->NOT_FROM_1 (1..10 sur main, 2..11 sur la branche)
  - Papermill     : STALE_BLOCK (bloc metadata identique a main, decrivant
                    encore le run du 2026-08-20T15:11:56Z)

Re-execution end-to-end via papermill 2.7.0, kernel python3, cwd = dossier du
notebook (la recherche .env du notebook y resout GenAI/.env, sinon la cellule
retombe en mode degrade) :

  start 2026-09-13T23:15:21Z -> end 2026-09-13T23:16:46Z, duree 85,3 s,
  exception None, execution_count = [1..10] (CLEAN), 10 cellules code,
  0 sans sortie, 0 sortie en erreur.

Aucune cellule SOURCE modifiee (0 sur 21) : le diff est integralement
sorties + bloc papermill + sequence d'execution. Les chiffres reproduisent le
tableau du body — BoN difficile 0.67 vs Reflexion 1.00 (+33 pts), facile
sature a 1.00, moyen 0.94 -> 1.00.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #16044 (enrich(genai,#13410): prose interpretative 02-Retrieval-Avance (densite 713 -> 1737)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

jsboige added a commit that referenced this pull request Sep 14, 2026
…ts+prose

Re-execution end-to-end via papermill avec CLAUDISH_PROXY_KEY (env transient,
jamais dans un fichier). Le code de la cellule 2 exigeait deja qwen3.6-35b-a3b
mais le commit parent (e3d0a9a) avait reexecute avec le code AVANT le patch
de la cellule 2 (= gpt-4o-mini), laissant des outputs incoherents avec le code.
Cette PR aligne les trois faces :

  - Code cellule 2 (migration claudish) + token budgets (chat/BoN/Reflexion
    portes a 4096, sinon le modele raisonne et renvoie content="").
  - Outputs cellules 7 et 10 : re-mesures sur notre vLLM maison.
  - Prose cellules 12, 14, 20 : remplace le narratif gpt-4o-mini par les
    chiffres Qwen maison et expose le resultat : saturation 1.00 partout,
    frontiere Snell invisible (effet "recalibrer au besoin" du review point).

Mesure (qwen3.6-35b-a3b, 6 ech par probleme, 3 prob par bucket) :
  facile/moyen/difficile : pass@1..6 = 1.00 partout
  Reflexion K=4 : 1.00 / 1.00 / 1.00

Comparaison vs run gpt-4o-mini (memes problemes) :
  moyen 0.94 -> 1.00, difficile 0.67 -> 1.00
La superiorite du Qwen maison est mesuree firsthand, elle valide le recalibrage
du review point jsboige ("4o-mini est tout autant obsolete, et notre modele
maison qwen devrait etre superieur et preferable"). Reste a enrichir la suite
(MATH/AMC, logique multi-pas - Exercice 1) pour faire reapparaitre la frontiere
compute-optimale BoN vs Reflexion ; le notebook reste valide tel quel pour la
methodologie.

See #16044

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[adjoint — preflight COMMENTED] Vérification exact-head b9006373a8a7d47b2b2ded9420de7c344b75fb64

Relecture effectuée : body complet, commentaires, reviews, surface inline, diff complet du notebook, checks latest-wins et check_unaddressed_nits.py 16044.

  • Scope : enrichissement pédagogique markdown-only de 02-Retrieval-Avance.ipynb, +217/−0.
  • Le remplacement de la tranche initialement réclamée sur 04-Tokenisation est déclaré et motivé dans le body, pas silencieux.
  • B.0 : rc=0, aucune review et aucun thread inline ; commentaires limités aux avis automatisés.
  • CI : 73 checks verts ; les quatre skips sont routiniers, sans échec requis.
  • Séquencement : #15610 et #16049 touchent aussi ce notebook. Le chevauchement avec #16049 est une composition connue : merger #16044 avant #16049, puis vérifier que le diff de #16049 se réduit à son propre garde. Le chevauchement #15610 doit également être recontrôlé par le coordinateur avant signature.

Recommandation adjoint : READY, avec #16044 à séquencer avant #16049 et contrôle de collision #15610. Lecture B.0 finale et merge réservés à myia-ai-01:CoursIA.

@myia-ai-01
myia-ai-01 merged commit 89de6b6 into main Sep 15, 2026
78 of 79 checks passed
jsboige added a commit that referenced this pull request Sep 15, 2026
…sans escalade sur vide

Reparation des trois points de la review ai-01 (CHANGES_REQUESTED au head
0b19d48) :

1. Bucket difficile recompose : 11/17/27/72. Le probleme 49 (vide a tous les
   budgets testes, redondant avec 17) cede sa place a deux_sept (27), seul
   candidat du pilote (25+ candidats, N=6) a succes partiel — juste 1 fois sur
   6 — donc seul regime ou le pass@k peut monter avec k. Controle _c_deux_sept
   par enumeration exacte croisee par complementaire (27 + 973 = 1000).
   Resultat : difficile 0.50/0.58/0.67/0.75 (scaling monotone) et frontiere
   compute-optimale observable — Reflexion K=4 (0.75) devant BoN@4 (0.67) a
   budget egal, nommee comme un tirage (section 4, issue #16289).
2. Titre/body/prose : plus aucun chiffre du run anterieur gpt-4o-mini ; les
   seuls chiffres cites sont ceux de cette execution (markdown reecrit
   post-exec depuis les sorties reelles, markdown-claims 0 non-ancree).
3. Reexecution in-place papermill : execution_count 1..10, 0 erreur, metadata
   input/output_path = basename canonique, 1033 s.

chat() : une reponse vide est TERMINALE — sonde 2026-09-15 : un enonce vide a
4096 tokens l'est aussi a 8192, et la facade repond 5xx au-dela. L'escalade
par doublage fabriquait des minutes de cout par echantillon pour retrouver la
meme vide ; supprimee. Les vides sont comptees a part (BoN 12/60, Reflexion 6).
Fix Accessoire : global vides dans reflexion_sequentielle (UnboundLocalError
latent — le run precedent n'avait jamais atteint cette cellule).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 15, 2026
…DING, advisory #11831)

Le scan advisory md-hierarchy reprochait +1 HINT-AS-HEADING : le titre de
section << ### Note methodologique : ... >> se lit comme un indice (mot-avec-
deux-points en position de heading). Demotion en paragraphe gras, forme
canonique du scanner. Markdown-only : cellules code et outputs byte-identiques.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 16, 2026
…e-exécution in-place (#16054)

* fix(genai,#16044): recalibrer 16_Scaling — 3 niveaux gradues + gpt-4o-mini

Suite graduee arithmetique / GSM8K / MATH-lite (3 problemes/bucket)
pour reveler la frontiere compute-optimale de Snell 2024 sur ce deploiement :
- facile   : arithmetique 1 etape  -> pass@1 = 1.00 (saturation)
- moyen    : GSM8K 2-3 etapes      -> pass@1 = 0.94, pass@2 = 1.00
- difficile: MATH-lite multi-pieges -> pass@1..6 = 0.67 (erreur systematique)

Pivot OpenRouter -> OpenAI direct (gpt-4o-mini) :
- 70B instruct sature TOUT, pas de relief visible
- gpt-4o-mini discriminant : sature les faciles, perfectible sur difficile
- Reflexion sequentiel K=4 atteint 1.00 sur difficile (vs BoN pass@4 = 0.67)
  -> la frontiere BoN/Reflexion apparait sur le bucket difficile, exactement
     ce que predit Snell et al. 2024.

Cellules modifiees : 2 (setup), 3 (chat), 5 (suite graduee + pass@k),
7 (collecte BoN), 10 (Reflexion), 12/14/16/18/20 (markdown reformules
avec vrais chiffres observes).

Validation :
- C.1 : 0 raise NotImplementedError / assert False / 1/0
- C.2 : outputs executes via Papermill kernel python3, transferes
  depuis output (22-cell) vers source (21-cell, enlevee la cellule
  parameters parasite).
- H.4 : execution end-to-end avec execution_count != null sur les
  10 cellules code.
- c.1356 preflight : 0 violations structurelles, structure 21-cell
  preservee.

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

* fix(genai,#16044): re-executer 16_Scaling end-to-end (ratchets papermill + exec-sequence)

Les deux ratchets bloquants rougissaient sur le meme fichier et la meme
cause : le notebook avait ete EDITE sans etre re-execute.

  - Exec-sequence : CLEAN->NOT_FROM_1 (1..10 sur main, 2..11 sur la branche)
  - Papermill     : STALE_BLOCK (bloc metadata identique a main, decrivant
                    encore le run du 2026-08-20T15:11:56Z)

Re-execution end-to-end via papermill 2.7.0, kernel python3, cwd = dossier du
notebook (la recherche .env du notebook y resout GenAI/.env, sinon la cellule
retombe en mode degrade) :

  start 2026-09-13T23:15:21Z -> end 2026-09-13T23:16:46Z, duree 85,3 s,
  exception None, execution_count = [1..10] (CLEAN), 10 cellules code,
  0 sans sortie, 0 sortie en erreur.

Aucune cellule SOURCE modifiee (0 sur 21) : le diff est integralement
sorties + bloc papermill + sequence d'execution. Les chiffres reproduisent le
tableau du body — BoN difficile 0.67 vs Reflexion 1.00 (+33 pts), facile
sature a 1.00, moyen 0.94 -> 1.00.

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

* fix(genai,#16044): recalibrer 16_Scaling sur Qwen maison — code+outputs+prose

Re-execution end-to-end via papermill avec CLAUDISH_PROXY_KEY (env transient,
jamais dans un fichier). Le code de la cellule 2 exigeait deja qwen3.6-35b-a3b
mais le commit parent (e3d0a9a) avait reexecute avec le code AVANT le patch
de la cellule 2 (= gpt-4o-mini), laissant des outputs incoherents avec le code.
Cette PR aligne les trois faces :

  - Code cellule 2 (migration claudish) + token budgets (chat/BoN/Reflexion
    portes a 4096, sinon le modele raisonne et renvoie content="").
  - Outputs cellules 7 et 10 : re-mesures sur notre vLLM maison.
  - Prose cellules 12, 14, 20 : remplace le narratif gpt-4o-mini par les
    chiffres Qwen maison et expose le resultat : saturation 1.00 partout,
    frontiere Snell invisible (effet "recalibrer au besoin" du review point).

Mesure (qwen3.6-35b-a3b, 6 ech par probleme, 3 prob par bucket) :
  facile/moyen/difficile : pass@1..6 = 1.00 partout
  Reflexion K=4 : 1.00 / 1.00 / 1.00

Comparaison vs run gpt-4o-mini (memes problemes) :
  moyen 0.94 -> 1.00, difficile 0.67 -> 1.00
La superiorite du Qwen maison est mesuree firsthand, elle valide le recalibrage
du review point jsboige ("4o-mini est tout autant obsolete, et notre modele
maison qwen devrait etre superieur et preferable"). Reste a enrichir la suite
(MATH/AMC, logique multi-pas - Exercice 1) pour faire reapparaitre la frontiere
compute-optimale BoN vs Reflexion ; le notebook reste valide tel quel pour la
methodologie.

See #16044

* fix(genai,#16044): bucket difficile recompose par la mesure + chat() sans escalade sur vide

Reparation des trois points de la review ai-01 (CHANGES_REQUESTED au head
0b19d48) :

1. Bucket difficile recompose : 11/17/27/72. Le probleme 49 (vide a tous les
   budgets testes, redondant avec 17) cede sa place a deux_sept (27), seul
   candidat du pilote (25+ candidats, N=6) a succes partiel — juste 1 fois sur
   6 — donc seul regime ou le pass@k peut monter avec k. Controle _c_deux_sept
   par enumeration exacte croisee par complementaire (27 + 973 = 1000).
   Resultat : difficile 0.50/0.58/0.67/0.75 (scaling monotone) et frontiere
   compute-optimale observable — Reflexion K=4 (0.75) devant BoN@4 (0.67) a
   budget egal, nommee comme un tirage (section 4, issue #16289).
2. Titre/body/prose : plus aucun chiffre du run anterieur gpt-4o-mini ; les
   seuls chiffres cites sont ceux de cette execution (markdown reecrit
   post-exec depuis les sorties reelles, markdown-claims 0 non-ancree).
3. Reexecution in-place papermill : execution_count 1..10, 0 erreur, metadata
   input/output_path = basename canonique, 1033 s.

chat() : une reponse vide est TERMINALE — sonde 2026-09-15 : un enonce vide a
4096 tokens l'est aussi a 8192, et la facade repond 5xx au-dela. L'escalade
par doublage fabriquait des minutes de cout par echantillon pour retrouver la
meme vide ; supprimee. Les vides sont comptees a part (BoN 12/60, Reflexion 6).
Fix Accessoire : global vides dans reflexion_sequentielle (UnboundLocalError
latent — le run precedent n'avait jamais atteint cette cellule).

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

* fix(genai,#16044): demote la note methodologique en gras (HINT-AS-HEADING, advisory #11831)

Le scan advisory md-hierarchy reprochait +1 HINT-AS-HEADING : le titre de
section << ### Note methodologique : ... >> se lit comme un indice (mot-avec-
deux-points en position de heading). Demotion en paragraphe gras, forme
canonique du scanner. Markdown-only : cellules code et outputs byte-identiques.

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

---------

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 16, 2026
…te 713 -> 1737) (#16044)


7 cellules markdown d'interpretation (HyDE, reranking, metriques) ancrees
sur les sorties executees. Markdown-only, C.2 exception : 11 cellules code
byte-identiques a origin/main, 0 erreur, tous outputs presents.

See #13410

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants