Journal
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
Progression
Section intitulée « Progression »- Programme du cours : .NET 10, compilé contre le
GA.Domain.Corede GA à un commit épinglé - CI : la sortie de chaque leçon comparée avec son fichier attendu sur trois OS
- Leçon 1 : notes, classes de hauteurs et manche
- Leçon 2 : gammes, modes et identifiants de gamme sur 12 bits
- Leçon 3 : accords, chiffrages, renversements et voicings
- Leçon 4 : classes d’ensembles, vecteurs d’intervalles et relation Z
- Diagrammes : bracelets, grilles d’accords, manche et cercles des quintes dessinés par le programme du cours, vérifiés par la CI
- Leçon 5 : tonalités, armures et cercle des quintes
- Leçon 6 : les accords d’une tonalité
- Leçon 7 : cadences, ii–V–I et tonalité d’une progression
- Leçon 8 : le ukulélé et la basse
- Annexe A : tous les instruments du catalogue de GA
- Annexe B : la hiérarchie OPTIC
- Annexe C : un verdict sur chaque ligne
DIFFdes leçons 1 à 7 - Leçon 9 : conduite des voix et notes communes
- Leçon 10 : substitutions et emprunt modal
- Leçon 11 : les modes en profondeur
- Leçon 12 : la symétrie et les modes à transpositions limitées
- Leçon 13 : les accords étendus et altérés
- Leçon 14 : les voicings de guitare, shell, drop 2 et drop 3
- Leçon 15 : le manche, CAGED, doigtés et jouabilité
- Leçon 16 : arpèges, théorie accord–gamme et improvisation
- Leçon 17 (voir le plan sur la page de mission)
Les quarante divergences entre l’arithmétique de ce cours et celle de Guitar Alchemist, les dix-neuf défauts auxquels elles se ramènent et le verdict de chacune sont dans l’annexe C ; seize ont été fusionnés en amont dans GA #711, et trois restent des limites de conception documentées. Ce tableau porte sur ce que l’annexe ne couvre pas : les constats hors de la comparaison exécutable des leçons 1 à 7. La ligne BraceletNotation a été lue et non exécutée, et le dit ; les lignes des leçons 9 à 12 viennent de leurs programmes, qui compilent des fichiers de GA, recopient ses fonctions telles quelles ou les réécrivent, et chaque ligne dit lequel.
| Attendu | Ce qui se passe | Où | Mesure | État |
|---|---|---|---|---|
getAllInstruments() rend les instruments que contient le YAML |
Il en rend un, et deux accordages, en retombant sans erreur ni ligne de journal sur des valeurs de guitare écrites en dur | InstrumentsYaml/InstrumentsConfig, GA.Business.Config à a826864 |
Le fichier contient 122 instruments et 280 accordages ; le chargeur en a rendu 1 et 2. Sept des 280 ne sont même pas des hauteurs : deux entrées de pedal steel commencent par le nom de leur accordage, une par le mot Tuning, une par le nom de l’instrument, une garde un bout de son nom |
Corrigé en amont par #734, fusionnée le 2026-09-24 : le fichier est lu comme un dictionnaire, 122 instruments et 280 accordages, et un échec le dit maintenant sur stderr au lieu de répondre en silence avec la guitare intégrée. Neuf accordages ont été rétablis d’après Tunings.txt ; les deux entrées de harpe-guitare gardent leur ` |
Tuning.BuildPitchArray numérote correctement les cordes de n’importe quel accordage |
Il décide quel bout est la corde 1 en comparant seulement la première hauteur à la dernière : un accordage rentrant sort donc à l’envers | Tuning.BuildPitchArray à a826864 |
Les deux accordages de banjo 5 cordes de GA lui-même, dont la chanterelle est écrite en premier et sonne plus haut que la dernière, sont numérotés à l’envers — ce que contredit le commentaire de Str, qui dit que la corde 1 est la plus aiguë |
Corrigé en amont par #734 : le sens est décidé en comptant les pas montants et descendants entre cordes voisines, si bien que les deux accordages de banjo numérotent la corde 1 comme la plus aiguë 2026-09-15, 2026-09-24 |
Le paramètre documenté de Fretboard.GetNote correspond à son indexation |
Le commentaire dit « Zero-based string index (0 = lowest string) » et le code indexe Tuning[stringIndex + 1], où la corde 1 est la plus aiguë |
Fretboard.GetNote à a826864 |
C’est le commentaire qui a tort, pas le code | Reproduit, documentation seulement 2026-09-15 |
Le ga_chord_to_set du serveur MCP orthographie l’accord qu’on lui donne |
Il tire ses classes de hauteurs d’une closure F# qui garde un intervalle par extension et laisse tomber les altérations : l’orthographe et le numéro de Forte sont donc faux | DomainClosures.fs#L85-L98, serveur MCP de GA |
Cm7b5 donne {C, Eb, G, Bb} et 4-26, là où 4-27 avec un sol♭ est juste ; Cdim7 donne 4-27 et « Scale: Major Seventh », là où 4-28 est juste |
Corrigé en amont par #681, fusionnée le 2026-09-23. Relancé sur 27a1257 : Cm7b5 donne {C, Eb, F#, Bb} et 4-27, Cdim7 donne 4-28 2026-09-14, 2026-09-24 |
ga_set_class_subs range sous la bonne qualité les accords qu’il liste |
Tous tombent sous [maj], parce que le test est c.EndsWith(""), vrai de toute chaîne |
ChordAtonalTool.cs#L187-L190 |
Les listes elles-mêmes sont justes ; seul le regroupement ne l’est pas | Corrigé en amont par #681. Relancé sur 27a1257 : les accords parfaits majeurs sous [maj], les mineurs sous [m] 2026-09-14, 2026-09-24 |
ga_scale_by_id et ga_scale_by_name répondent pour une gamme que GA connaît |
ga_scale_by_id(2741) rend Major avec Forte Number: Some(n/a) là où on attend 7-35, et ga_scale_by_name("Dorian") reste introuvable |
serveur MCP de GA | Un champ faux, une recherche qui n’aboutit pas | Corrigé en amont par #681. Relancé sur 27a1257 : Forte Number: 7-35, et Dorian trouvé sous l’identifiant 1709 2026-09-14, 2026-09-24 |
| Tout outil MCP qui prend un accord ou une tonalité répond | Plusieurs renvoient la chaîne « An error occurred » plutôt qu’une erreur MCP | serveur MCP de GA | get_chord_voicings("C", maxFret 3), get_neighboring_keys et get_diatonic_chords("A minor") répondent tous ainsi ; ga_search_voicings("C major open chord") a ignoré la contrainte « open » et rendu 8-8-x-x-7-x |
Reproduit ; le commit de build du serveur n’a jamais été confirmé, ces lignes ne sont donc pas épinglées à a826864 2026-09-14. Sur 27a1257, get_neighboring_keys("Key of C") répond F, C, G ; les trois autres ont besoin de GaApi et n’ont pas été relancés 2026-09-24 |
ga_key_from_progression et ga_analyze_progression trouvent la tonalité qu’établit une cadence |
Ils comptaient les fondamentales des accords dans la gamme mineure naturelle et préféraient celle du premier accord : Dm7 G7 Cmaj7 donnait D mineur, Am Dm E7 Am A majeur |
GuitaristProblemTools.cs#L157-L223, DomainClosures.fs#L255-L336 |
Sur 27a1257 : Dm7 G7 Cmaj7 donne C majeur, ii V I ; Am Dm E7 Am donne A mineur, avec E7 noté v et compté hors de la tonalité ; Am F C G met toujours A mineur en tête, à égalité 4/4 avec C majeur, contre la description de l’outil lui-même |
Corrigé en amont par #625, fusionnée le 2026-09-24, pour les deux cadences ; le chiffrage et la description restent, non signalés 2026-09-15, 2026-09-24 |
BraceletNotation.tsx pose ses points sur ses propres rayons |
Les points sont posés à angle − 90° tandis que les rayons utilisent cos(angle) sans décalage, soit un quart de tour d’écart ; findSymmetryAxes rate en outre les axes qui tombent entre deux notes et compte chaque axe deux fois |
ReactComponents/ga-react-components de GA |
Lu dans la source, jamais exécuté | Reproduit par le test de #733, et corrigé par elle, fusionnée le 2026-09-24 2026-09-15, 2026-09-24 |
ga_common_tones et la compétence CommonTones du chatbot nomment chaque note que deux accords partagent |
Les deux appellent la closure F# domain.commonTones, qui construit chaque accord à partir de la triade de sa qualité plus un intervalle par extension, tiré d’une table de six entrées, et laisse tomber les altérations |
DomainClosures.fs#L85-L98, #L488-L531 |
Le serveur en service le 2026-09-30 (version non indiquée) : 5 paires sur 7 perdent une note — F pour Bm7b5/G7, B pour Cmaj9/Em7, A pour Cdim7/F7 et pour C6/Am7, B♭ pour C9/Gm7 | Corrigé sur la branche main de GA par #681, dont chordTones alimente maintenant aussi domain.commonTones : lu sur 5c3a52a, pas exécuté contre un serveur compilé après 2026-09-30 |
VoiceLeadingSkill renvoie la plus petite conduite des voix, comme le dit sa réponse (“This is the optimal pitch-class assignment”) |
Il donne aux accords la même taille en répétant toujours la fondamentale du plus petit | VoiceLeadingSkill.cs#L131, #L185-L194 |
G → Cmaj7 : 5 demi-tons là où il en existe 3, avec B doublé. 1260 des 2880 paires triade → septième manquent le minimum, de 4 demi-tons au plus, et autant dans l’autre sens | Reproduit en réécrivant la règle dans le programme du cours ; le chatbot lui-même n’a pas été exécuté ; non signalé 2026-09-30 |
| Les dix exemples de requêtes de la compétence sont lus par son propre motif | « voice leading C major to G major » ne correspond pas : le motif veut un chiffrage d’accord juste avant « to ». La compétence est choisie par le sens (CanHandle renvoie false) : elle recevrait donc cette requête et répondrait “Ask about voice leading between two chords” |
VoiceLeadingSkill.cs#L35-L57 |
1 exemple sur 10 | Reproduit avec le motif recopié tel quel ; le chatbot lui-même n’a pas été exécuté ; non signalé 2026-09-30 |
ga_voice_leading_pair apparie le voicing le plus court “against its nearest neighbors”, comme le dit son commentaire |
Il trie les deux voicings, les apparie depuis le bas et compte 3 demi-tons par note restante, si bien qu’une basse ajoutée ou retirée décale toutes les voix | CompositionTools.cs#L312-L336 |
G ouvert → C ouvert : 28 là où 10 existe ; G7 ouvert → C ouvert : 28 là où 8 existe ; xx2010 → x32010 : 19 là où 3 existe. Sa réponse en service pour G7 → C classe en tête des voicings dont les notes en plus sont en haut, là où apparier depuis le bas est juste |
Reproduit avec la fonction recopiée telle quelle ; non signalé 2026-09-30 |
VoiceLeadingSpace, avec la transposition mais sans l’équivalence d’octave, donne la même distance dans les deux sens |
Il n’essaie que des transpositions vers le haut, de 0 à 11 demi-tons | VoiceLeadingSpace.cs#L46-L61 |
C4 majeur → B3 majeur 0, B3 majeur → C4 majeur 3 ; C4 majeur → C5 majeur 36, C5 majeur → C4 majeur 3, là où 0 est juste pour les quatre. Avec l’équivalence d’octave, le raccourci par décalages circulaires est exact sur toutes les paires d’ensembles de 3 et de 4 notes | Reproduit avec le fichier de GA compilé tel quel ; seuls des tests appellent la classe à a826864 ; non signalé 2026-09-30 |
SetClassOpticIndex.Distance entre deux classes d’ensembles de même taille est une distance de conduite des voix, comme dans l’article qu’il cite |
Son commentaire choisit “the nearest-neighbor sum approach (approximation)” : chaque note va à la note la plus proche de l’autre classe, si bien que plusieurs voix peuvent en partager une | SetClassOpticIndex.cs#L53-L76, #L167-L224 |
Sur les 144 paires ordonnées des 12 classes de tricordes : 35 sous le minimum un-à-un, 0 au-dessus, 70 qui changent quand on les échange ; (012) → (048) donne 2, (048) → (012) 6, l’un-à-un 6 | Reproduit avec le fichier de GA compilé tel quel ; son seul appelant hors des tests, ShapeGraphBuilder, ne l’utilise que si VoiceLeadingWeight dépasse 0, et sa valeur par défaut est 0 ; non signalé 2026-09-30 |
La citation de SetClassOpticIndex mène à l’article de Callender, Quinn et Tymoczko |
Elle donne Music Theory Online 14(3) et un lien mtosmt.org qui redirige vers la page d’erreur de la revue ; l’article est paru dans Science 320 (2008), doi:10.1126/science.1153021 |
SetClassOpticIndex.cs#L15-L18 |
Lien suivi le 2026-09-30 | Reproduit, documentation seulement ; non signalé 2026-09-30 |
Le ga_chord_substitutions du serveur MCP classe les substituts diatoniques d’un accord dans la tonalité donnée, ou dans la tonalité de l’accord, comme le montre sa description |
Sans tonalité, la closure F# prend la lettre de la fondamentale, laisse tomber l’altération et suppose le majeur ; l’exemple de la description de l’outil est faux sur les trois accords | DomainClosures.fs#L558, GaDslTool.cs#L212 |
Am est comparé à A majeur, qui sort en tête ; F♯m à F majeur ; E♭ à E majeur. Pour Am en C majeur, la description dit C ★★★, Em ★★, F ★, là où la closure donne C ★★, F ★★, Dm ★, Em ★ | Reproduit en réécrivant la closure dans le programme du cours ; le serveur lui-même n’a pas été exécuté. Inchangé sur main (5c3a52a) ; non signalé 2026-10-01 |
| La même closure construit les accords altérés et étendus avec toutes leurs notes | Elle ne lit que la qualité et les extensions, dans la table de six entrées de la ligne ga_common_tones de la leçon 9 |
DomainClosures.fs#L85-L98, #L603-L609 |
Bm7♭5 est B D F♯ A, donc Dm partage 2 notes avec lui au lieu de 3 ; G9 et G13 sont construits sans leur septième, et n’ont donc pas de substitut tritonique | Corrigé sur la branche main de GA par #681 : la closure tire ses notes de chordTones (#L663 à 5c3a52a) ; lu, pas exécuté 2026-10-01 |
ChordSubstitutionSkill appelle un accord dominante secondaire quand il peut en être une |
Le test ne compare que les fondamentales : une quinte d’écart suffit | ChordSubstitutionSkill.cs#L262 |
Dm → G et F♯ → Bdim reçoivent « Secondary Dominant », alors que Dm est mineur et qu’une triade diminuée ne peut pas être tonicisée | Reproduit avec le test recopié tel quel ; le chatbot lui-même n’a pas été exécuté. Inchangé sur main ; non signalé 2026-10-01 |
| La liste à un accord de la compétence classe les substituts par proximité harmonique, D♭7 parmi ceux de G7, comme le promet sa description | Tous les accords de même vecteur d’intervalles sont ex æquo à la distance 1, parce que GrothendieckDelta.FromIcVs change une différence nulle en 1, et le tri stable les laisse dans l’ordre des nombres sur 12 bits : la liste est faite des cinq plus petits nombres de la classe d’ensembles de l’accord |
GrothendieckDelta.cs#L125-L131, ChordSubstitutionSkill.cs#L164-L174 |
G7 : Dm7♭5, A♭7, F7, D7, E♭m7♭5 ; D♭7 est 19e sur 155. Dm7♭5 vient en tête pour les 12 septièmes de dominante ; Em7 et Am7 ne sont pas listés pour Cmaj7. Le même zéro changé en un fait de C un « ICV Neighbor (L1 = 1) » de lui-même. GaApi sert cette logique sous son propre ga_chord_substitutions |
Reproduit avec GrothendieckService de GA compilé tel quel et la sélection de la compétence recopiée ; le chatbot lui-même n’a pas été exécuté. Inchangé sur main ; non signalé 2026-10-01 |
| Les douze exemples de requêtes de la compétence prennent le chemin qu’ils illustrent | « Alternative chord for F major in C » compare F à C ; « Borrow a chord from parallel minor » n’a pas de chiffrage d’accord, et la compétence répond « Could not identify a chord symbol in your message. » | ChordSubstitutionSkill.cs#L35-L55, #L144-L160 |
2 exemples sur 12 | Reproduit avec le motif recopié tel quel ; le chatbot lui-même n’a pas été exécuté ; non signalé 2026-10-01 |
get_borrowed_chords écrit et désigne les accords d’emprunt comme le manuel |
Il trouve les 18 accords du cours pour C majeur, mais écrit chaque fondamentale sur une touche noire avec un dièse et les chiffres romains sans ♭, et attribue chaque accord au premier mode de sa boucle | ContextualChordService.cs#L93-L109, #L137, #L157-L170 |
D♯ « III », A♯ « VII », G♯ « VI » ; C♯ et D tous deux « II » ; C mineur écrit C D♯ G ; B♭ et G mineur attribués au dorien, le mineur homonyme réduit à D diminué | Reproduit avec le service compilé tel quel ; ni l’outil MCP ni GaApi n’ont été exécutés. Inchangé sur main ; non signalé 2026-10-01 |
ModalInterchange.yaml nomme correctement les accords d’emprunt |
4 de ses 13 accords écrits et 3 de ses 6 chiffres romains chromatiques sont faux, et son texte arrive dans YamlKnowledgeLoader, dont YamlKnowledgeSyncService stockerait les entrées avec des embeddings si un hôte l’enregistrait |
ModalInterchange.yaml#L271-L362, #L616-L619, #L826-L875, YamlKnowledgeLoader.fs#L128-L140, YamlKnowledgeSyncService.cs#L8-L25 |
VI F majeur, VII G majeur et III C majeur sont les accords propres de A mineur, pas des emprunts à A majeur ; « bii°, Bb diminished » n’est pas dans A phrygien ; ♭VI+, iv+ et le vii°7 du mineur mélodique ne sont pas dans leurs modes. Le chargeur rend les 8 entrées du fichier avec ces chaînes | Reproduit, le chargeur compilé tel quel ; à a826864, aucun hôte n’enregistre le service de synchronisation et aucun code ne lit la collection ; non signalé 2026-10-01 |
YamlKnowledgeLoader charge tous les YAML de contenu du répertoire de configuration |
Il saute SpecializedTunings.yaml, qui ne se lit pas, et ne le dit que sur la sortie d’erreur |
YamlKnowledgeLoader.fs#L116-L118 |
« While parsing a flow sequence, did not find expected ‘,’ or ‘]’. » | Vu dans l’exécution du programme du cours ; le fichier lui-même n’a pas été examiné 2026-10-01 ; la PR GA n° 808 le rend lisible, et le chargeur en lit 21 entrées 2026-10-04 |
Modes.yaml déclare le vecteur d’intervalles de chaque famille |
9 des 18 vecteurs déclarés ne sont pas le vecteur des notes de la famille, et GetAllModes donne à chaque mode le vecteur déclaré par sa famille |
Modes.yaml#L201-L202, #L248-L249, ModesConfig.fs#L281 |
La mineure harmonique déclare <2 4 3 5 4 3> pour <3 3 5 4 4 2>, la mineure mélodique <2 4 5 3 6 2> pour <2 5 4 4 4 2>, la chromatique <11 11 11 11 11 6> pour <12 12 12 12 12 6> ; aussi la pentatonique majeure, la gamme par tons, la diminuée, le blues, la triade augmentée et l’accord de septième majeure |
Reproduit avec ModesConfig compilé tel quel 2026-10-01. Sur main 75959835, 2 des 18 différaient encore ; la PR GA n° 818, pas encore fusionnée, corrige celui de la famille Augmented Triad et laisse celui de la famille Major Seventh Chord 2026-10-04 |
Les membres d’une famille de Modes.yaml sont les rotations de son premier mode |
60 des 134 membres n’ont pas son vecteur | Modes.yaml, #L242-L247, #L465-L466 |
Des familles entières : Major Seventh Chord 7 sur 7 (sept sortes d’accords de septième), All Interval Tetrachord 15 sur 15, Hungarian Major 6 sur 6, In Sen 4 sur 4. Le « premier renversement » de Diminished Triad, C E A, est A mineur ; l’Ultralocrian est écrit comme la gamme altérée, avec B♭ pour B♭♭ | Reproduit 2026-10-01. Sur main 75959835, 26 des 134 ; la PR GA n° 818, pas encore fusionnée, donne à chaque renversement de triade les notes de son nom et en laisse 22, sans toucher aux familles Major Seventh Chord et All Interval Tetrachord 2026-10-04 |
ModesConfig renvoie les noms qu’écrit Modes.yaml |
Un nom sans guillemets perd tout ce qui suit « # » précédé d’une espace, que YAML lit comme le début d’un commentaire | Modes.yaml#L631, #L639, #L655, #L663-L681 |
8 noms sur 165. 7 noms appartiennent alors à plus d’un mode, et une recherche par nom renvoie le premier : « Lydian » est toujours celui de la gamme majeure, jamais « Lydian #2 #6 » ni « Lydian #6 » | Reproduit par un test ajouté après la première exécution, dans 13e7607 2026-10-01 ; correctif proposé dans la PR GA n° 818, pas encore fusionnée 2026-10-04 |
TryGetModeByName, derrière get_mode_info, trouve un mode par ses noms alternatifs, comme son code essaie de le faire |
Elle passe par GetAllModes, qui met les noms alternatifs de chaque mode à None |
ModesConfig.fs#L284, #L413-L441 |
0 mode sur 165 les garde, là où GetModalFamilies en garde 104 : « Altered bb7 », « Locrian Natural 6 », « Super Locrian », « Acoustic Scale » et « Spanish Phrygian » ne sont pas trouvés. Trois des noms des classes de modes de GA, « Locrian Natural 2 », « Dorian Sharp 4 » et « Lydian Sharp 2 », ne sont pas du tout dans le fichier, et « Ionian Augmented » trouve le « Ionian Augmented #2 » coupé de la famille Double Harmonic, C D♯ E F G♯ A B |
Reproduit avec ModesConfig compilé tel quel ; l’outil MCP n’a pas été exécuté 2026-10-01 ; correctif proposé dans la PR GA n° 818, pas encore fusionnée 2026-10-04 |
TryGetModeByIntervalClassVector, derrière la ligne « Scale: » de ga_chord_to_set et les noms de ga_icv_neighbors, nomme l’ensemble qu’on lui donne |
Elle renvoie le premier mode dont la famille déclare le vecteur, donc une déclaration fausse cache une gamme, et le vecteur d’une famille nomme toujours son premier mode | ModesConfig.fs#L443-L458, ChordAtonalTool.cs#L112, #L249 |
Mineure harmonique, mineure mélodique et Cmaj7 : rien. G7 et Bm7♭5 : « Major Seventh ». Cm : « Major Triad » | Reproduit avec ModesConfig compilé tel quel ; les outils MCP n’ont pas été exécutés 2026-10-01. La PR GA n° 818, pas encore fusionnée, corrige le vecteur de la famille Augmented Triad : ga_chord_to_set("Caug") reçoit la ligne « Augmented Triad » ; la recherche elle-même ne change pas 2026-10-04 |
IScaleDegreeNaming.ToShortName suit une seule convention |
Trois : numéros de degrés pour le majeur et le majeur harmonique, chiffres romains des triades pour les mineures, et iv#4 et IV7 pour le quatrième degré des mineures harmonique et mélodique |
MajorScaleDegree.cs#L64-L74, HarmonicMinorScaleDegree.cs#L67-L77, MelodicMinorScaleDegree.cs#L64-L74, HarmonicMajorScaleDegree.cs#L67-L77 |
11 noms courts sur 35 diffèrent de la triade de leur degré | Reproduit avec les types de degrés de GA ; rien dans GA n’appelle la méthode au commit a826864 ; non signalé 2026-10-01 |
PitchClassSet.StepBrightness “measures brightness based on the preponderance of large steps” |
Les pas d’un ensemble font toujours 12 au total, donc la valeur est 2/n, une fonction du nombre de notes | PitchClassSet.cs#L262-L283, ModalVectorService.cs#L157 |
0,2857 pour les 21 modes du majeur, de la mineure mélodique et de la mineure harmonique ; 11 valeurs sur les 4096 ensembles, une par taille, 4 notes partageant 0,5 avec 0 et 1 | Reproduit ; elle alimente une dimension des embeddings ; non signalé 2026-10-01 |
| Une mesure de luminosité classe le lydien au-dessus du locrien | IcvBrightness, dimension 21 du vecteur de structure (indice 27 de l’embedding complet), lit le vecteur d’intervalles, que partagent tous les modes d’une gamme |
TheoryVectorService.cs#L159-L172 |
0,642857 pour chaque mode du majeur, 0,595238 pour la mineure mélodique, 0,571429 pour la mineure harmonique | Reproduit avec la méthode recopiée telle quelle ; voulu, puisque son commentaire dit qu’elle vient du vecteur ; non signalé 2026-10-01 |
UnifiedModeService.RankByBrightness classe les modes d’une gamme |
Pour la mineure harmonique, il classe 14 ensembles, modes du majeur harmonique compris, parce qu’une ModalFamily regroupe les ensembles par vecteur |
UnifiedModeService.cs#L228-L242, ModalFamily.cs#L108-L131 |
Le lydien augmenté ♯2 du majeur harmonique en tête, avec 41 ; le majeur et la mineure mélodique comme le cours | Reproduit avec le service compilé tel quel ; seuls les tests de GA l’appellent au commit a826864. La cause est le défaut 6 de l’annexe C, une conception connue 2026-10-01 |
UnifiedModeService.Describe nomme le mode de Messiaen d’un ensemble qui en est un |
IdentifyMessiaenMode compare l’identifiant de la forme primaire à des identifiants qui, pour les modes 4 à 7, ne sont pas des formes primaires ; celui du mode 6 est une forme du mode 4 |
UnifiedModeService.cs#L136, #L277-L347, UnifiedModeAdvancedTests.cs#L87-L119 |
Modes 1 à 3 trouvés, 4 à 7 non : GA teste 2535, 2275, 3315 et 3055 là où les formes primaires sont 975, 455, 1495 et 2015. Les tests de GA pour les modes 5 à 7 acceptent Is.Null |
Reproduit avec le service compilé tel quel ; non signalé 2026-10-01 |
| Les trois classes de modes symétriques de GA listent chaque mode distinct une fois, comme leurs commentaires les comptent | Items contient un mode par degré, 6, 8 et 6, pour 1, 2 et 2 ensembles distincts ; les commentaires promettent deux modes pour la gamme par tons et quatre pour la gamme augmentée |
WholeToneScaleMode.cs#L12, AugmentedScaleMode.cs#L12, ModalCharacteristicIntervalService.cs#L114-L148 |
20 modes, 5 ensembles distincts. TranspositionCount est juste, 2, 3 et 4. ModalCharacteristicIntervalService les range à des indices qui se chevauchent, 208 à 215 écrits deux fois (lu, pas exécuté) |
Reproduit avec les classes de GA ; non signalé 2026-10-01 |
DiminishedScaleDegree.ToName nomme les deux gammes diminuées par leur premier pas |
Scale.Diminished commence par un ton, et le degré 1 s’appelle « Half-whole diminished » |
DiminishedScaleDegree.cs#L47-L52, Scale.cs#L62 |
Degrés 1 et 2 inversés ; DiminishedScaleMode.HalfWhole est la gamme ton-demi-ton. Modes.yaml nomme juste les mêmes orthographes |
Reproduit 2026-10-01 ; correctif proposé dans la PR GA n° 810, pas encore fusionnée 2026-10-04 |
Scale.Tritone est la gamme triton, les notes de l’accord de Petrouchka |
Il a A là où la gamme triton a B♭, et le commentaire de TritoneScaleMode ne décrit ni l’une ni l’autre |
Scale.cs#L67, TritoneScaleMode.cs#L11-L14 |
6-Z50 avec 12 transpositions et 6 modes, là où 6-30 en a 6 et 3 ; le propre IsSymmetricSet de GA répond False. Les “alternating half steps and minor thirds” du commentaire sont la gamme augmentée, et ses “two distinct modes” ne vont à aucune |
Reproduit 2026-10-01 ; correctif proposé dans la PR GA n° 810, pas encore fusionnée 2026-10-04 |
PitchClassSet.IsMonomodal et l’IsSymmetric du catalogue atonal trouvent les ensembles symétriques, comme le disent leurs commentaires et la dimension de plongement « Is Symmetric/Monomodal » |
Les deux testent une famille modale à un seul membre | PitchClassSet.cs#L186-L189, ModalVectorService.cs#L132, Program.cs#L249-L253 |
IsMonomodal : 29 ensembles, dont 12 notes seules, 59 ensembles limités manqués, la gamme octatonique de son propre commentaire comprise. IsSymmetric : 6 familles sur 200, la note seule comprise, 10 familles limitées manquées |
Reproduit ; non signalé 2026-10-01 |
AtonalChordAnalysisService.IsSymmetricalSet vérifie des “equal divisions of the octave” |
Il compare les écarts entre classes de hauteurs triées sans refermer le cercle | AtonalChordAnalysisService.cs#L217-L233, #L151-L183 |
156 ensembles, dont les 66 dyades, et 140 non limités ; C D E True, B♭ C D False ; 60 ensembles limités manqués. La branche de nommage qui l’utilise est inatteignable, SetClass.IsModal étant vrai pour les 4096 ensembles |
Reproduit avec le service compilé tel quel, la méthode privée appelée par réflexion 2026-10-01 ; correctif proposé dans la PR GA n° 810, pas encore fusionnée 2026-10-04 |
ModesSkill liste les modes à transpositions limitées quand on les lui demande |
Il liste les six familles IsSymmetric avec une confiance de 1,0, avec les ordinaux de ProgrammaticForteCatalog comme numéros de Forte |
ModesSkill.cs#L596-L601, #L687-L705, ForteCatalog.cs#L9-L12 |
Une note seule listée, les gammes octatonique et hexatonique qu’il nomme laissées de côté ; « Forte 2-1 », « 3-1 », « 4-1 », « 6-1 » pour 2-6, 3-12, 4-28, 6-35. Les étiquettes du fichier concordent avec ForteCatalog pour 4 familles sur 200, bien que son commentaire interdise de les montrer |
Reproduit en reconstruisant la réponse à partir de son format et du chargeur de GA ; le chatbot lui-même n’a pas été exécuté. Les étiquettes sont connues : GA #436 a fait passer le générateur à ForteCatalog avant a826864 et a remis à plus tard la régénération du fichier ; la liste n’est pas signalée 2026-10-01 |
| Les catalogues de modes de GA nomment les classes symétriques | AtonalModalFamilies.yaml prend ses noms à des familles de Modes.yaml qui listent un ensemble par erreur ; la recherche par vecteur trouve le sixième mode de Messiaen sous le nom de la gamme octatonique |
Modes.yaml#L328-L329, #L531, #L725-L726 |
Le quatrième mode de Messiaen est « Major Bebop Family », la septième diminuée « Major Seventh Chord Family » ; le sixième mode de Messiaen est « Diminished (Half-Whole) », et la gamme octatonique n’est trouvée nulle part | Reproduit par un test ajouté après la première exécution, dans 6b4039a ; l’outil MCP n’a pas été exécuté ; non signalé 2026-10-01 |
Chord.FromSymbol lit les chiffrages d’accords qu’écrivent les manuels et les propres fichiers de GA |
Sa table connaît les accords étendus, pas les accords altérés, les sus avec une extension, add2, les accords à basse imposée ni la plupart des graphies ; la mise en minuscules fait de CM7 un m7 |
Chord.cs#L110-L141 |
14 chiffrages sur 41 justes ; 28 rejets, dont les deux mots ; CM7 lu comme septième mineure de C |
Reproduit 2026-10-02. La PR GA n° 820, pas encore fusionnée, lit un M majuscule comme majeur : CM7 est la septième majeure de C ; les autres graphies restent rejetées 2026-10-04 |
ChordSymbolParser analyse les noms d’accords de la recherche de voicings de GaApi et du chatbot |
Un suffixe absent de sa table tombe dans une cascade de tests Contains, puis sur une triade majeure ; les mots anglais qui commencent par une lettre de A à G passent |
ChordSymbolParser.cs#L98-L140, #L176-L188, ChordSymbolParserTests.cs#L33-L40 |
17 sur 41 justes, aucun rejet ; C7alt avec une quinte juste, C7#11 avec une septième majeure, « Can » C majeur, « Give » G majeur. Les tests de GA vérifient seulement qu’un accord revient |
Reproduit avec le parseur compilé tel quel 2026-10-02 ; correctif proposé dans la PR GA n° 820, pas encore fusionnée : 41 sur 41 justes, « Can » et « Give » rejetés 2026-10-04 |
ChordFormula.GetSymbolSuffix nomme les accords étendus |
Il écrit la lettre de la qualité puis l’extension, donc les neuvième, onzième et treizième majeures perdent leur « maj » | ChordFormula.cs#L299-L325 |
8 sur 11 ; BasicChordExtensionsService.GenerateChordName, à partir de la même qualité et de la même extension, 11 sur 11 |
Reproduit à a826864 2026-10-02 ; déjà corrigé en amont par la PR GA n° 680, fusionnée le 2026-09-17 2026-10-04 |
ChordAlterationService nomme les accords altérés |
Les fonctions viennent des demi-tons modulo 12 : ♯9 est lu comme une tierce, ♯11 et ♭13 comme ♭5 et ♯5 ; une altération fait d’une dominante un « 7alt », un demi-ton en fait un accord de neuvième | ChordAlterationService.cs#L37-L61, #L87-L102, ChordFunctionExtensions.cs#L13-L22 |
Aucun des neuf accords altérés de GA lui-même ne revient sous son nom ; C7(♯9) a « No alterations » ; Cdim, Caug, Cm7♭5 et Cdim7 reçoivent un (b5) ou un (#5) |
Reproduit avec le service compilé tel quel ; non signalé 2026-10-02 |
ChordTemplateFactory.GenerateAllPossibleChords produit chaque gabarit une fois |
Il lance GenerateFromAllModalFamilies, puis les trois mêmes groupes de gammes une seconde fois |
ChordTemplateFactory.cs#L37-L62, #L93-L115 |
25 900 gabarits, les 12 950 derniers une copie des premiers | Reproduit 2026-10-02 ; correctif proposé dans la PR GA n° 823, pas encore fusionnée : 12 950 gabarits, chacun une fois 2026-10-04 |
La description de ga_polychord et AdvancedHarmony.yaml décrivent des polyaccords |
B majeur sur C n’est pas l’ensemble lydien, et C majeur sur F♯ majeur donne six classes de hauteurs, pas douze | ChordAtonalTool.cs#L194-L218, AdvancedHarmony.yaml#L101-L104 |
{C, Eb, E, F#, G, B}, 6-Z19, dans le seul lydien ♯2 ; C/F♯ 6-30, l’accord de Petrouchka, comme le liste IconicChords.yaml |
Reproduit en recopiant le code de l’outil et en remplaçant sa closure F# ; non signalé 2026-10-02 |
VoicingHarmonicAnalyzer nomme les voicings drop |
Un seul test : monter la note la plus grave d’une octave, et répondre « Drop-2 » quand les notes tiennent alors dans une octave, rien sinon. Les positions serrées, les drop 3 et les drop 4 sortent « Drop-2 » ; aucun voicing n’est jamais « Drop-3 » | VoicingHarmonicAnalyzer.cs#L46-L58 |
64 des 128 voicings du cours « Drop-2 », exactement ceux qui ont au plus une voix descendue ; parmi les 687 accords de septième sur quatre cordes de GA, « Drop-2 » sur 15 voicings serrés, 111 drop 2, 92 drop 3 et 46 drop 4 | Reproduit avec l’analyseur compilé tel quel 2026-10-02 ; correctif proposé dans la PR GA n° 819, pas encore fusionnée 2026-10-04 |
VoicingCharacteristics.IsRootless et IsOpenVoicing décrivent un voicing |
Analyze passe intervalSpread > 12 et false |
VoicingHarmonicAnalyzer.cs#L38-L40, VoicingCharacteristics.cs#L10-L12 |
112 sur 128 « rootless », tous avec leur fondamentale ; 672 sur 687 ; les sept accords ouverts de la leçon 3 ; aucun voicing ouvert | Reproduit ; non signalé 2026-10-02 |
VoicingFilters choisit les voicings drop, sans fondamentale, shell, serrés et ouverts |
Drop3 et Drop2And4 cherchent des étiquettes que rien ne produit ; Rootless, ClosedPosition et OpenPosition héritent des deux champs ci-dessus |
VoicingFilters.cs#L101-L124 |
Sur les 687 : Drop2 264, Drop3 0, Drop2And4 0, Rootless 672, ClosedPosition 687, OpenPosition 0. VoicingIndexingService applique ces filtres avant d’indexer |
Reproduit avec les filtres compilés tels quels 2026-10-02. La PR GA n° 819, pas encore fusionnée, corrige les trois filtres drop : sur les 687, Drop2 111, Drop3 92, Drop2And4 143 ; Rootless, ClosedPosition et OpenPosition ne changent pas 2026-10-04 |
| GA reconnaît les shells, fondamentale, tierce et septième | Trois règles, aucune sur les notes de l’accord : trois ou quatre cordes ; « rootless » avec trois classes de hauteurs ; « rootless » avec trois notes | VoicingPhysicalAnalyzer.cs#L126-L131, ChordClassificationEngine.cs#L169-L173, VoicingFilters.cs#L118-L119 |
Les shells sur la cinquième corde x323xx, x324xx et x313xx ne passent que la première ; les sept triades ouvertes de la leçon 3 reçoivent le shell-voicing du moteur |
Reproduit 2026-10-02 ; correctif proposé dans la PR GA n° 819, pas encore fusionnée 2026-10-04 |
VoicingAnalyzer.AnalyzeEnhanced enregistre les notes d’un voicing et ses notes guides |
Il construit new ToneInventory([], false, [], []) pour chaque voicing |
VoicingAnalyzer.cs#L155 |
711 analyses, HasGuideTones jamais vrai ; le « Shell » d’AutoTaggingService en dépend (lu, pas exécuté) |
Reproduit ; non signalé 2026-10-02 |
Les doigtés des GuitarCompingRecipes jouent les accords qu’ils nomment |
Lus du grave à l’aigu sur leurs groupes de cordes, comme le disent les conventions du fichier, aucun ne le fait ; l’un a cinq cases pour quatre cordes | ChordProgressions.yaml#L461-L577 |
0 sur 15 ; « Cm(maj9) » est un Cmaj7, « Gsus2 » un Gsus4. YamlKnowledgeLoader renvoie les six recettes pour la recherche |
Reproduit à travers YamlKnowledgeLoader ; non signalé 2026-10-02 |
PHYSICAL_PLAYABILITY_IMPROVEMENTS.md cite les écarts de cinq frettes que calcule GA |
Ses trois écarts et son “71.4% larger” ne correspondent ni au calculateur de GA ni à la formule ; le document les présente comme la sortie d’un test, dans un fichier que le projet de tests retire de la compilation | PHYSICAL_PLAYABILITY_IMPROVEMENTS.md#L45-L50, #L155-L161, GA.Business.Core.Tests.csproj#L47 |
120,11, 85,42 et 70,09 mm contre 162,55, 108,49 et 81,27 mm sur 648 mm ; l’écart du bas plus grand de 100,0 % que celui du haut | Reproduit ; non signalé 2026-10-02 |
ComfortableReachScaleUnits est une extension de quatre cases |
C’est la distance du sillet à la frette 4, comparée à l’écart entre notes appuyées, qui compte un intervalle de frette de moins | BiomechanicsConstants.cs#L24-L28, PhysicalCostService.cs#L27-L38 |
Cinq cases depuis la case 1, dix depuis la case 12 | Reproduit ; non signalé 2026-10-02 |
DetectCagedShape nomme la forme CAGED d’un voicing |
Il renvoie null quand la première position est étouffée, avant les tests de A et de C qui la demandent étouffée, et ne peut donc répondre que « E-Shape » ; ses commentaires lisent la première position comme la corde 6, que GA numérote corde 1 | VoicingPhysicalAnalyzer.cs#L253-L343, #L27 |
Dans l’ordre de GA, aucune des 11 formes ; inversée, la forme de E à 13 cases sur 13 et rien d’autre. L’étiquette e-shape échoue au test de VoicingFilterEngine pour « E » |
Reproduit ; non signalé 2026-10-02 |
| Les mesures de jouabilité de GA tiennent compte des barrés et de la main du joueur | PhysicalCostService n’a pas de terme de barré ; VoicingPhysicalAnalyzer ne voit pas de barré dans F et classe le C ouvert « Intermediate » ; BiomechanicalAnalyzer voit des barrés sur les cordes à vide et note F « Very Easy » ; aucune ne lit HandSize ni MaxComfortableStretchMm |
PhysicalCostService.cs#L17-L142, VoicingPhysicalAnalyzer.cs#L105-L112, BiomechanicalAnalyzer.cs#L10-L12, #L153 |
F coûte 0,29, les formes barrées de C de 0,21 à 0,24 ; le C ouvert 3,50, « Intermediate » ; F 0,92 contre 0,82 pour le C ouvert ; les mêmes résultats pour les quatre tailles de main | Reproduit ; non signalé 2026-10-02 |
Tunings.toml contient les accordages de GA |
Aucun code C# ou F# ne le lit ; il répète les deux erreurs d’octave d’Instruments.yaml ; le composant React qui le nomme ignore ses propriétés tunings et dataUrls |
Tunings.toml#L364-L366, #L388-L390, HarmonicNavigator3D.tsx#L128-L131 |
15 entrées sur 15 comme dans Instruments.yaml ; la corde 2 descendue de 11 demi-tons dans OpenCMajor, de 10 dans OpenAMajor |
Reproduit, le fichier lu comme du texte ; non signalé 2026-10-02 |
ga_easier_voicings propose des voicings jouables de l’accord demandé |
Deux formes de sa table jouent une note hors de leur accord ; avec « no-barre », il propose B7 et B5 pour Bm et rien pour B♭ ; le Fsus2 et le C/F de sa description ne sont pas dans la table | GuitaristProblemTools.cs#L506-L562, #L574-L577, #L611-L652 |
Gsus4 310013 joue B♭, C5 x3500x B ; aucune proposition pour Bm ne joue D | Reproduit avec la table lue comme du texte et la lecture du filtre par le cours ; non signalé 2026-10-02 |
ga_arpeggio_suggestions associe à chaque accord son arpège et un mode qui lui convient, comme le fait l’exemple de sa description |
Il ajoute le suffixe de la table au symbole entier et prend le mode au seul degré de la fondamentale ; tout mot de tonalité autre que « minor » veut dire majeur | GuitaristProblemTools.cs#L409-L412, #L426-L431, #L448-L485 |
« Amm7 », « Dm7m7 », « G77 » ; A7 en A majeur reçoit l’ionien, avec G en dehors ; un accord de A majeur en C majeur reçoit « Am7 » et l’éolien, avec C♯ en dehors ; la tonalité « Am » est A majeur | Reproduit avec l’outil lu comme du texte et la lecture des lignes 426 à 485 par le cours ; le suffixe et le degré corrigés en amont par GA #626 le 2026-09-24, la tonalité lue comme avant sur main c1416eee (lu, pas exécuté) 2026-10-07 |
ImprovisationSkill.InferQuality lit la qualité que nomme un symbole d’accord |
Il passe le suffixe en minuscules, donc CM7 est une septième mineure, la régression que les remarques de ChordVocabulary disent avoir supprimée ; Cmaj7♯5 se lit « major 7 », C7♯11, C7♭13 et C7+5 « dominant 7 » ; l’arpège de Cm6 s’appelle CmMaj7 |
ImprovisationSkill.cs#L323, #L338-L351, ChordVocabulary.cs#L8-L16 |
7 symboles sur 31 reçoivent une première gamme sans l’une de leurs notes ; CM7 reçoit Cm7, puis dorien, éolien et phrygien, aucun avec E ni B | Reproduit, compilé ; InferQuality inchangé sur main c1416eee ; non signalé 2026-10-07 |
OutsideNotesSkill.Classify appelle une note tension ou note à éviter comme le fait la théorie accord–gamme |
Une seule règle pour les douze notes, un demi-ton au-dessus d’une note de l’accord, sans gamme : les notes hors de toute gamme qui convient à l’accord deviennent des tensions, la ♭9 et la ♭13 sur une dominante des notes à éviter ; son conseil appelle la septième majeure sur une dominante une tension altérée | OutsideNotesSkill.cs#L20-L28, #L141-L189 |
Sur Cmaj7, B♭ « tension: b7 » et E♭ « #9 » ; F♯ sur Cm7 et A sur Cm7♭5, toutes hors des gammes d’ImprovisationSkill pour l’accord ; sur A7, D note à éviter mais C, un demi-ton sous C♯, tension |
Reproduit, compilé ; Classify inchangé sur main c1416eee ; non signalé 2026-10-07 |
Expériences
Section intitulée « Expériences »Des questions dont la mesure pouvait tourner autrement. La première est le filet de sécurité du cours lui-même : sa théorie a été écrite depuis des définitions publiées, pas depuis GA, si bien que coïncider avec GA sur les 4096 ensembles renseigne sur les deux.
| Question | Hypothèse | Résultat | Verdict | Où |
|---|---|---|---|---|
| La forme première de Rahn réécrite de zéro par le cours coïncide-t-elle avec la forme première à identifiant minimal de GA, sur tout l’espace ? | Bâtie sur Open Music Theory, Wikipédia et l’OEIS, indépendamment de GA : l’accord n’avait rien de garanti | Elles coïncident pour chacun des 4096 ensembles. Les 224 classes d’ensembles et 352 classes de transposition de GA correspondent à OEIS A000029 et A000031. L’empaquetage de Forte diffère de celui de Rahn sur 6 classes d’ensembles et 17 des 352 classes de transposition | Confirmée, l’écart Forte/Rahn étant chiffré à part | 2026-09-15 |
| Gravir l’échelle OPTIC de GA une équivalence à la fois sur un vrai doigté retombe-t-il sur les comptes du manuel ? | Écrite à l’avance : on devrait atterrir sur 4096, 352 et 224 | 4096, 352 et 224 | Confirmée | 2026-09-15 |
Donner un paramètre d’accordage à Diagrams.Fretboard change-t-il les diagrammes de guitare déjà produits ? |
Écrite à l’avance : non — la guitare n’est qu’un accordage parmi les nouveaux | Les quatorze fichiers SVG existants sont identiques octet pour octet après le changement | Confirmée | 2026-09-15 |
Le cœur de GA trouve-t-il les mêmes notes communes que le cours sur les 13 paires de la leçon 9, Cmaj9, Cdim7 et C6 compris ? |
Écrite à l’avance : accord sur les 13 | 13 sur 13 | Confirmée | 2026-09-30, Lesson11.cs#L62-L66 |
À quelle fréquence répéter la fondamentale du plus petit accord, comme le fait VoiceLeadingSkill, manque-t-il la plus petite conduite des voix ? |
Écrite à l’avance : G → Cmaj7 donne 5 là où 3 existe ; plus de 10 % des 2880 paires triade → septième manquent, et moins de la septième vers la triade | G → Cmaj7 : 5 et 3. 1260 paires (43,8 %) manquent dans chaque sens, de 4 demi-tons au plus | Confirmée pour G → Cmaj7 et pour la proportion ; réfutée pour le sens : la triade est l’accord complété dans les deux sens, et une conduite des voix coûte autant lue à l’envers | 2026-09-30, Lesson11.cs#L388-L402 |
| Chacun des dix exemples de requêtes de la compétence passe-t-il son propre motif ? | Écrite à l’avance : exactement un échoue, « voice leading C major to G major » | Celui-là, et aucun autre | Confirmée | 2026-09-30, Lesson11.cs#L404-L409 |
Que donne la distance de ga_voice_leading_pair de G ouvert à C ouvert ? |
Écrite à l’avance : 28, là où laisser de côté le G grave donne 10 | 28 et 10 | Confirmée | 2026-09-30, Lesson11.cs#L411-L424 |
ProgressionVoiceLeadingAnalyzer est-il d’accord avec la règle des manuels, corde par corde ? |
Écrite à l’avance : barré de F → barré de G, 3 quintes et 4 octaves ; E5 → G5, 1 et 1 ; C ouvert → G et G7 → C, une octave chacun sur les cordes 5 et 2 ; Am → Dm, aucune | Comme écrit, 5 sur 5 | Confirmée | 2026-09-30, Lesson11.cs#L426-L438 |
Le raccourci par décalages circulaires de VoiceLeadingSpace est-il exact, et que donne-t-il sans l’équivalence d’octave ? |
Écrite à l’avance : aucun désaccord sur toutes les paires ordonnées d’ensembles de 3 et de 4 notes, OP et OPT ; sans O, C4 majeur → B3 majeur 0 et B3 majeur → C4 majeur 3 | 0 sur 48400 et 0 sur 245025, avec et sans T ; 0 et 3 | Confirmée | 2026-09-30, Lesson11.cs#L450-L471 |
SetClassOpticIndex passe-t-il sous le minimum un-à-un et change-t-il quand on échange ses arguments ? |
Écrite à l’avance : jamais au-dessus, en dessous et asymétrique sur certaines des 144 paires de tricordes ; (012) → (048) 2, retour 6, un-à-un 6 | 0 au-dessus, 35 en dessous, 70 asymétriques ; 2, 6 et 6 | Confirmée | 2026-09-30, Lesson11.cs#L473-L486 |
Comment le ga_chord_substitutions du serveur MCP classe-t-il les substituts de A mineur en C majeur, et quelle tonalité prend-il sans tonalité donnée ? |
Écrite à l’avance : C et F avec 2 notes communes, puis Dm et Em avec 1, contre C ★★★, Em ★★, F ★ dans la description ; sans tonalité, A majeur pour Am et B majeur pour B♭7 ; Bm7♭5 construit comme B D F♯ A | C 2, F 2, Dm 1, Em 1 ; A majeur et B majeur ; Dm et Bdim partagent 2 notes avec Bm7♭5 | Confirmée, sur une réécriture de la closure | 2026-10-01, Lesson12.cs#L529-L549 |
| Quels accords reçoivent la ligne de triton de la closure ? | Écrite à l’avance : G7 reçoit D♭7 ; G9 et G13 aucune | Comme écrit | Confirmée, sur la réécriture | 2026-10-01, Lesson12.cs#L551-L558 |
Quel chemin prend chacun des douze exemples de requêtes de ChordSubstitutionSkill ? |
Écrite à l’avance : dix listent des substituts ; « Alternative chord for F major in C » compare F à C ; « Borrow a chord from parallel minor » ne trouve aucun accord | Comme écrit | Confirmée | 2026-10-01, Lesson12.cs#L560-L568 |
| Quels sont les cinq substituts de la compétence pour un accord ? | Écrite à l’avance : chaque accord de même vecteur au coût 0,60 et à la distance 1, dans l’ordre des nombres sur 12 bits ; pour G7 Dm7♭5, A♭7, F7, D7, E♭m7♭5 ; pour Am Cm, C, A♭, D♭m, Fm ; pour C Cm, A♭, D♭m, Fm, D♭ ; pour Cmaj7 D♭maj7, A♭maj7, Fmaj7, Dmaj7, Amaj7 | Les quatre listes comme écrit ; 23, 23, 23 et 11 accords ex æquo, autant que le cours en compte avec le même vecteur | Confirmée | 2026-10-01, Lesson12.cs#L570-L610 |
| Quelles étiquettes la compétence donne-t-elle à G7 → D♭7, Dm → G, C → C et B♭7 → C ? | Écrite à l’avance : Tritone Substitution, Set-Class Equivalent et ICV Neighbor (L1 = 1) ; Secondary Dominant ; Set-Class Equivalent et ICV Neighbor (L1 = 1) ; Backdoor Dominant seul | Comme écrit ; Dm → G reçoit aussi les deux étiquettes de classe d’ensembles | Confirmée | 2026-10-01, Lesson12.cs#L612-L616 |
Que rend get_borrowed_chords pour C majeur ? |
Écrite à l’avance : 18 accords attribués au premier mode qui les contient, fondamentales en dièses, chiffres romains sans altération, listés par mode | Les 18, dans cet ordre, avec ces chiffres romains | Confirmée | 2026-10-01, Lesson12.cs#L618-L641 |
Quelle part de ModalInterchange.yaml est juste, et un code de GA le lit-il ? |
Écrite à l’avance : 9 des 13 accords écrits justes, 3 des 6 chiffres romains chromatiques faux ; aucun code ne lit le fichier | 9 et 4 ; 3 sur 6 ; YamlKnowledgeLoader le lit avec les autres fichiers YAML de contenu, et YamlKnowledgeSyncService stockerait les entrées avec des embeddings, mais aucun hôte ne l’enregistre |
Confirmée pour les accords et les chiffres romains ; réfutée pour les lecteurs | 2026-10-01, Lesson12.cs#L643-L675 |
Les ModeFormula de GA pour les sept modes de la mineure mélodique sont-ils ceux du cours ? |
Écrite à l’avance : 7 sur 7, la gamme de GA écrite à partir de A | 7 sur 7, et les 7 orthographes | Confirmée | 2026-10-01, Lesson13.cs#L136 |
| Et pour la mineure harmonique, double bémol compris ? | Écrite à l’avance : 7 sur 7 ; le lydien ♯2 mesuré contre l’ionien, et la septième de l’altéré ♭♭7 une septième diminuée | 7 sur 7, avec >♯2 et >bb7 |
Confirmée | 2026-10-01, Lesson13.cs#L137 |
| Combien des 35 noms courts de cinq types de degrés diffèrent de la triade de leur degré ? | Écrite à l’avance : 11 ; 4 pour le majeur, 5 pour le majeur harmonique, 1 chacune pour les mineures harmonique et mélodique, aucun pour la mineure naturelle | 11, degré pour degré | Confirmée | 2026-10-01, Lesson13.cs#L139-L155 |
StepBrightness distingue-t-elle les modes ? |
Écrite à l’avance : non ; 0,2857 pour les 21 modes, et 11 valeurs sur les 4096 ensembles | Comme écrit | Confirmée | 2026-10-01, Lesson13.cs#L157-L184 |
IcvBrightness distingue-t-elle les modes ? |
Écrite à l’avance : non ; 0,642857, 0,595238 et 0,571429, une valeur par gamme | Comme écrit | Confirmée | 2026-10-01, Lesson13.cs#L157-L172 |
RankByBrightness classe-t-il les modes d’une gamme comme la somme du cours ? |
Écrite à l’avance : oui pour le majeur et la mineure mélodique ; pour la mineure harmonique 14 ensembles, le lydien augmenté ♯2 en tête avec 41, et trois ex æquo dans l’ordre des nombres sur 12 bits | Comme écrit | Confirmée | 2026-10-01, Lesson13.cs#L186-L216 |
Combien des vecteurs que déclare Modes.yaml sont justes, et combien de membres ont le vecteur de leur famille ? |
Écrite à l’avance : 31 familles, 165 modes, 9 vecteurs déclarés faux sur 18, 60 membres sur 134 sans lui ; l’Ultralocrian écrit comme la gamme altérée | Comme écrit. GA et le cours calculent le même vecteur pour les notes de 164 des 165 modes, la gamme chromatique mise à part | Confirmée | 2026-10-01, Lesson13.cs#L218-L259 |
Que trouvent les deux recherches de ModesConfig ? |
Écrite à l’avance : par vecteur, Ionian pour C majeur, rien pour les mineures harmonique et mélodique ni pour Cmaj7, « Major Seventh » pour G7 et Bm7♭5, « Major Triad » pour C et Cm ; par nom, 8 des 14 noms de GA et aucun nom alternatif | Les vecteurs comme écrit. 9 noms : « Ionian Augmented » est trouvé dans la famille Double Harmonic, par un nom coupé par un commentaire YAML. Aucun nom alternatif | Confirmée pour les vecteurs et les noms alternatifs ; réfutée pour le nombre de noms trouvés | 2026-10-01, Lesson13.cs#L261-L295 |
Combien d’ensembles ont des transpositions limitées, et IsSymmetricSet les trouve-t-il ? |
Écrite à l’avance : 76 ensembles en 17 classes de transposition, 15 sans l’ensemble vide et la gamme chromatique ; les transpositions et les modes de Messiaen comme sa liste les donne ; accord sur les 4096 ensembles | 76, 17 et 15, en 14 classes d’ensembles ; 7 modes sur 7 ; 4096 sur 4096 | Confirmée | 2026-10-01, Lesson14.cs#L158-L194 |
| Combien de modes distincts contiennent les trois classes de modes symétriques de GA ? | Écrite à l’avance : 6, 8 et 6 modes pour 1, 2 et 2 ensembles sur C, avec les bonnes transpositions, 2, 3 et 4 | Comme écrit | Confirmée | 2026-10-01, Lesson14.cs#L216-L218 |
| Les noms des deux gammes diminuées sont-ils dans le bon sens ? | Écrite à l’avance : inversés, le degré 1 étant la gamme ton-demi-ton | Inversés | Confirmée | 2026-10-01, Lesson14.cs#L220-L226 |
Scale.Tritone est-il la gamme triton ? |
Écrite à l’avance : non ; 6-Z50 avec 12 transpositions et 6 modes, là où la gamme triton est 6-30 avec 6 et 3 | Comme écrit ; l’IsSymmetricSet de GA répond False pour la gamme de GA, True pour la gamme triton |
Confirmée | 2026-10-01, Lesson14.cs#L228-L242 |
Quels modes de Messiaen IdentifyMessiaenMode nomme-t-il ? |
Écrite à l’avance : les modes 1 à 3 seulement | Les modes 1 à 3 seulement | Confirmée | 2026-10-01, Lesson14.cs#L196-L212 |
Combien d’ensembles IsMonomodal signale-t-il, et combien ont des transpositions limitées ? |
Écrite à l’avance : 29, dont 17 limités, la gamme octatonique n’en faisant pas partie | Comme écrit | Confirmée | 2026-10-01, Lesson14.cs#L246-L262 |
Qu’appellent symétrique AtonalModalFamilies.yaml et ModesSkill, et les étiquettes de Forte du fichier concordent-elles avec ForteCatalog ? |
Écrite à l’avance : 6 familles sur 200 ; Forte 2-1, 3-1, 4-1 et 6-1 dans la réponse ; aucun accord pour 2, 3, 4, 8, 9 et 10 notes, accord pour 1-1, 11-1 et 12-1 | Comme écrit ; une famille d’hexacordes concorde aussi, 4 sur 200 en tout | Confirmée | 2026-10-01, Lesson14.cs#L266-L302 |
Combien d’ensembles IsSymmetricalSet signale-t-il ? |
Écrite à l’avance : 156, dont 16 limités, 60 ensembles limités manqués ; C D E signalé, B♭ C D non | Comme écrit | Confirmée | 2026-10-01, Lesson14.cs#L246-L263 |
IsInversionallySymmetric concorde-t-il avec les axes miroirs du cours, et les classes limitées ont-elles autant d’axes que de transpositions qui les fixent ? |
Écrite à l’avance : 352 classes, 96 symétriques ; 13 des 15 classes limitées symétriques par miroir, 6, 4 et 3 axes pour les gammes par tons, octatonique et augmentée | Comme écrit, et aucun ensemble nulle part avec un autre nombre d’axes | Confirmée | 2026-10-01, Lesson14.cs#L306-L330 |
| Que font les deux parseurs de GA de 41 chiffrages d’accords ? | Écrite à l’avance : FromSymbol 14 justes, 26 accords rejetés, CM7 une septième mineure ; ChordSymbolParser 17 justes, aucun rejet, chaque mauvaise lecture nommée, « Can » C majeur et « Give » G majeur |
Comme écrit | Confirmée | 2026-10-02, Lesson15.cs#L313-L336 |
| Les trois façons de nommer de GA relisent-elles les accords étendus ? | Écrite à l’avance : TryFindExact rien pour C13, Cmaj13, Cm13 et Cmaj11 ; GetSymbolSuffix sans le « maj » de maj9, maj11 et maj13 ; GenerateChordName les onze ; C13, Fmaj13 et Gm13 un seul ensemble |
Comme écrit | Confirmée | 2026-10-02, Lesson15.cs#L273-L301 |
Comment ChordAlterationService appelle-t-il les neuf accords altérés de GA ? |
Écrite à l’avance : C9(b9,b5,#5), C9(b9), C7, quatre C7alt, C9(b9,b5), Cmaj7(b5) ; Cdim(b5), Caug(#5), Cdim7(b5), C6(b5) |
Comme écrit | Confirmée | 2026-10-02, Lesson15.cs#L340-L363 |
Quelles altérations portent les gabarits de ChordTemplateFactory ? |
Écrite à l’avance : chaque gabarit deux fois ; ♭13 jamais ; ♯9 seulement dans les gabarits Sus2, ♯11 seulement dans les gabarits Sus4 | Comme écrit : 80 et 176 gabarits | Confirmée | 2026-10-02, Lesson15.cs#L367-L382 |
Qu’imprime ga_polychord, et quels modes contiennent chaque polyaccord ? |
Écrite à l’avance : {C, Eb, E, F#, G, B} pour B sur C ; Bm/C dans le seul lydien, B/C dans le seul lydien ♯2 ; C sur F♯ six notes, 6-30, dans aucun des 28 modes et dans l’octatonique demi-ton-ton ; D sur E♭ dans le seul lydien ♯2 ; C sur D A C D E F♯ G |
Comme écrit | Confirmée | 2026-10-02, Lesson15.cs#L406-L426 |
Que renvoie YamlKnowledgeLoader à partir d’ExtendedChords.yaml et d’AdvancedHarmony.yaml ? |
Écrite à l’avance : 3 et 9 entrées ; l’accord de 13e 1 3 5 ♭7 9 13 ; « Polychords » avec douze hauteurs chromatiques | Comme écrit | Confirmée | 2026-10-02, Lesson15.cs#L430-L449 |
| Quelles triades sur C7 évitent F et B, et le catalogue de GA les nomme-t-il ? | Écrite à l’avance : 6 majeures et 6 mineures, les neuf structures supérieures de Wikipédia plus C, Gm et Am ; aucun motif dans le catalogue | Comme écrit ; aucun des 62 motifs ne s’appelle upper structure ni polychord | Confirmée | 2026-10-02, Lesson15.cs#L386-L402 |
Comment DetectDropVoicing appelle-t-il les 128 voicings drop des quatre accords de septième sur C, et les exemples de Wikipédia ? |
Écrite à l’avance : « Drop-2 » pour les 64 voicings serrés, drop 2, drop 3 et drop 4, rien pour les 64 autres ; rien pour les sept exemples de Wikipédia | Comme écrit | Confirmée | 2026-10-02, Lesson16.cs#L173-L215 |
Que disent IsRootless et IsOpenVoicing, et quelles formes de guitare sont « Drop-2 » ? |
Écrite à l’avance : 112 « rootless », aucun ouvert ; les sept accords ouverts de la leçon 3 « rootless », trois d’entre eux « Drop-2 » ; x3200x « Drop-2 » et pas « rootless », x3545x « Drop-2 » et « rootless » | Comme écrit | Confirmée | 2026-10-02, Lesson16.cs#L219-L232 |
| Quels voicings reconnaît chacune des trois règles de shell de GA ? | Écrite à l’avance : la règle des cordes les six shells, xx0232 et les deux formes de Cmaj7 ; le moteur les trois shells sur la sixième corde et les sept triades ouvertes ; le filtre les trois shells sur la sixième corde seulement | Comme écrit | Confirmée | 2026-10-02, Lesson16.cs#L236-L252 |
Combien de voicings VoicingGenerator renvoie-t-il, et que font l’étiquette et les filtres de GA des accords de septième parmi eux ? |
Écrite à l’avance : 667 125 ; « Drop-2 » exactement sur les voicings serrés, drop 2, drop 3 et drop 4 ; les 48 formes drop 2 et les 32 formes drop 3 de MUS-005 toutes présentes ; Drop2 les voicings serrés et à une voix descendue, ClosedPosition tous, Rootless ceux de plus d’une octave, les autres aucun |
Comme écrit : 687 voicings, 264 gardés par Drop2, 672 par Rootless |
Confirmée | 2026-10-02, Lesson16.cs#L256-L333 |
Les lignes ii–V–I de TransposeTables montrent-elles les mouvements des notes guides, et l’analyse de GA enregistre-t-elle les notes guides ? |
Écrite à l’avance : les quatre mouvements dans les douze lignes, F F E et C B B en C ; HasGuideTones faux et Tones, OmittedTones vides pour chaque voicing analysé |
Comme écrit, sur 711 analyses | Confirmée | 2026-10-02, Lesson16.cs#L337-L369 |
| Les recettes d’accompagnement arrivent-elles à la recherche, et leurs doigtés jouent-ils leurs noms ? | Écrite à l’avance : les six recettes renvoyées avec leurs doigtés ; aucun doigté avec les notes de son nom ou de son ordre des degrés ; le E7 de la recette blues juste | Comme écrit ; 36 entrées tirées du fichier | Confirmée | 2026-10-02, Lesson16.cs#L373-L408 |
Où les deux classes de géométrie de GA placent-elles les frettes, et les écarts cités dans PHYSICAL_PLAYABILITY_IMPROVEMENTS.md sont-ils justes ? |
Écrite à l’avance : les deux d’accord avec le cours à chaque frette, la frette 12 à 323,85 et 324,00 mm ; les cinq chiffres de MUS-009 ; trois lignes DIFF, 162,55, 108,49 et 81,27 mm, l’écart du bas plus grand de 100,0 % et non de 71,4 % |
Comme écrit | Confirmée | 2026-10-02, Lesson17.cs#L185-L210 |
| Jusqu’où va l’extension confortable de GA, et une mesure lit-elle la main du joueur ? | Écrite à l’avance : les cases 1 à 5 depuis la case 1, 7 à 13 depuis la case 7, 12 à 21 depuis la case 12 ; la première position à 0,1502 ; la main Medium et les 129 mm du profil par défaut, qu’aucun des trois analyseurs ne lit | Comme écrit | Confirmée | 2026-10-02, Lesson17.cs#L214-L226, Lesson17.cs#L334-L337 |
Où se placent les cinq formes CAGED de C, et DetectCagedShape les nomme-t-il ? |
Écrite à l’avance : cases 0, 3, 5, 8 et 10, dans chaque tonalité l’ordre C A G E D lu en boucle depuis l’une de ses lettres ; dans l’ordre des cordes de GA aucune forme nommée, 001220 nommé « E-Shape » ; inversée, la forme de E à chaque case et rien d’autre | Comme écrit : la forme de E aux 13 cases | Confirmée | 2026-10-02, Lesson17.cs#L230-L302 |
| Que font les trois mesures de coût et de difficulté de GA des formes ? | Écrite à l’avance : aucun terme de barré ; de −0,63 (Em) à −0,06 (D), F 0,29, la forme de D en C 0,59, la forme de E à la case 12 0,66 ; le C ouvert « Intermediate » ; F « Very Easy » (0,92) au-dessus du C ouvert (0,82) pour BiomechanicalAnalyzer ; tailles de main et champs du profil sans effet ; la forme de D en C à 1,04 avec Beginner(), 0,18 avec Jazz() |
Comme écrit | Confirmée | 2026-10-02, Lesson17.cs#L306-L347 |
Les accordages de guitare de Tunings.toml sont-ils ceux d’Instruments.yaml, et un code de GA lit-il le fichier ? |
Écrite à l’avance : les mêmes 15 entrées, la corde 2 d’OpenCMajor et d’OpenAMajor descendue de 11 et de 10 demi-tons comme dans Instruments.yaml ; OpenEMajorV2 un accord de E mineur ; les quatre ordres de cordes de Wikipédia ; aucun lecteur dans le C# ni le F# de GA |
Comme écrit ; les lecteurs vérifiés en cherchant dans le code, pas en l’exécutant | Confirmée | 2026-10-02, Lesson17.cs#L351-L372 |
Les 41 voicings derrière ga_easier_voicings sont-ils justes, et que propose l’outil pour un accord barré ? |
Écrite à l’avance : Notes juste pour les 41 ; un B♭ dans Gsus4, un B dans C5, C7 sans G ; cinq HasBarre ; Fmaj7 pour F et F5, B7 et B5 pour B et Bm, rien pour B♭ ; Fsus2 et C/F absents de la table |
Comme écrit | Confirmée | 2026-10-02, Lesson17.cs#L376-L406 |
Les tables d’arpèges de GA, ArpeggioFor et les modes de GA donnent-ils l’accord de septième et le mode de chaque degré ? |
Écrite à l’avance : les quatorze suffixes et symboles ; les modes et intervalles des deux tables et MajorScaleMode justes ; dix des douze autres gammes, les deux modes diminués DIFF |
Comme écrit | Confirmée | 2026-10-07, Lesson18.cs#L270-L315 |
Que renvoie ga_arpeggio_suggestions quand la requête nomme sa tonalité ? |
Écrite à l’avance : « Amm7 », « Dm7m7 », « G77 », « Cmaj7maj7 » ; le mode tiré du degré de la fondamentale, donc ionien pour A7 en A majeur et éolien pour un accord de A majeur en C majeur ; une tonalité « Am » lue comme A majeur ; B♭ en C majeur chromatique | Comme écrit ; GA #626 avait déjà corrigé le suffixe et le degré en amont | Confirmée | 2026-10-07, Lesson18.cs#L317-L341 |
La première gamme que propose ImprovisationSkill contient-elle l’accord, sur 31 symboles en C ? |
Écrite à l’avance : sauf pour sept, CM7 lu comme une septième mineure, Cmaj7♯5, C7♯11, C7♭13, C7+5, C7♭9 et C7♯9 ; 16 exemples de requête sur 17 acceptés ; F, C et G ionien sur Am F C G ; G/A lu comme G et A | Comme écrit | Confirmée | 2026-10-07, Lesson18.cs#L343-L368 |
Quelles notes OutsideNotesSkill.Classify appelle-t-il notes à éviter et tensions sur Cmaj7, C7, Cm7 et Cm7♭5 ? |
Écrite à l’avance : les notes un demi-ton au-dessus d’une note de l’accord à éviter, D♭, F et A♭ sur Cmaj7 ; cinq tensions dans aucune des gammes d’ImprovisationSkill ; sept des dix exemples de requête avec une réponse |
Comme écrit | Confirmée | 2026-10-07, Lesson18.cs#L370-L395 |
Classify est-il d’accord avec GAA-003 sur la pentatonique mineure de A au-dessus de Am7 et de A7 ? |
Écrite à l’avance : accord sur Am7 ; sur A7, D note à éviter mais C tension ; les trois notes qui tirent un mode ailleurs notes à éviter ; les cibles C♯, F♯ et G♯ | Comme écrit | Confirmée | 2026-10-07, Lesson18.cs#L404-L419 |
| Que contiennent les entrées de GA sur l’improvisation, et la boîte 1 et les modes de GAA-003 sont-ils justes ? | Écrite à l’avance : quatre entrées à catégorie vide, dont aucune n’associe un accord à une gamme ; la boîte 1 A C D E G, le cinquième mode de la pentatonique majeure de GA ; les trois modes bien épelés | Comme écrit | Confirmée | 2026-10-07, Lesson18.cs#L421-L448 |
2026-09-21 — Rapprochement amont de l’annexe C
Section intitulée « 2026-09-21 — Rapprochement amont de l’annexe C »- GA #711 a rapproché les constats exécutables de l’annexe C et a été fusionnée sous
b363c3f. - Les défauts 1 à 5, 7 à 11 et 13 à 18 sont corrigés avec une couverture de régression. Les entrées 6, 12 et 19 restent des limites documentées de conception ou de représentation.
- Le cours reste épinglé sur
a826864afin que les 40 lignesDIFFd’origine restent reproductibles ; l’annexe renvoie désormais au résultat amont plus récent sans réécrire cette preuve historique.
2026-09-18 — Corrections amont dans GA : résolution des anomalies
Section intitulée « 2026-09-18 — Corrections amont dans GA : résolution des anomalies »- 16 des 19 défauts résolus en amont dans GA :
- Notes et analyse de hauteurs : fabriques
Pitch.Flat(DFlat,FFlat,GFlat,EFlat,BFlat) corrigées ; regexes ancrées et précompilées dansPitchParser;Note.Flat.TryParsecorrigé pour que le B naturel s’analyse en B (et non B♭) avec support Unicode♭; séparation dePitchClass.TryParseSetNotation;SimpleIntervalSize.TryParseetCompoundIntervalSize.TryParserenvoientfalseen cas d’erreur sans lever d’exception. - Accords et voicings : classification des qualités et suffixes de
ChordFormulafiabilisée (séparation de dim7 des extensions 6e/13e,m7b5etdim7préservés) ; transposition respectueuse de l’orthographe dans le constructeur deChord; conservation deRootetFormulad’origine lors des renversements ; exclusion des cordes à vide (case 0) dansVoicing.HasBarre(). - Tonalités :
KeyTools.GetParallelKeyconserve la tonique avec le mode opposé ;KeyTools.GetNeighboringKeysrecherche par compte d’armure ;Key.GetIntervalrétablit l’ordre tonique-vers-note ;Key.Major.TryParserenvoiefalsesur entrée invalide ; ajout du membreHarmonicFunction.Subtonic; correction du chiffre romainiiidansCadences.yamlen mi mineur. - Le défaut 12 (compactage en base 12) reste une limitation figée pour conserver l’ordonnancement existant du catalogue ; les défauts 6 (
ModalFamily) et 19 (ClosestDiatonicKey) demeurent documentés comme des compromis de conception / heuristiques.
- Notes et analyse de hauteurs : fabriques
2026-09-15 — Un verdict sur chaque divergence, le ukulélé et la basse, trois annexes
Section intitulée « 2026-09-15 — Un verdict sur chaque divergence, le ukulélé et la basse, trois annexes »- Les 40 lignes
DIFFdes leçons 1 à 7 ont maintenant toutes un verdict, dans l’annexe C : 39 sont un bug de GA, une (PitchClass.Parse("A")) est une convention défendable avec un défaut de priorité en dessous, et aucune n’est une erreur du cours. Elles viennent de 19 défauts distincts — une seule ligne fausse dansNote.Chromatic.ToAccidentedexplique à elle seule huit lignes — et se répartissent en trois familles : le copier-coller à l’intérieur d’un bloc de membres presque identiques, un type réduit à qui l’on demande l’information qu’il a été construit pour jeter, et unTryParsequi lève une exception. - Neuf phrases, dans les leçons 1, 2, 3, 4, 6 et 7, présentaient une divergence comme une affaire de goût et donnent maintenant le verdict. La pire était le « Aucune des deux réponses n’est fausse » de la leçon 2 à propos de
ModalFamily: un mode est une rotation, une gamme a autant de modes qu’elle a de notes, et les pages d’Ian Ring répondent 7 et 6 là où GA répond 14 et 24. - Leçon 8, le ukulélé et la basse. Deux faits qu’un code taillé pour la guitare se trompe : un ukulélé est rentrant (sa quatrième corde est plus aiguë que sa troisième), et une basse est accordée entièrement en quartes (elle n’a pas l’unique paire irrégulière de la guitare). Les écarts d’un ukulélé sont 5 4 5, les mêmes que ceux des quatre cordes aiguës de la guitare ; un ukulélé baryton est ces quatre cordes ; une basse, ce sont les quatre graves, une octave plus bas.
Tuning.BuildPitchArraydécide quelle extrémité d’un accordage est la corde 1 en comparant la première hauteur avec la dernière seulement. Cela marche sur tout accordage qui monte ou descend de bout en bout. Sur les deux accordages de banjo 5 cordes de GA lui-même, dont la courte corde de bourdon est écrite en premier et sonne plus aigu que la dernière corde, il conserve l’ordre du fichier et numérote les cordes à l’envers. Le commentaire deStr, “String 1 is the string with the highest pitch”, ne peut pas tenir pour cet instrument : la corde 1 est D4 et la corde 5 est G4.Fretboard.GetNotedocumente son premier paramètre comme “Zero-based string index (0 = lowest string)” puis indexeTuning[stringIndex + 1], où la corde 1 est la plus aiguë. C’est le commentaire qui est faux, pas le code.- Annexe A :
InstrumentsConfigrenvoie un seul instrument. Le programme du cours référence maintenantGA.Business.Configet appellegetAllInstruments()dans la même exécution que celle qui lit le fichier lui-même : le fichier contient 122 instruments et 280 accordages, le chargeur en renvoie 1 et 2.InstrumentsYamlattend un document avec une listeInstruments:de{ Name, Tunings }; le fichier est une correspondance d’instruments, chacun une correspondance d’accordages, sans aucune cléInstrumentsnulle part. Le test de nullité comme le gestionnairewith _ ->retombent surdefaultData (), deux accordages de guitare écrits en dur. Rien n’échoue et rien n’est journalisé. - Sept des 280 accordages ne sont pas des hauteurs : deux entrées de pedal steel commencent par le nom de leur accordage (
C6,E9), une commence par le motTuninglui-même, une est le nom de l’instrument, une oublie une octave, et les deux guitares-harpes utilisent|pour séparer les cordes sous-basses. Le même glissement du nom pris pour une hauteur a produit les accordages à cinq hauteurs du ukulélé, qui s’analysent sans rien signaler. - Annexe B : la hiérarchie OPTIC. Un doigté que l’on fait monter jusqu’à une classe d’ensembles, une équivalence à la fois, avec le type de GA à chaque barreau —
PitchClassSetaprès O, P et C,TranspositionClassaprès T,SetClassaprès I — et les comptes 4096, 352 et 224 qui concordent avec le cours. Le schéma d’embedding OPTIC-K de GA coupe la même échelle en deux : STRUCTURE (dimensions 6-29, poids 0.45), ce sont les “pitch-class set invariants (O+P+T+I)”, MORPHOLOGY (30-53, poids 0.25) la “physical fretboard realization”, c’est-à-dire tout ce que l’échelle jette. Les poids et les plages sont lus dans le document de compétence, pas exécutés : à vérifier. - L’annexe explique aussi le chercheur de gammes d’Ian Ring comme l’échelle rendue cliquable — Rotate, c’est T, Reflect, c’est I — et Harmonious comme le même matériau vu par l’autre bout, par tonalité et par accord plutôt que par numéro d’ensemble.
- Le programme du cours passe à dix points d’entrée (
l1àl10), tous danscheck.sh.Diagrams.Fretboardprend maintenant un accordage, si bien que le ukulélé et la basse ont leurs propres diagrammes de manche ; les quatorze fichiers SVG existants sont identiques octet pour octet après le changement. - Les leçons s’écoutent. Un bloc de code ```play devient un lecteur : les hauteurs d’une même ligne sonnent ensemble, une ligne après l’autre. Les échantillons sont une note enregistrée par demi-ton de la guitare nylon de FluidR3_GM, épinglée sur un commit de
gleitz/midi-js-soundfontset chargée au premier clic — rien n’est synthétisé, aucun fichier audio n’est stocké ici, et chaque note est un échantillon joué à sa propre hauteur. L’accordage standard est dans la leçon 1, do ionien contre do dorien dans la leçon 2, les quatre voicings dans la leçon 3, le ii–V–I dans la leçon 7, et la forme de guitare contre les mêmes doigts sur un ukulélé dans la leçon 8. Le bloc est du code : il est identique dans les trois langues, seul le libellé du bouton suit la page.
2026-09-14 — Épingler GA et compiler contre lui
Section intitulée « 2026-09-14 — Épingler GA et compiler contre lui »- GA est épinglé sur
a826864(chore(quality): snapshot 2026-09-14), la tête demaince jour-là. Le clone local de GA de l’auteur n’est jamais utilisé ni modifié :fetch-ga.shfait son propre clone danscode/music-theory-ga/.ga, ignoré par Git. - Le clone est sans blobs (
--filter=blob:none) avec un sparse checkout hors mode cone de/Directory.Build.props,GA.Core,GA.Business.ConfigetGA.Domain.Core: Git ne télécharge que le contenu de ces fichiers à l’extraction.GA.Domain.Coreréférence les deux autres ;GA.Business.Configest un projet F#, que le SDK .NET compile sans configuration supplémentaire. - Dans Git Bash sous Windows, les motifs sparse commençant par
/étaient réécrits en chemins Windows (C:/Program Files/Git/Common/...) et ne correspondaient à rien.MSYS_NO_PATHCONV=1corrige le problème. - Un
git grepsur le clone sans blobs s’est bloqué : il récupérait un par un tous les blobs du dépôt. Lire des fichiers isolés avecgit show HEAD:<path>ne récupère que ceux-là. - Le projet du cours référence GA avec un simple
ProjectReference(GaTheory.csproj). Compilation locale des trois projets de GA plus le cours : 5 à 13 secondes après la première restauration. - Exécution de CI 34903462624, pour le push qui contenait le commit
79d2198: verte sur les trois OS, 34 s sous Linux, 47 s sous macOS, 67 s sous Windows, clone compris.
2026-09-14 — Vérifier la théorie
Section intitulée « 2026-09-14 — Vérifier la théorie »- Le
Theory.csdu cours est écrit uniquement à partir des définitions des manuels, puis comparé à GA. Sources : Open Music Theory (chapitres listés dans chaque leçon), Wikipédia (MIDI tuning standard, Guitar tunings, Guitar chord, Blues scale, Interval vector, List of set classes), la gamme 2741 d’Ian Ring, OEIS A000029 et A000031. - Le site d’Open Music Theory et l’OEIS répondent 403 aux clients HTTP simples ; les chapitres ont été lus dans un navigateur.
- Vérifié en masse sur les 4096 ensembles : la forme primaire de Rahn du cours est égale à la forme primaire d’identifiant minimal de GA pour chaque ensemble ; 224 classes d’ensembles et 352 classes de transposition, comme le dit l’OEIS. Les tassements de Forte et de Rahn diffèrent sur 6 classes d’ensembles, et sur 17 des 352 classes de transposition, le chiffre que donne List of set classes (les 17 ont été calculées avec le même algorithme en dehors du programme).
- Bugs trouvés dans le programme du cours lui-même pendant l’écriture : l’ensemble vide faisait planter la clé de tri de la forme primaire ; la règle du barré comptait d’abord les cordes à vide, en copiant GA ; le voicing
x02010a d’abord été nommé C6/A, jusqu’à ce que la fonction de nommage essaie d’abord la basse comme fondamentale.
2026-09-14 — Différences dans le code de GA (commit a826864)
Section intitulée « 2026-09-14 — Différences dans le code de GA (commit a826864) »Gardées comme lignes DIFF dans les sorties attendues, pour que la CI remarque quand GA change. Aucune n’a été signalée en amont.
Leçon 1, notes :
Pitch.Flat.DFlat(octave),FFlatetGFlatconstruisent D, G et A (Pitch.cs#L285-L295).- La regex de
PitchParsern’a pas d’ancres et ignore la casse :Pitch.Sharp.TryParse("Eb2")réussit avec B2. Note.Flat.Parse("B")donne B♭ : le parseur met en majuscules, puis lit unBfinal comme un bémol.PitchClass.Parse("A")donne 10 (chiffre à la manière de l’hexadécimal, exprès), alors que la note A vaut 9.SimpleIntervalSize.TryParselève une exception au lieu de renvoyerfalse.Fretboard.GetPositionsForNote(Note.Sharp.C)ne trouve rien : les positions contiennent desNote.Chromatic, et des records de types différents ne sont jamais égaux.- Mineur, sans effet visible :
ValueObjectUtils.IsValueInRange(..., normalize: true)calculecount = max - minet ajoute 1 après le modulo, contrairement àEnsureValueRange; avec la normalisation, les deux finissent toujours dans la plage (ValueObjectUtils.cs#L69-L92).
Leçon 2, gammes :
ModalFamilyregroupe les ensembles contenant 0 par vecteur d’intervalles, pas par rotation : 14 « modes » pour la mineure harmonique (ses 7 et ceux de la majeure harmonique), 24 pour la blues (avec son inversion et une classe en relation Z). Pas un bug, mais le nom évoque des rotations.- Les gammes mineures sont écrites à partir de A, donc
Scale.NaturalMinora l’identifiant de C majeur (2741). Normal pour un ensemble de classes de hauteurs, surprenant à côté des autres gammes, écrites à partir de C.
Leçon 3, accords :
ChordFormula.DetermineQualityne renvoie jamaisMajor7,Minor7,HalfDiminishedniDiminished7, doncGetSymbolSuffixdonne7pour maj7,dim7pour m7♭5 etdim6pour dim7.- Le constructeur de
Chordécrit toutes les notes autres que la fondamentale avec des dièses :Eb→Eb G A#,Gb7→Gb A# C# E. Chord.AnalyzeChordFormulasauteNotes[0]comme si c’était la fondamentale ; aprèsToInversion(1), c’est la basse, la tierce est perdue et la qualité estOther.Voicing.HasBarrecompte les cordes à vide : C ouvert avec un E grave, E ouvert et G ouvert sont des accords « barrés ».- Les diagrammes de voicings de GA commencent à la corde 1 (E aigu), à l’inverse des diagrammes d’accords.
CanonicalChordPatternCatalogliste quatre ensembles d’intervalles deux fois (9-sus4/dominant-11,major-6-add-9/6-9,minor-6-add-9/minor-6-9,augmented-7/dominant-7-sharp-5) ;TryFindExactne peut jamais renvoyer le second nom de chaque paire.- Dans l’usage qu’en fait le cours, le catalogue compare les intervalles depuis la note la plus grave, donc un renversement comme
032010(C/E) n’a pas de nom.
Leçon 4, classes d’ensembles :
IntervalClassVectorIdrange les comptes en base 12 ; les comptes de 12 de la gamme chromatique débordent et se décodent en<1 1 1 1 0 6>.CanonicalForteCatalogdécrit ses données comme “the standard Forte-column values”, mais stocke les écritures de Rahn pour les classes disputées (5-20 01568,6-Z29 023679), comme le tableau d’Open Music Theory. Les étiquettes sont justes ; seul le commentaire est imprécis.GrothendieckDelta.FromIcVstransforme exprès une différence nulle enIc1 = 1, donc des ensembles de même vecteur sont signalés à distance 1, et les « voisins à distance 1 » d’une triade sont les autres triades majeures et mineures, elle-même comprise.
2026-09-14 — Le serveur MCP de GA
Section intitulée « 2026-09-14 — Le serveur MCP de GA »Appelé depuis cette session via le serveur MCP de GA (le serveur n’indique pas de version ; il n’exécute peut-être pas le commit a826864). Les références au code portent sur a826864.
ga_set_class_subs("Am")et("G7"): les bonnes listes (toutes les triades majeures et mineures ; toutes les septièmes de dominante et demi-diminuées), mais chaque accord sous[maj](c.EndsWith("")dansChordAtonalTool.cs#L187-L190), et une description qui dit “Am and C are NOT equivalent”.ga_chord_intervals:Cm7b5→ P1 m3 P5 m7,G7b9→ P1 M3 P5 m7,C9→ P1 M3 P5 M9,Cmaj9→ P1 M3 P5 M9. La closure F# garde un intervalle par extension et ignore les altérations (DomainClosures.fs#L85-L98).ga_parse_chord("Cm7b5")a bien analyséalt:b5.ga_chord_to_set, qui tire ses classes de hauteurs de la même closure :Cm7b5→{C, Eb, G, Bb}, 4-26 (devrait être 4-27, avec G♭) ;Cdim7→{C, Eb, F#, Bb}, 4-27, “Scale: Major Seventh” (devrait être 4-28, avec A) ;C→ 3-11, forme primaire0 3 7, une famille modale de 6.ga_icv_neighbors("C", 1): douze lignes identiques<0 0 1 1 1 0> Δ=1 Forte:3-11 [Major Triad], expliquées par la règle de la différence nulle ci-dessus.ga_scale_by_id(2741): Major, avecForte Number: Some(n/a)(7-35 attendu).ga_scale_by_name("Dorian"): introuvable.get_tuning(Guitar, Standard): E2 A2 D3 G3 B3 E4, juste.get_chord_voicings("C", maxFret 3): “An error occurred”.ga_search_voicings("C major open chord"): la contrainte « ouvert » a été ignorée (diagramme8-8-x-x-7-x, étiqueté C/E).
2026-09-14 — Notes sur les modules Streeling
Section intitulée « 2026-09-14 — Notes sur les modules Streeling »Les modules sont générés à partir de GuitarAlchemist/Demerzel et n’ont pas été modifiés ; les leçons y renvoient là où ils aident.
- MUS-006, “Modes as Rotations” : un décalage circulaire à gauche de l’identifiant transpose (C majeur décalé de 2 donne D majeur, 2774) ; obtenir D dorien sur C demande le décalage opposé (1709). La réponse d’entraînement “rotate left by 2 semitones → 2nd mode” a le même problème de sens.
- MUS-006 dit que Forte « a identifié 224 classes d’ensembles distinctes pour les cardinalités de 3 à 9 » ; 224 compte toutes les cardinalités de 0 à 12.
- MUS-002 déduit la forme primaire des cordes à vide (E A D G B) comme
[0,2,5,7,9], en comparant des classes de hauteurs au lieu d’intervalles pour départager ; la forme primaire est(02479). Le même module répond « les triades majeures et mineures sont-elles des classes d’ensembles différentes ? Oui », puis range les deux dans 3-11, et écrit les formes primaires entre crochets là où Open Music Theory utilise des parenthèses. - GTR-002 étiquette la forme de C
x 3 2 0 1 0avec “Strings: 5-4-3-2-1” : six symboles pour cinq cordes, lexétant la corde 6.
2026-09-15 — Diagrammes
Section intitulée « 2026-09-15 — Diagrammes »- Les diagrammes sont des fichiers SVG écrits par le programme du cours (
Diagrams.cs) danssrc/assets/music-theory-ga/, puis importés comme composants par les leçons.mdx, donc intégrés à la page. Leurs couleurs sontcurrentColoret les variables CSS de Starlight (--sl-color-accent-high,--sl-color-orange-high,--sl-color-green-high,--sl-color-bg), avec une valeur de repli claire, et ils suivent le thème clair ou sombre du site. Ils ne contiennent que des noms de notes et des nombres, donc les trois langues partagent les mêmes fichiers ; la description se trouve dans l’aria-labelde chaque page et dans le paragraphe qui précède la figure. check.shles régénère en mémoire et les compare aux fichiers du dépôt ; la CI échoue quand un diagramme n’est pas à jour. Pour les régénérer :dotnet run --project GaTheory -c Release -- svg ../../src/assets/music-theory-ga.- GA a des composants React pour les mêmes images, que le cours lit mais ne réutilise pas :
BraceletNotation.tsx,FretDiagram.tsxetVexChordDiagram.tsx, sousReactComponents/ga-react-components/src/components. À la lecture deBraceletNotationet de sonNoteGroup(non exécuté, à vérifier dans un navigateur) : les points et les étiquettes sont placés àangle − 90°, mais les rayons deNoteGrouputilisentcos(angle)sans ce décalage, et seraient donc tournés d’un quart de tour ; etfindSymmetryAxesne teste que les axes qui passent par une note, manque les axes entre deux notes, et ajoute chaque axe deux fois.
2026-09-15 — Leçons 5 à 7 : différences dans le code de GA (commit a826864)
Section intitulée « 2026-09-15 — Leçons 5 à 7 : différences dans le code de GA (commit a826864) »Gardées comme lignes DIFF dans les sorties attendues. Aucune n’a été signalée en amont.
Leçon 5, tonalités :
Key.GetInterval(note)renvoienote.GetInterval(Root), l’intervalle qui monte de la note jusqu’à la tonique :Key.Major.C.GetInterval(E)vaut m6, pas M3 (Key.cs#L70-L76).Key.Major.TryParse("H")lève uneInvalidOperationExceptionau lieu de renvoyerfalse, etKey.Minor.TryParsea le même code (Key.cs#L153-L186).- Les outils MCP
get_parallel_keyetget_relative_keyont le même corps : l’autre mode sur la même armure, donc la tonalité homonyme de C est A mineur (KeyTools.cs#L135-L169). get_neighboring_keyspassekey.KeySignature.ToString(), la liste des altérations, à une recherche par nom de tonalité, et échoue (KeyTools.cs#L197-L215).
Leçon 6, accords d’une tonalité :
HarmonicFunctionExtensions.FromDegree(7)vaut toujoursLeadingTone, y compris pour la sous-tonique de la mineure naturelle ;ScaleDegreeFunction.Subtonicexiste mais n’y est pas utilisé.ga_diatonic_chordsnomme les fondamentales à partir d’une table de 12 noms : F♯ majeur obtientFdim(E♯dim) et G♭ majeurB(C♭) (DomainClosures.fs#L23-L36). LeKey.Notesdu cœur de GA écrit correctement les deux tonalités.- Lecture du code seulement (
GA.Domain.Servicesn’est pas compilé par le cours, à vérifier) :HarmonicFunctionAnalyzer.ParsetesteContains("tonic")avant"supertonic"et"mediant"avant"submediant", donc “Supertonic” serait analysé commeTonicet “Submediant” commeMediant(HarmonicFunctionAnalyzer.cs#L29-L72).ToPrimaryCategoryrange la médiante et la sus-dominante avec la tonique, là où Open Music Theory appelle iii et vi des prédominantes faibles : un choix de manuel, pas un bug.
Leçon 7, cadences et progressions :
Cadences.yamlnumérote “Chromatic Mediant (Metal)”, Em–Gm en E mineur,i biii, à partir de E majeur ; la cadence andalouse du même fichier est numérotée à partir des notes de E phrygien. Sa “Phrygian Half Cadence” est ♭II–i, là où le terme classique désigne iv⁶–V en mineur.PitchClassSet.ClosestDiatonicKeydépartage avec « la forme normale contient la classe de hauteurs 3, donc mineur ». La forme normale des notes d’une gamme majeure est0 1 3 5 6 8 T, donc C F G C, G D Em C, Dm7 G7 Cmaj7 et C Am F G7 sortent dans la relative mineure (PitchClassSet.cs#L597-L660).ga_key_from_progressionetga_analyze_progressionnotent les tonalités sur les seules fondamentales des accords, avec la gamme mineure naturelle, et préfèrent la fondamentale du premier accord (GuitaristProblemTools.cs#L157-L223,DomainClosures.fs#L255-L336).
2026-09-15 — Le serveur MCP de GA, tonalités et progressions
Section intitulée « 2026-09-15 — Le serveur MCP de GA, tonalités et progressions »Même réserve que le 2026-09-14 : le serveur n’indique pas sa version.
get_parallel_key("Key of C")→Key of Am.get_relative_key("Key of Ab")→Key of Fm, juste.get_key_signature_info("Key of Gm")→ fondamentale G,Bb Eb, notes G A Bb C D Eb F, juste.get_neighboring_keys("Key of C")etget_diatonic_chords("A minor"): “An error occurred invoking …”.ga_diatonic_chords: F♯ majeur →F#, G#m, A#m, B, C#, D#m, Fdim; G♭ majeur →Gb, Abm, Bbm, B, Db, Ebm, Fdim.ga_key_from_progression(["Am","F","C","G"])→ meilleure hypothèse A mineur (puis C majeur et D mineur, tous à 4/4), alors que la description de l’outil promet C majeur ;(["Dm7","G7","Cmaj7"])→ D mineur (puis C majeur et C mineur).ga_analyze_progression("Am Dm E7 Am")→ “Key: A major, I IV V I” ;("Dm7 G7 Cmaj7")→ “Key: D minor, i iv VII”.
2026-09-15 — Notes sur les modules Streeling, suite
Section intitulée « 2026-09-15 — Notes sur les modules Streeling, suite »- MUS-003, “Guitar Example — D7 to G Voice Movements” : la tablature met C à la case 1 de la corde de E aigu et F♯ à la case 1 de la corde de B. La case 1 donne F sur la corde de E aigu et C sur la corde de B ; le D7 ouvert (
xx0212) a F♯ à la case 2 de la corde 1 et C à la case 1 de la corde 2. Les leçons renvoient à MUS-003 pour ses fonctions, ses cadences et ses tonalités voisines, pas pour cet exemple. - MUS-003 range iii et vi dans la famille de la tonique ; la leçon 6 donne les deux lectures.
2026-10-02 — Les notes sur Streeling, corrigées en amont
Section intitulée « 2026-10-02 — Les notes sur Streeling, corrigées en amont »- Demerzel #1091, fusionnée en
e203e5a, a corrigé les points de MUS-006, MUS-002 et GTR-002 des notes du 2026-09-14 ; Demerzel #1098, fusionnée en98625c3, a corrigé la tablature de MUS-003 des notes du 2026-09-15. Learn #114 synchronise les deux ici. Àe203e5a:- MUS-006 décrit un mode comme un décalage circulaire à droite et prévient qu’un décalage à gauche transpose (lignes 146-148) ; ses réponses d’entraînement font une rotation à droite (lignes 194-195) ; il compte 208 classes de Forte de 3 à 9 notes et 224 en tout (ligne 223).
- MUS-002 donne (02479) comme forme primaire des cordes à vide (ligne 136), écrit les formes primaires entre parenthèses (ligne 105) et répond à la question des triades pour chaque équivalence (ligne 107).
- GTR-002 lit ses diagrammes de la corde 6 à la corde 1 (lignes 29-33).
- Le D7 de MUS-003 met F♯ à la case 2 de la corde 1 et C à la case 1 de la corde 2 (lignes 196-197).
- La leçon 2 citait l’ancienne règle de MUS-006 au présent ; elle la cite maintenant au passé, épinglée à Demerzel
fbfb2ee, le dernier commit avant #1091.
2026-09-24 — Correctifs amont vérifiés à nouveau
Section intitulée « 2026-09-24 — Correctifs amont vérifiés à nouveau »- GA a fusionné des correctifs pour les lignes du tableau QA : #681 pour les outils MCP et #682 pour les analyseurs le 2026-09-23, #625 pour la détection de tonalité le 2026-09-24. Le cours reste épinglé à
a826864: les leçons et les annexes montrent toujours le comportement contre lequel elles ont été écrites. recheck/probe.csappelle directement les mêmes méthodes d’outils, sans le transport MCP, sur GA52f7fd5; sa sortie estrecheck/results.txt. Il n’imprime que les faits dont parle chaque constat, etga-recheck.ymlle lance chaque lundi contre la branchemainde GA et échoue à la moindre différence avecresults.txt: un constat qui revient, ou un correctif qui change une réponse, s’y voit. Il ne fait pas partie decheck.sh, parce qu’il lui faut un clone complet de GA.- Corrigé, et relancé :
ga_chord_to_set('Cm7b5')→{C, Eb, F#, Bb}, 4-27, et('Cdim7')→ 0 3 6 9, 4-28 (orthographié{C, Eb, F#, A}).ga_set_class_subs('Am')→ les accords parfaits majeurs sous[maj], les mineurs sous[m].ga_icv_neighbors('C', 1)→ « No other set class within distance 1 of C » au lieu de douze lignes identiques.ga_scale_by_id(2741)→Forte Number: 7-35, etga_scale_by_name('Dorian')→ identifiant 1709.get_neighboring_keys('Key of C')→ F, C, G. - La détection de tonalité passe désormais par
KeyIdentificationService, qui ajoute un poids de cadence au nombre d’accords diatoniques (lignes 171-237).ga_analyze_progression("Dm7 G7 Cmaj7")→ « Key: C major », ii V I, etga_key_from_progressionest d’accord ;ga_analyze_progression("Am Dm E7 Am")→ « Key: A minor », i iv v i. - #729, fusionnée le 2026-09-24, corrige ce que cette relance donnait encore faux. En mineur, la dominante majeure appartient désormais à la tonalité :
"Am Dm E7 Am"→ i iv V i, confiance 4/4 au lieu de 3/4. Le chiffrage suit la qualité de l’accord (Bm7b5→ viiø,Bdim→ vii°). Une égalité entre tonalités relatives, qui partagent leurs accords, va à la tonalité dont l’accord de tonique ouvre la progression, et non plus à la première dans l’ordre alphabétique :[Am, F, C, G]→ A mineur,[C, G, Am, F]→ C majeur, etga_analyze_progressionetga_key_from_progressiondonnent maintenant la même tonalité. Relancé sur52f7fd5: lignes 12-19 deresults.txt. - Encore faux, non signalé : E7 est noté
v, parce que le chiffre vient du degré de la gamme mineure naturelle et non de l’accord (romanFor) ; il compte aussi hors de A mineur (3/4), par choix dans #625, qui crédite plutôt le V7 du mineur harmonique par la cadence.ga_key_from_progression(["Am","F","C","G"])met toujours A mineur en tête, à égalité 4/4 avec C majeur, et la description de l’outil promet toujours C majeur (ligne 168). - Non relancés :
get_chord_voicings,get_diatonic_chords("A minor")etga_search_voicings, qui ont besoin de GaApi. - La ligne
BraceletNotationétait une lecture de code ; #733, fusionnée le 2026-09-24, l’a reproduite et corrigée. Son test compare les coordonnées SVG. Sur l’ancien code, 3 de ses 4 cas échouent : le rayon de C finit à x=160 alors que son point est à x=100 ; une septième diminuée donne les directions d’axes [0, 0, 90] au lieu de [0, 45, 90, 135] ; la gamme majeure trace deux fois son unique axe. Les rayons utilisent maintenant le mêmeangleToCoordinatesque les points, et les axes sont cherchés par demi-pas, si bien que ceux qui tombent entre deux notes sont trouvés. Le rendu dans un navigateur reste à vérifier. - #734, fusionnée le 2026-09-24, corrige les deux lignes hors des dix-neuf défauts, chacune avec un test qui échoue sur l’ancien code.
getAllInstruments()rend 122 instruments et 280 accordages là où il en rendait 1 et 2. Neuf accordages mal formés ont été rétablis d’aprèsTunings.txt, le fichier dont vient le YAML : les deux entrées de pedal steel, le saz, la huapanguera, le dulcimer et les quatre accordages de ukulélé qui commençaient parC6ouD6. Les accordages de banjo à 5 cordes numérotent maintenant la corde 1 du côté aigu ; ceux qui montent ou descendent d’un bout à l’autre sont numérotés comme avant. Les noms d’instruments et d’accordages sont maintenant les clés du YAML,DropDplutôt queDrop D. - Une lecture de l’annexe B était fausse.
Dulcimer.LydianMode, c’estBb C4 C4 F3 Bb2, et j’avais pris le premierBbpour une hauteur sans octave.Tunings.txtdonneDucimer - Lydian Mode Bb C4 C4 F3 Bb2: leBbest la fin du nom de l’accordage, Lydian Mode Bb, que la conversion en YAML a laissée dans la liste des hauteurs. L’annexe et la ligne QA le disent maintenant.
2026-09-30 — Leçon 9 : prédictions avant la première exécution
Section intitulée « 2026-09-30 — Leçon 9 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. L’outil MCP ga_common_tones a été appelé avant que cette entrée soit écrite : ses réponses y sont donc rapportées comme des observations, pas comme des tests.
- Notes communes. Le cœur de GA,
Chord.FromSymbolpuisPitchClassSet.Intersect, est d’accord avec le cours sur les 13 paires d’accords de la leçon,Cmaj9,Cdim7etC6compris. - La plus petite conduite des voix du chatbot.
VoiceLeadingSkilldonne aux deux accords la même taille en répétant la fondamentale du plus petit (VoiceLeadingSkill.cs, lignes 185-194). Pour G → Cmaj7, il devrait répondre 5 demi-tons alors qu’il en existe 3, avec B doublé : G–G, B–B, B–C, D–E. Sur toutes les paires ordonnées entre les 48 triades (majeures, mineures, diminuées, augmentées) et les 60 accords de septième (maj7, 7, m7, m7♭5, dim7), répéter la fondamentale devrait manquer le minimum dans plus de 10 % des paires triade → septième, et moins souvent de la septième vers la triade. - Le motif d’accord du chatbot. Des dix exemples de requêtes de la compétence, un seul devrait échouer à sa propre expression régulière : « voice leading C major to G major », parce que le motif veut un chiffrage d’accord juste avant « to ».
ga_voice_leading_pairavec des voicings de tailles différentes. L’outil MCP apparie les notes les plus graves des deux voicings et compte 3 demi-tons par note restante (CompositionTools.cs, lignes 320-336). Du sol ouvert (320003) au do ouvert (x32010), il devrait donner 28, là où laisser de côté le sol grave donne 10.- Quintes et octaves parallèles.
ProgressionVoiceLeadingAnalyzerapplique la règle des manuels corde par corde, et le cours devrait être d’accord sur chaque exemple : barré de F → barré de G, 3 quintes et 4 octaves ; E5 → G5, 1 et 1 ; do ouvert → sol ouvert et G7 ouvert → do ouvert, une octave chacun, sur les cordes 5 et 2 ; Am → Dm, aucune. VoiceLeadingSpace. Avec les équivalences d’octave et de permutation, son raccourci (les décalages cycliques des deux accords triés, lignes 63-91) devrait égaler le minimum par force brute sur toutes les affectations de voix, pour chaque paire ordonnée d’ensembles de classes de hauteurs de 3 et de 4 notes, avec et sans transposition : aucun désaccord. Avec la transposition mais sans l’équivalence d’octave, il n’essaie que des décalages vers le haut de 0 à 11 demi-tons (lignes 46-61) : de C4 E4 G4 vers B3 D♯4 F♯4, il devrait donner 0, puisque B3 décalé d’un demi-ton vers le haut est C4, et de B3 D♯4 F♯4 vers C4 E4 G4, il devrait donner 3.SetClassOpticIndex. Pour deux classes d’ensembles de même taille, il additionne, pour chaque note de la première, la distance à la note la plus proche de la seconde (lignes 167-224) : plusieurs voix peuvent aboutir sur une même note. Cela ne peut jamais dépasser le minimum un-à-un, et devrait passer en dessous, et différer de lui-même quand on échange les arguments, sur certaines des 144 paires ordonnées des 12 classes de tricordes : (012) contre (048) devrait donner 2 dans un sens et 6 dans l’autre, là où l’un-à-un donne 6.
2026-09-30 — Leçon 9 : résultats face aux prédictions
Section intitulée « 2026-09-30 — Leçon 9 : résultats face aux prédictions »Le programme est Lesson11.cs (point d’entrée l11, après les deux annexes), sa sortie expected/l11.txt ; check.sh passe pour les leçons 1 à 11 et les 18 diagrammes. Il compile tels quels quatre fichiers de GA.Domain.Services (VoiceLeadingSpace, SetClassOpticIndex, ProgressionVoiceLeadingAnalyzer et son rapport), que fetch-ga.sh ajoute maintenant à son extraction partielle, et recopie tels quels le motif de la compétence du chatbot et la distance de l’outil MCP. La règle de doublure de la compétence est réécrite : pour elle, le cours teste sa lecture du code de GA, pas le chatbot en marche.
- Confirmée : 13 sur 13.
- Confirmée pour G → Cmaj7, 5 demi-tons là où le cours en trouve 3 avec B doublé, et pour la proportion : 1260 des 2880 paires triade → septième (43,8 %) sont au-dessus du minimum, de 4 demi-tons au plus, Cdim → Gmaj7 étant la première avec cet écart. Réfutée pour le sens : septième → triade manque exactement aussi souvent, 1260 fois. Je m’attendais à ce que le sens compte, parce que la fondamentale répétée appartient au premier accord dans un sens et au second dans l’autre. Mais la compétence complète toujours la triade, et une conduite des voix lue à l’envers coûte autant : les deux sens sont les mêmes 2880 problèmes.
- Confirmée : « voice leading C major to G major » est le seul exemple sans correspondance.
- Confirmée : 28 et 10. Deux autres lignes ont la même cause : G7 ouvert → C ouvert, 28 là où 8 existe, et
xx2010→x32010, le même accord avec une basse ajoutée, 19 là où 3 existe. - Confirmée : 5 changements sur 5, paire de cordes par paire de cordes.
- Confirmée : aucun désaccord sur 48400 paires ordonnées d’ensembles de 3 notes et 245025 d’ensembles de 4 notes, avec et sans transposition. Sans l’équivalence d’octave, 0 et 3 comme écrit ; C4 majeur → C5 majeur donne aussi 36 et l’inverse 3, là où une distance à transposition près donne 0.
- Confirmée : 2 dans un sens et 6 dans l’autre, un-à-un 6. Sur les 144 paires ordonnées : 35 sous le minimum un-à-un, aucune au-dessus, 70 qui changent quand on les échange.
Observations, pas des tests, du serveur MCP qui tournait sur cette machine le 2026-09-30 (sa version n’est pas indiquée) :
ga_common_tonesperd une note dans cinq paires sur sept : F pour Bm7b5/G7, B pour Cmaj9/Em7, A pour Cdim7/F7 et pour C6/Am7, B♭ pour C9/Gm7. La cause est la table de six extensions qui cassait aussiga_chord_to_set(DomainClosures.fs, lignes 85-98 àa826864). Sur la branchemainde GA (5c3a52a),domain.commonTonestire ses notes dechordTones, introduite par #681 dans son commit82bc7ee6; lu, pas exécuté.ga_parse_chord("Bm7b5")garde l’altération ("components":["ext:7","alt:b5"]) : les notes se perdent après l’analyse.ga_voice_leading_pair("G7", "C", limit 3, guitar)a évalué 225 paires et classé en tête deux voicings G7/B réduits (shells) à distance 5, puis un à 6. Leurs notes en plus sont en haut, là où apparier depuis le bas est juste, et la fonction recopiée donne le même 5 pour la première paire.
2026-10-01 — Leçon 10 : prédictions avant la première exécution
Section intitulée « 2026-10-01 — Leçon 10 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon.
- Le
ga_chord_substitutionsdu serveur MCP. Il appelle la closure F#domain.chordSubstitutions(DomainClosures.fs, lignes 535-621), qui garde les triades diatoniques de la tonalité ayant une note commune avec l’accord et les trie par nombre de notes communes, les ex æquo dans l’ordre de la gamme. Pour Am en C majeur, il devrait classer C et F en tête avec 2 notes communes, puis Dm et Em avec 1 : l’exemple de la description même de l’outil, « C (★★★, relative major), Em (★★, shared E/B), F (★, shared A) » (GaDslTool.cs, ligne 212), est faux sur les trois accords. Sans tonalité, la tonalité est la lettre de l’accord, en majeur : Am est comparé aux accords de A majeur, et B♭7 à ceux de B majeur. Àa826864, Bm7♭5 en C majeur est construit comme B D F♯ A : Dm et Bdim partagent donc 2 notes avec lui au lieu de 3. - Sa ligne de substitution tritonique. Elle est ajoutée quand l’accord a une tierce majeure et une septième mineure au-dessus de sa fondamentale (lignes 603-609) : G7 reçoit D♭7 ; G9 et G13 n’en reçoivent pas, parce qu’à
a826864« 9 » et « 13 » n’ajoutent que leur propre degré. - Le
ChordSubstitutionSkilldu chatbot : quel chemin prend chaque exemple. Le chatbot choisit la compétence par le sens ; la compétence lit ensuite les chiffrages d’accords avec son propre motif (ChordSubstitutionSkill.cs, lignes 69-71) et compare les accords quand elle en trouve deux (lignes 147-155). Sur ses douze exemples de requêtes, dix devraient prendre le chemin à un accord ; « Alternative chord for F major in C » devrait comparer F à C au lieu de lister des remplaçants ; « Borrow a chord from parallel minor » ne devrait trouver aucun chiffrage d’accord. - La liste à un accord de la compétence. Elle garde les ensembles de même taille à une distance d’ICV d’au plus 3 et les trie par coût (lignes 168-174).
GrothendieckDelta.FromIcVstransforme une différence nulle en 1 (GrothendieckDelta.cs, lignes 125-131), et deux ensembles de même taille ne peuvent être qu’à une distance paire : chaque accord ayant le même vecteur d’intervalles, ici les accords de la même classe d’ensembles, devrait sortir au coût 0,60 et à la distance 1, devant tout le reste, dans l’ordre de leurs nombres sur 12 bits. Pour G7 : Dm7♭5, A♭7, F7, D7, E♭m7♭5, sans D♭7 ; pour Am : Cm, C, A♭, D♭m, Fm, sans E7 ; pour C : Cm, A♭, D♭m, Fm, D♭, sans B♭7 ; pour Cmaj7 : D♭maj7, A♭maj7, Fmaj7, Dmaj7, Amaj7. - Les étiquettes à deux accords de la compétence. G7 → D♭7 devrait recevoir « Tritone Substitution », « Set-Class Equivalent » et « ICV Neighbor (L1 = 1) » ; Dm → G « Secondary Dominant », parce que le test ne regarde que les fondamentales (ligne 262) ; C → C « Set-Class Equivalent » et « ICV Neighbor (L1 = 1) » ; B♭7 → C « Backdoor Dominant » seul.
get_borrowed_chords. L’outil MCP transmet àContextualChordService.GetBorrowedChordsAsyncde GaApi (lignes 75-119), que le programme compile tel quel. Pour C majeur, il devrait lister 18 accords, chacun attribué au premier mode parallèle qui le contient, dans l’ordre dorien, phrygien, lydien, mixolydien, éolien, locrien : dorien Cm, D♯, Gm, A°, A♯ ; phrygien C♯, Fm, G°, G♯, A♯m ; lydien D, F♯°, Bm ; mixolydien E° ; éolien D° ; locrien C°, D♯m, F♯. Les fondamentales sur une touche noire sont écrites avec des dièses (ligne 137) et les chiffres romains ne portent aucune altération (lignes 157-170) : G♯, l’accord de A♭, est « VI », A♯ « VII », D♯ « III », F♯, l’accord de G♭, « V », et C♯ comme D sont « II ».ModalInterchange.yaml. Sur les 13 accords d’emprunt qu’il écrit en C majeur ou en A mineur, 9 devraient être justes et 4 faux : VI F majeur, VII G majeur et III C majeur sont les accords propres de A mineur, pas des accords empruntés à A majeur, et « bii°, Bb diminished » n’est pas dans A phrygien, dont le deuxième degré est B♭ majeur. Sur les six chiffres romains de ses exemples de mineur harmonique et mélodique, trois devraient être faux : ♭VI+ (l’accord augmenté du mineur harmonique est ♭III+), iv+ (le quatrième degré du mineur mélodique est un accord majeur, et son accord augmenté est aussi ♭III+) et le vii°7 du mineur mélodique, qui est semi-diminué. Aucun code de GA ne devrait lire le fichier : il est copié dans le répertoire de sortie et surveillé, et une modification ne fait qu’écrire « Unknown configuration file » dans le journal.
2026-10-01 — Leçon 10 : résultats face aux prédictions
Section intitulée « 2026-10-01 — Leçon 10 : résultats face aux prédictions »Le programme est Lesson12.cs (point d’entrée l12), sa sortie expected/l12.txt ; check.sh passe pour les leçons 1 à 12 et les 18 diagrammes. Il compile tels quels sept autres fichiers de GA, que fetch-ga.sh ajoute maintenant à son extraction partielle : GrothendieckDelta, GrothendieckService et son interface, ChordTemplateFactory et les usings globaux de GA.Domain.Services, et le ContextualChordService de GaApi avec ses modèles. Il recopie tels quels le motif, les tables, la sélection et les étiquettes de ChordSubstitutionSkill. La closure MCP domain.chordSubstitutions est en F#, dans un projet que le programme ne compile pas, donc elle est réécrite : pour les prédictions 1 et 2, le cours teste sa lecture du code de GA, pas le serveur en marche. Le test de YamlKnowledgeLoader, que le programme compilait déjà avec GA.Business.Config, ne faisait pas partie de la première exécution : je l’ai ajouté ensuite, dans son propre commit, aab1f4f, une fois le chargeur trouvé.
- Confirmée, sur la réécriture : C 2, F 2, Dm 1, Em 1 pour Am en C majeur, donc l’exemple de la description est faux sur les trois accords ; Em ne partage que E avec Am. Sans tonalité, A majeur pour Am et B majeur pour B♭7, et deux autres du même genre : F♯m contre F majeur, E♭ contre E majeur. Avec B D F♯ A, Bm7♭5 obtient Dm 2, G 2, Bdim 2, là où le cours, avec B D F A, met Dm en tête avec 3.
- Confirmée, sur la réécriture : G7, D7, E7 et C7 reçoivent D♭7, A♭7, B♭7 et G♭7 ; G9 et G13 n’en reçoivent aucun, pas plus que Gm7 et Cmaj7, à juste titre.
- Confirmée : dix requêtes listent des substituts, « Alternative chord for F major in C » compare F à C, et « Borrow a chord from parallel minor » reçoit « Could not identify a chord symbol in your message. »
- Confirmée : les quatre listes comme écrit, chaque accord au coût 0,60 et « Δ L1=1 ». 23 accords sont ex æquo pour G7, Am et C, 11 pour Cmaj7 : exactement les autres accords de chaque classe d’ensembles. D♭7 est le numéro 19 des 155 accords listés pour G7 ; pour Am, le C des manuels est le numéro 2 et F le numéro 8 sur 95. Dm7, que je n’avais pas prédit, donne Fm7, F♯m7, Am7, E♭m7, Cm7 ; son substitut des manuels, Fmaj7, est à 4, au-delà du seuil de 3, tout comme Em7 et Am7 pour Cmaj7. Sur les douze fondamentales de chaque type d’accord, les listes contiennent au plus 6 accords différents, et Dm7♭5 vient en tête pour les 12 septièmes de dominante.
- Confirmée pour les quatre paires. Dm → G reçoit aussi « Set-Class Equivalent » et « ICV Neighbor (L1 = 1) », que je n’avais pas notés. Deux paires que je n’avais pas prédites montrent les deux mêmes tests : F♯ → Bdim est une « Secondary Dominant », et C → Am un « ICV Neighbor (L1 = 1) » là où la distance est 0. G7 → C, D7 → G et B♭7 → C s’accordent avec le cours.
- Confirmée : les 18 accords dans l’ordre prédit, avec les modes et les chiffres romains prédits. Un détail que je n’avais pas noté : les notes sont écrites avec des dièses même quand le nom de l’accord n’en a pas : C mineur est C D♯ G, A diminué A C D♯.
- Confirmée pour les accords et les chiffres romains : 9 sur 13 justes, les 4 prédits faux ; ♭VI+, iv+ et le vii°7 du mineur mélodique faux, les trois autres justes. Réfutée pour les lecteurs.
YamlKnowledgeLoaderliste tous les fichiers*.yamldu répertoire de configuration, sauf cinq qui ont leur propre chargeur, et aplatit chaque entrée en texte ;YamlKnowledgeSyncServicestockerait ces textes dans la collectionyaml_knowledgeavec des embeddings, « for semantic retrieval by the chatbot agents », mais aucun hôte ne l’enregistre :AddSyncServices, qui le ferait, n’est jamais appelée, GaCLI a l’appel en commentaire avec un TODO, et rien d’autre ne lit la collection. Le test du programme rend les 8 entrées du fichier, et les quatre chaînes fausses sont dans leur texte. J’avais cherché le nom du fichier dans GA, ce qui trouve le surveillant et la copie du build, mais ne peut pas trouver un lecteur qui liste un répertoire.
Observations, pas des tests :
- Au passage, le chargeur saute
SpecializedTunings.yamlavec « While parsing a flow sequence, did not find expected ‘,’ or ‘]’. » sur la sortie d’erreur, et rien d’autre. Le fichier lui-même n’a pas été examiné. - MUS-003, que la leçon cite, contient une erreur dans son tableau des dominantes secondaires en G majeur : V7/IV est G7, G B D F, dont le F est hors de la tonalité, et non D7, qui est V7 lui-même. Sa note selon laquelle V7/IV ressemble à V7 devrait dire que V/IV, la triade de G, ressemble à I. À corriger dans Demerzel, où le module est écrit.
- La page de mission disait que le clone partiel de GA et la sortie de compilation demandent moins de 20 Mo. Mesuré le 2026-10-01 : 35,2 Mo, le clone 17,5 Mo et la sortie de compilation 17,7 Mo. La sortie de compilation, ce sont surtout les bibliothèques dont dépendent les projets de GA (les versions natives de PCRE.NET pour trois systèmes, FSharp.Core, MathNet.Numerics) et 2,2 Mo de fichiers de configuration de GA. La page dit maintenant environ 35 Mo.
- L’entrée de la leçon 9 disait que
check.shvérifie 19 diagrammes. Il en vérifie 18 : sa dix-neuvième ligneokest la ligne de synthèse de la commandesvg. Corrigé là-bas.
2026-10-01 — Leçon 11 : prédictions avant la première exécution
Section intitulée « 2026-10-01 — Leçon 11 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon.
- Les modes du mineur mélodique.
MelodicMinorModefait tourner les notes deScale.MelodicMinor, que GA écrit à partir de A (A B C D E F♯ G♯,Scale.cs, ligne 120) : ses sept modes commencent donc sur A, B, C, D, E, F♯ et G♯. ChaqueModeFormuladevrait être égale à la formule que le cours calcule à partir des pas 2 1 2 2 2 2 1, par rapport à la référence de la leçon 2 (éolien quand la tierce est mineure, ionien sinon) : mineur mélodique1 2 b3 4 5 >♮6 >♮7, dorien ♭21 >b2 b3 4 5 >♮6 b7, lydien augmenté1 2 3 >♯4 >♯5 6 7, lydien dominant1 2 3 >♯4 5 6 >b7, mixolydien ♭61 2 3 4 5 >b6 >b7, locrien ♮21 2 b3 4 >b5 b6 b7, altéré1 >b2 b3 >b4 >b5 b6 b7: 7 sur 7. - Les modes du mineur harmonique. De même pour
HarmonicMinorMode, à partir de A B C D E F G♯ (ligne 119) et des pas 2 1 2 2 1 3 1 : mineur harmonique1 2 b3 4 5 b6 >♮7, locrien ♮61 >b2 b3 4 >b5 >♮6 b7, ionien ♯51 2 3 4 >♯5 6 7, dorien ♯41 2 b3 >♯4 5 >♮6 b7, phrygien dominant1 >b2 3 4 5 >b6 >b7, lydien ♯21 >♯2 3 >♯4 5 6 7, altéré 𝄫71 >b2 b3 >b4 >b5 b6 >bb7: 7 sur 7. Le lydien ♯2 se mesure contre l’ionien, parce qu’une seconde augmentée n’est pas une tierce mineure, et la septième de l’altéré 𝄫7, de G♯ à F, est une septième diminuée. - Les noms courts. Les cinq types de degrés implémentent la même méthode
IScaleDegreeNaming.ToShortNamede trois façons : des chiffres romains sans qualité pour le majeur et le majeur harmonique, la triade de chaque degré pour les trois gammes mineures, saufiv#4pour le mineur harmonique etIV7pour le mineur mélodique. Face à la triade de chaque degré, 11 des 35 devraient différer : 4 pour le majeur, 5 pour le majeur harmonique, 1 pour le mineur harmonique et 1 pour le mineur mélodique, aucun pour le mineur naturel. Aucun code de GA n’appelleToShortName. PitchClassSet.StepBrightness. Elle fait la moyenne des pas entre notes consécutives et la divise par 6 (PitchClassSet.cs, lignes 265-283). Les pas d’un ensemble de deux notes ou plus totalisent 12 : la valeur vaut donc 2/n pour n notes, soit 0,2857 pour chacun des 21 modes du majeur, du mineur mélodique et du mineur harmonique. Sur les 4096 ensembles, elle devrait prendre 11 valeurs, puisque les ensembles de 0, 1 et 4 notes donnent tous 0,5.IcvBrightness. La luminosité des embeddings du chatbot (TheoryVectorService.cs, lignes 163-172) ne lit que le vecteur d’intervalles, que tous les modes d’une gamme partagent : 0,642857 pour les sept modes du majeur, 0,595238 pour le mineur mélodique, 0,571429 pour le mineur harmonique. Selon cette mesure, le lydien et le locrien sont aussi lumineux l’un que l’autre.UnifiedModeService.RankByBrightness. Elle additionne les classes de hauteurs de chaque membre de laModalFamilyde l’ensemble (UnifiedModeService.cs, lignes 228-242). Chaque membre contient C : la somme est donc la luminosité du cours pour le mode sur C, les demi-tons de ses sept degrés au-dessus de la tonique, additionnés. Pour le majeur, elle devrait donner l’ordre du cours, du lydien à 39 au locrien à 33. Pour le mineur mélodique aussi : lydien augmenté 40, lydien dominant 38, mineur mélodique 37, mixolydien ♭6 36, dorien ♭2 35, locrien ♮2 34, altéré 32. Pour le mineur harmonique, elle devrait classer 14 ensembles, parce que la famille contient aussi les sept modes du majeur harmonique (leçon 2). En tête vient le lydien augmenté ♯2 du majeur harmonique, à 41, devant le lydien ♯2 à 40. Trois ex æquo, à 37, 36 et 35, associent chacun un mode du mineur harmonique à un mode du majeur harmonique, dans l’ordre de leurs nombres sur 12 bits : dorien ♯4 avant majeur harmonique, mixolydien ♭2 avant mineur harmonique, phrygien dominant avant dorien ♭5.Modes.yaml. Le fichier que lisent les outils de modes du serveur MCP et leModesSkilldu chatbot contient 31 familles et 165 modes. 18 familles déclarent un vecteur d’intervalles. Pour 9 d’entre elles, ce n’est pas le vecteur que lePitchClassSetde GA calcule à partir des notes du premier mode de la famille : mineur harmonique, mineur mélodique, pentatonique majeure, gamme par tons, diminuée, blues, chromatique, triade augmentée et accord de septième majeure. Sur les 134 autres modes, 60 n’ont pas le vecteur du premier mode de leur famille. Parmi eux, l’ultralocrien de la famille du mineur harmonique, écrit C D♭ E♭ F♭ G♭ A♭ B♭ comme la gamme altérée, là où sa septième est B𝄫.- Les recherches de
ModesConfig.TryGetModeByIntervalClassVectordonne la ligne « Scale: » dega_chord_to_set(ChordAtonalTool.cs, ligne 112). Avec les vecteurs que GA calcule, C majeur devrait trouver Ionian ; le mineur harmonique, le mineur mélodique et Cmaj7, rien ; G7 et Bm7♭5, tous deux 4-27, « Major Seventh » ; C et Cm « Major Triad ».TryGetModeByNameest derrièreget_mode_info. Sur les 14 noms des deux classes de modes de GA, 8 devraient être trouvés et 6 non : Locrian Natural 2, Locrian Natural 6, Ionian Augmented, Dorian Sharp 4, Lydian Sharp 2 et Altered bb7. Aucun nom alternatif ne devrait être trouvé, « Super Locrian » et « Acoustic Scale » compris, parce queGetAllModesmet les noms alternatifs de chaque mode àNone(ModesConfig.fs, ligne 284).GetModalFamilies, que litModesSkill, les garde.
2026-10-01 — Leçon 11 : résultats face aux prédictions
Section intitulée « 2026-10-01 — Leçon 11 : résultats face aux prédictions »Le programme est Lesson13.cs (point d’entrée l13), sa sortie expected/l13.txt ; check.sh passe pour les leçons 1 à 13 et les 18 diagrammes. Il compile tel quel un fichier de GA de plus, UnifiedModeService, que fetch-ga.sh ajoute maintenant à son extraction partielle, et recopie telle quelle TheoryVectorService.IcvBrightness, interne à GA.Business.ML. ModesConfig vient avec GA.Business.Config, que le programme compilait déjà. Le test des noms que perd Modes.yaml ne faisait pas partie de la première exécution : je l’ai ajouté ensuite, dans son propre commit, 13e7607, une fois que la première exécution m’en avait montré un.
- Confirmée : 7 formules sur 7, et les 7 orthographes. Les noms de GA sont ceux des manuels en ASCII, de « Dorian b2 » à « Locrian Natural 2 ».
- Confirmée : 7 sur 7, notes comprises. GA appelle le septième mode « Altered bb7 » et le troisième « Ionian Augmented ».
- Confirmée : 11 sur 35, degré pour degré.
- Confirmée : 0,2857 pour les 21 modes, et 11 valeurs sur les 4096 ensembles, une par taille, les ensembles de 0, 1 et 4 notes partageant 0,5.
- Confirmée : 0,642857, 0,595238 et 0,571429, la même pour chaque mode de chaque gamme.
- Confirmée : le majeur et la mineure mélodique dans l’ordre du cours. Pour la mineure harmonique, 14 ensembles, le lydien augmenté ♯2 du majeur harmonique en tête avec 41, et les trois ex æquo dans l’ordre prédit.
- Confirmée : 31 familles, 165 modes, 18 vecteurs déclarés, les 9 prévus faux ; 60 des 134 autres modes sans le vecteur de leur famille ; l’Ultralocrian avec le vecteur de la mineure mélodique,
<2 5 4 4 4 2>. - Confirmée pour les vecteurs, comme écrit. Réfutée en partie pour les noms : 9 des 14 sont trouvés, pas 8. « Ionian Augmented » est trouvé, mais dans la famille Double Harmonic : le mode que le fichier écrit « Ionian Augmented #2 » (
Modes.yaml, ligne 655) revient sans « #2 », que YAML lit comme un commentaire. J’avais lu la famille de la mineure harmonique, où « Ionian Augmented » est un nom alternatif, et pas le reste du fichier. Les cinq autres noms ne sont pas trouvés, pas plus que « Super Locrian », « Acoustic Scale » et « Spanish Phrygian », tous noms alternatifs ;GetModalFamiliesgarde 104 noms alternatifs,GetAllModesaucun.
Le test ajouté après la première exécution, dans 13e7607 : 8 des 165 noms perdent leurs altérations dans un commentaire YAML, aux lignes 631, 639, 655, 663, 667, 671, 679 et 681, et 7 noms reviennent pour plus d’un mode. Deux des sept ne sont pas des noms coupés : les familles Minor Second et Major Second appellent leurs renversements « Major Seventh » et « Minor Seventh », comme deux accords de la famille Major Seventh Chord.
Observations, pas des tests :
- La gamme chromatique est le seul mode dont le
PitchClassSetde GA et le cours calculent le vecteur différemment : GA<1 1 1 1 0 6>, le cours<12 12 12 12 12 6>.IntervalClassVectorIdle documente comme une « KNOWN LIMITATION » de son codage en base 12 (IntervalClassVectorId.cs, lignes 3-15). Le fichier déclare<11 11 11 11 11 6>pour sa famille, faux dans les deux cas. - Le commentaire de
HarmonicMajorScaleModerenvoie à la gamme 2773 d’Ian Ring (HarmonicMajorScaleMode.cs, ligne 14), qui est le lydien, C D E F♯ G A B ; le majeur harmonique est la 2485. Les liens deMelodicMinorMode(2733) et deHarmonicMinorMode(2477) sont justes. get_mode_infoimprime le vecteur déclaré de la famille sur une ligne appelée « Intervals » et termine chaque réponse par « Alternate Names: None » (ModeTool.cs, lignes 27-33). Lu, pas exécuté.
2026-10-01 — Leçon 12 : prédictions avant la première exécution
Section intitulée « 2026-10-01 — Leçon 12 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon.
- La transposition limitée. Un ensemble est à transpositions limitées quand une transposition autre que T0 le ramène sur lui-même. Si d des douze transpositions le fixent, il a 12/d transpositions distinctes et, avec n notes, n/d modes distincts. Sur les 4096 ensembles, 76 devraient remplir la condition, l’ensemble vide et la gamme chromatique compris, en 17 classes de transposition. Sans ces deux-là, ce sont les 15 « modes de Messiaen généralisés » que compte Wikipédia. Ils se répètent tous les 2 demi-tons (1 classe, la gamme par tons), tous les 3 (2 classes : la septième diminuée et la gamme octatonique), tous les 4 (3 classes : la triade augmentée, la gamme augmentée et le troisième mode de Messiaen) ou tous les 6 (9 classes). Les sept modes de Messiaen devraient avoir 2, 3, 4, 6, 6, 6 et 6 transpositions et 1, 2, 3, 4, 3, 4 et 5 modes, comme le donne sa liste. La méthode
UnifiedModeService.IsSymmetricSetde GA teste la même chose,Transpose(k)pour k de 1 à 11 (UnifiedModeService.cs, lignes 349-362) : elle devrait s’accorder avec le cours sur les 4096 ensembles. - Les trois classes de modes symétriques de GA.
WholeToneScaleMode,DiminishedScaleModeetAugmentedScaleModecodent en dur 2, 3 et 4 transpositions : les nombres du cours. Mais leurs types de degrés vont de 1 à 6, 8 et 6 :Itemsdonne donc 20 modes, qui font 1, 2 et 2 ensembles différents une fois chacun ramené sur C. Les commentaires des classes promettent deux, deux et quatre modes distincts (ligne 12 de chaque fichier) : les nombres de la gamme par tons et de la gamme augmentée sont faux. « Augmented dominant » et « Augmented mode 5 » devraient être le même ensemble que « Augmented », C E♭ E G A♭ B, et « Augmented Lydian » et « Augmented mode 6 » le même que « Augmented inversed ». - Les deux gammes diminuées.
DiminishedScaleModefait tournerScale.Diminished, C D E♭ F G♭ A♭ A B (Scale.cs, ligne 62), qui commence par un ton. Le degré 1, que GA nomme « Half-whole diminished », devrait donc être la gamme ton-demi-ton, et le degré 2, « Whole-half diminished », la gamme demi-ton-ton : les noms sont inversés.Modes.yamlnomme les deux mêmes écritures dans le bon sens (lignes 331-342). - La gamme par tritons.
Scale.Tritonevaut C D♭ E F♯ G A (ligne 67). La gamme par tritons, les notes de l’accord de Petrouchka, est C D♭ E G♭ G B♭, 0 1 4 6 7 10 : GA a A à la place de B♭. Les notes de GA devraient former 6-Z50 (014679), le vecteur<2 2 4 2 3 2>de l’exercice de la leçon 4, avec 12 transpositions et 6 modes ; la gamme par tritons est 6-30 (013679), avec 6 transpositions et 3 modes. Le commentaire deTritoneScaleModela décrit comme “a symmetrical scale built from alternating half steps and minor thirds”, avec “only two distinct modes” (lignes 11-14). Les pas de GA sont 1 3 2 1 2 3, ceux de la gamme par tritons 1 3 2 1 3 2, et des demi-tons alternant avec des tierces mineures donnent la gamme augmentée. IdentifyMessiaenMode. Elle compare l’identifiant de la forme première de l’ensemble, la plus petite de ses 24 formes (leçon 4), à des identifiants fixes (UnifiedModeService.cs, lignes 290-347). Sur les sept modes de Messiaen, elle devrait nommer les trois premiers. Pour les modes 4 à 7, les formes premières valent 975, 455, 1495 et 2015, mais GA teste 2535, 2275, 3315 et 3055, des identifiants d’autres transpositions :MessiaenModeIndexdevrait donc rester vide. Les deux ensembles que son commentaire donne pour le mode 6 sont des formes du mode 4, et le commentaire donne au mode 3 trois transpositions au lieu de quatre.IsMonomodal. Elle vaut vrai quand la famille modale d’un ensemble, les ensembles contenant 0 qui ont son vecteur d’intervalles, n’a qu’un membre (PitchClassSet.cs, ligne 189). Elle remplit la dimension des embeddings appelée “Is Symmetric/Monomodal” (ModalVectorService.cs, ligne 132 ;EmbeddingSchema.cs, lignes 881-882). Elle devrait valoir vrai pour 29 ensembles : les 12 notes seules et l’ensemble vide, qui partagent le vecteur<0 0 0 0 0 0>, 6 tritons, 4 triades augmentées, 3 septièmes diminuées, 2 gammes par tons et la gamme chromatique. Cela fait 17 des 76 ensembles à transpositions limitées. La gamme octatonique, que le commentaire de la propriété donne en exemple (ligne 187), n’en fait pas partie, pas plus que la gamme augmentée et les modes 3 à 7 de Messiaen.AtonalModalFamilies.yaml. SonIsSymmetricvaut vrai pour 6 de ses 200 familles, celles qui n’ont qu’un mode distinct : notes seules, triton, triade augmentée, septième diminuée, gamme par tons et gamme chromatique.ModesSkillrépond à « modes of limited transposition » avec ces six-là (ModesSkill.cs, lignes 596-601 et 687-705), puis nomme “octatonic (3), and hexatonic (4)”, que sa liste omet ; la note seule qu’il liste a 12 transpositions. Les numéros de Forte du fichier viennent deProgrammaticForteCatalog, qui numérote chaque cardinalité par ordre croissant de l’identifiant du vecteur (ProgrammaticForteCatalog.cs, lignes 123-133), l’inverse de l’ordre de Forte pour les petits ensembles. La liste devrait imprimer 2-1, 3-1, 4-1 et 6-1 pour 2-6, 3-12, 4-28 et 6-35. Face auForteCatalogde GA lui-même (leçon 4), aucune des familles de 2, 3, 4, 8, 9 et 10 notes ne devrait s’accorder, alors que 1-1, 11-1 et 12-1 devraient s’accorder.AtonalChordAnalysisService.IsSymmetricalSet. Elle trie les classes de hauteurs et demande si tous les pas entre voisines sont égaux, en laissant de côté le pas de la dernière à la première (AtonalChordAnalysisService.cs, lignes 220-233). Elle devrait signaler 156 des 4096 ensembles : les 66 ensembles de deux notes et toute suite régulièrement espacée qui tient entre 0 et 11. 16 d’entre eux sont à transpositions limitées : 6 tritons, 4 triades augmentées, 3 septièmes diminuées, 2 gammes par tons et la gamme chromatique. Les 60 autres ensembles à transpositions limitées, dont les gammes octatoniques, ne devraient pas être signalés. C D E devrait être signalé, et sa transposition B♭ C D non.- La symétrie miroir.
TranspositionClass.IsInversionallySymmetriccompare la forme première d’une classe à la forme première par transposition de son renversement (TranspositionClass.cs, lignes 52-53). Elle devrait s’accorder avec le cours sur les 352 classes de transposition, dont 96 symétriques : 352 − 224 = 128 classes d’ensembles se scindent en deux classes de transposition, et les 96 autres non. Sur les 15 classes à transpositions limitées, toutes sauf les deux formes de 6-30 devraient être symétriques en miroir, chacune avec autant d’axes de symétrie que de transpositions qui la fixent : 6 pour la gamme par tons, 4 pour la gamme octatonique, 3 pour la gamme augmentée.
2026-10-01 — Leçon 12 : résultats face aux prédictions
Section intitulée « 2026-10-01 — Leçon 12 : résultats face aux prédictions »Le programme est Lesson14.cs (point d’entrée l14), sa sortie expected/l14.txt ; check.sh passe pour les leçons 1 à 14 et les 20 diagrammes. Il compile tel quel un fichier de GA de plus, AtonalChordAnalysisService, que fetch-ga.sh ajoute maintenant à son extraction partielle, et appelle son IsSymmetricalSet privé par réflexion. UnifiedModeService, compilé depuis la leçon 11, donne IsSymmetricSet et MessiaenModeIndex ; AtonalModalFamiliesConfig et ModesConfig viennent avec GA.Business.Config. ModesSkill appartient à GA.Business.ML, que le cours ne compile pas, donc le programme reconstruit sa réponse à partir de son format et des mêmes données. Le test de ce que les deux catalogues de modes de GA appellent les quinze classes ne faisait pas partie de la première exécution : je l’ai ajouté ensuite, dans son propre commit, 6b4039a, une fois que la première exécution m’avait montré « Major Bebop Family ».
- Confirmée : 76 ensembles en 17 classes de transposition, 15 sans l’ensemble vide et la gamme chromatique, en 14 classes d’ensembles ; 1, 2, 3 et 9 classes qui se répètent tous les 2, 3, 4 et 6 demi-tons ; les sept modes de Messiaen comme sa liste les donne ;
IsSymmetricSetd’accord sur les 4096 ensembles. - Confirmée : 2, 3 et 4 transpositions ; 6, 8 et 6 modes, qui font les ensembles 1365 ; 2925 et 1755 ; 2457 et 819 sur C. « Augmented dominant » et « Augmented mode 5 » sont 2457 comme « Augmented », « Augmented Lydian » et « Augmented mode 6 » 819 comme « Augmented inversed ».
- Confirmée : le degré 1, « Half-whole diminished », a les pas 2 1 2 1 2 1 2 1, et le degré 2 les pas 1 2 1 2 1 2 1 2.
- Confirmée : la gamme de GA est 6-Z50,
<2 2 4 2 3 2>, avec 12 transpositions et 6 modes ; la gamme triton 6-30,<2 2 4 2 2 3>, avec 6 et 3. Le propreIsSymmetricSetde GA répond False et True.TritoneScaleMode.Itemsdonne 6 modes, 6 ensembles différents sur C. - Confirmée : modes 1 à 3 nommés, 4 à 7 non. Le programme liste les huit identifiants que la méthode teste : 2925, 2535, 2275, 3315 et 3055 ne sont pas des formes primaires, et 3315 est une forme du mode 4.
- Confirmée : 29 ensembles, 1, 12, 6, 4, 3, 2 et 1 de 0, 1, 2, 3, 4, 6 et 12 notes, dont 17 limités ; la gamme octatonique n’est pas signalée.
- Confirmée : 200 familles, 6 avec
IsSymmetric, 15 avec des transpositions limitées ; les six familles de la réponse avec Forte 1-1, 2-1, 3-1, 4-1, 6-1 et 12-1. Aucune étiquette ne concorde pour 2, 3, 4, 8, 9 et 10 notes, et 1-1, 11-1 et 12-1 concordent. La prédiction ne disait rien de 5, 6 et 7 notes : une famille d’hexacordes concorde, ce qui fait 4 sur 200. Les étiquettes sont une sortie périmée, pas une erreur inconnue : GA #436 avait fait passer le générateur àForteCatalogavanta826864(Demos/AtonalModalFamiliesGenerator/Program.cs, ligne 183) et remis à plus tard la régénération du fichier ; le fichier n’a pas changé depuis7a4308a, qui l’a produit. - Confirmée : 156 ensembles, 16 limités, 60 ensembles limités non signalés ; C D E True, B♭ C D False.
- Confirmée : 352 classes de transposition, 96 symétriques par miroir, toutes d’accord ; 13 des 15 classes limitées symétriques par miroir, avec 6, 4 et 3 axes pour les gammes par tons, octatonique et augmentée ; les deux formes de 6-30 sans aucun. Aucun ensemble n’a un nombre d’axes miroirs autre que son nombre de transpositions qui le fixent.
Le test ajouté après la première exécution, dans 6b4039a : AtonalModalFamilies.yaml nomme six des quinze classes d’après Modes.yaml, dont deux à tort. Le quatrième mode de Messiaen est « Major Bebop Family », parce que le « Major Bebop Mode 8 » de Modes.yaml, C D♭ D F G♭ G A♭ B (lignes 725-726), est le quatrième mode de Messiaen, pas une rotation de la gamme bebop ; la septième diminuée est « Major Seventh Chord Family », d’après la « Diminished Seventh » de cette famille (ligne 531). TryGetModeByIntervalClassVector ne nomme qu’une classe, le sixième mode de Messiaen, « Diminished (Half-Whole) » : la famille Diminished déclare <4 6 4 6 4 4> (lignes 328-329), le vecteur du sixième mode. La gamme octatonique n’est trouvée nulle part. Vingt modes de Modes.yaml appartiennent aux quinze classes, dont dix à la gamme octatonique.
Observations, pas des tests :
ModalCharacteristicIntervalServicerange chaque mode symétrique à une base plus son degré moins un, avec les bases 206, 208 et 212 (ModalCharacteristicIntervalService.cs, lignes 114-118 et 135) : les 8 modes diminués chevauchent les 6 modes par tons en 208 à 211 et les 6 modes augmentés en 212 à 215, donc les indices 208 à 215 sont écrits deux fois. Lu, pas exécuté.- Le constructeur de
GenericSymmetricScaleModea pour valeurs par défauthasLimitedTranspositions = trueettranspositionCount = 12(GenericSymmetricScaleMode.cs, lignes 23-27), deux valeurs qui se contredisent. - Les tests de GA pour les modes 5 à 7 de Messiaen affirment
Is.Null.Or.EqualTo(...), et celui du mode 6 construit 3315, une forme du mode 4 (UnifiedModeAdvancedTests.cs, lignes 87-119). - Le commentaire de
ProgrammaticForteCatalogqualifie de “minor” ses différences avec la numérotation de Forte (lignes 16-18) ; celui deForteCatalogdit qu’elles divergent “for most set classes” et ne doivent pas être montrées (lignes 9-12). - MUS-006 dit que les gammes symétriques ne sont pas chirales. La gamme triton a des transpositions limitées et aucun axe miroir.
2026-10-01 — Leçon 13 : prédictions avant la première exécution
Section intitulée « 2026-10-01 — Leçon 13 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon. Le cours lit 41 symboles d’accords sur C : 14 accords étendus, 11 accords altérés, 12 écritures d’accords courants prises dans Open Music Theory et Wikipédia, deux accords à basse indiquée et deux mots anglais.
- Deux parseurs de symboles d’accords. Le C# de GA en a deux :
Chord.FromSymboldansGA.Domain.Core(Chord.cs, lignes 75-140) etChordSymbolParserdansGA.Domain.Services(ChordSymbolParser.cs, lignes 56-189), qu’appellent leVoicingFilterServicede GaApi et leSpectralRagOrchestratordu chatbot. Les deux mettent le suffixe en minuscules et le cherchent dans une table.FromSymboldevrait en lire 14 sur 41 correctement : les 11 accords étendus de sa table (9, maj9, m9, 11, maj11, m11, 13, maj13, m13, 6/9, add9), Cø7, et les deux mots, qu’il rejette. Il devrait lever une exception sur les 26 autres accords : tous les accords altérés,C7sus,C9sus4,Cadd2, les deux accords à basse indiquée, et les écritures des manuels eux-mêmes,Cmi,Cmi7,Cma7,Co7,C∆7(le ∆ d’Open Music Theory, U+2206 ; GA accepte △, U+25B3),CΔ7(le Δ grec de Wikipédia),Cm(b5),Cm7♭5(avec le signe ♭),C+7etCm(maj7).CM7, une septième majeure, devrait revenir en septième mineure sur C : c’estm7une fois en minuscules.ChordSymbolParserne devrait lever d’exception sur aucun et en lire 17 correctement. Après sa table, il testeContains("alt"), puisb5,#5,b9,#9,#11etb13, et renvoie une triade majeure quand rien ne correspond (lignes 98-140). DoncC7b9,C7#9,C7b13,Cmaj7#11et les classes de hauteurs deC/Esortent justes.C7b5etC7#5perdent leur septième (C E G♭, C E G♯) ;C7#11etC9#11reçoivent une septième majeure (C E G B F♯) ;C7altreçoit une quinte juste et aucune quinte altérée (C E G B♭ D♭ D♯) ;C7b9#11etC7#9b13perdent leur deuxième altération ;Cm(b5)sort en C E G♭ ;CM7est de nouveau une septième mineure.Cmi,Cmi7,Cma7,Co7,C∆7,CΔ7,Cm7♭5,C+7,Cm(maj7),C7sus,C9sus4,Cadd2etC/F#sortent tous en triade de C majeur, et les mots aussi : “Can” donne C majeur, “Give” G majeur. Les tests de GA rangentC7b5,C7#5,GaltetC/Eparmi les symboles valides et vérifient seulement qu’un accord revient (ChordSymbolParserTests.cs, lignes 11-18 et 33-40).
- Les accords étendus, relus.
FromSymbolconstruit chaque 11 et chaque 13 comme l’empilement complet de tierces, avec les intervalles composés 14, 17 et 21 (Chord.cs, lignes 131-136). C13 a donc sept notes, la collection de F majeur, le même ensemble queFmaj13etGm13. LeCanonicalChordPatternCatalogde GA range les voicings que jouent les musiciens, le 13 sans sa onzième et le 11 majeur sans sa tierce (CanonicalChordPatternCatalog.cs, lignes 82-91) :TryFindExactne devrait rien trouver pour C13, Cmaj13, Cm13 et Cmaj11, et nommer les sept autres.ChordFormula.GetSymbolSuffixdevrait perdre le « maj » de maj9, maj11 et maj13, comme il perd celui de maj7 (leçon 3), alors queBasicChordExtensionsService.GenerateChordName(lignes 164-178), à partir de la même qualité et de la même extension, devrait nommer les onze correctement. - Les altérations, nommées par
ChordAlterationService. Un intervalle d’accord porte uneFunction, mais chaque constructeur que le cours a trouvé la remplit d’après les demi-tons modulo 12 (ChordFunctionExtensions.FromSemitones, lignes 13-22) : 3 est une tierce, 6 et 8 sont des quintes, et 1 tombe surRoot.DetectAlterationFromSemitones(lignes 87-102) lit ensuite 1 comme ♭9, 6 comme ♭5 et 8 comme ♯5, et jamais 3 comme ♯9, etGenerateNameWithAlterations(lignes 37-61) appelle « 7alt » une septième de dominante qui porte une altération quelconque. Les neuf « accords altérés courants » de GA lui-même (lignes 186-202), construits d’après leurs descriptions et passés comme GA construit un gabarit analytique (ChordTemplate.Analytical.FromPitchClassSet), devraient tous revenir sous un autre nom : C7alt enC9(b9,b5,#5), C7(♭9) enC9(b9), C7(♯9) enC7sans altération, C7(♭5), C7(♯5), C7(♯11) et C7(♭13) tous les quatre enC7alt, C7(♭9,♯11) enC9(b9,b5), et Cmaj7(♯11) enCmaj7(b5). Les quintes qui définissent un accord devraient compter aussi comme des altérations :Cdim(b5),Caug(#5),Cdim7(b5)pour Cm7♭5 etC6(b5)pour Cdim7. - Tous les gabarits de
ChordTemplateFactory.GenerateAllPossibleChordsrenvoieGenerateFromAllModalFamilies, qui parcourt déjà les gammes traditionnelles, symétriques et pentatoniques, puis parcourt les trois une seconde fois (ChordTemplateFactory.cs, lignes 37-62 et 93-115) : chaque gabarit devrait venir deux fois, la seconde moitié répétant la première. Sur ces gabarits,ChordAlterationServicene devrait jamais trouver ♭13, et ne trouver ♯9 que dans les gabarits Sus2 et ♯11 que dans les gabarits Sus4, le seul endroit où la fabrique fixe la fonction à la main (ligne 495). - Les polyaccords.
ga_polychordréunit les classes de hauteurs de deux accords (ChordAtonalTool.cs, lignes 194-218). Sa description promet “B triad over C triad → Lydian mode set {C,D,E,F#,G,B}” (ligne 198), mais une triade de B majeur est B D♯ F♯ : le code de l’outil lui-même, lu avecdomain.chordIntervals(DomainClosures.fs, lignes 85-92 et 199-227), devrait imprimer {C, Eb, E, F#, G, B}. {C, D, E, F♯, G, B}, c’est B mineur sur C. Des 28 modes des gammes majeure, mineure mélodique, mineure harmonique et majeure harmonique construits sur la fondamentale de l’accord du bas, seul le lydien devrait contenir Bm/C, et seul le lydien ♯2, le sixième mode de la mineure harmonique, B/C.AdvancedHarmony.yamldit que C majeur sur F♯ majeur “Creates all 12 chromatic pitches” (ligne 104) : cela en fait six, C D♭ E F♯ G B♭, l’accord de Petrouchka et la gamme triton de la leçon 12, 6-30, qu’aucun des 28 modes ne contient et que la gamme octatonique demi-ton-ton contient. La compétencepolychord, encore en attente, prête à D sur E♭ une “Lydian-augmented colour” (DRAFT.md, ligne 47) : sur E♭, seul le lydien ♯2 devrait le contenir, pas le lydien augmenté. Sa lecture de C sur D, A C D E F♯ G, devrait être juste. - Le YAML que le chatbot récupère. Aucun chargeur typé ne lit
ExtendedChords.yaml, maisYamlKnowledgeLoaderaplatit chaque fichier YAML qui n’en a pas en entrées de connaissance pour la recherche (YamlKnowledgeLoader.fs, lignes 25-31 et 131-140). Il devrait renvoyer 3 entrées deExtendedChords.yaml, dont l’accord de 13e, 1 3 5 ♭7 9 13, est celui du catalogue et pas celui des parseurs, et 9 deAdvancedHarmony.yaml, dont « Polychords » avec ses 12 hauteurs chromatiques. - Les structures supérieures. Une triade majeure ou mineure sur C7 ajoute des tensions. Le cours garde les triades sans onzième naturelle (F, une neuvième mineure au-dessus de la tierce) et sans septième majeure (B, contre la septième mineure). Il devrait rester 6 triades majeures et 6 mineures : les neuf structures supérieures de Wikipédia (US II, ♭III, ♭V, ♭VI, VI, i, ♭ii, ♭iii et ♯iv) et trois de plus, C majeur, l’accord lui-même, G mineur (5, ♭7, 9) et A mineur (13, 1, 3). Le catalogue de GA n’a aucun motif de structure supérieure ni de polyaccord, bien que son commentaire réserve les priorités 90 à 99 aux “polychord fragments” (
CanonicalChordPatternCatalog.cs, ligne 26).
2026-10-02 — Leçon 13 : résultats face aux prédictions
Section intitulée « 2026-10-02 — Leçon 13 : résultats face aux prédictions »Le programme est Lesson15.cs (point d’entrée l15), sa sortie expected/l15.txt ; check.sh passe pour les leçons 1 à 15 et les 21 diagrammes. Il compile tels quels trois fichiers de GA de plus, ChordSymbolParser, BasicChordExtensionsService et ChordAlterationService, que fetch-ga.sh ajoute maintenant à son extraction partielle. ga_polychord appartient au serveur MCP et lit une closure F# de GA.Business.DSL ; le cours ne compile ni l’un ni l’autre, donc le programme recopie le code de l’outil et remplace la closure par les intervalles de triade qu’elle renvoie. Le test du D♭/C de MUS-005 ne faisait pas partie de la première exécution : je l’ai ajouté ensuite, dans son propre commit, ac620ce, en écrivant la leçon.
- Confirmée :
FromSymbolen lit 14 sur 41 correctement et rejette 28 chiffrages, les 26 accords et les deux mots ;CM7revient en0 3 7 T.ChordSymbolParseren lit 17 correctement et n’en rejette aucun ; chaque mauvaise lecture est comme écrit, « Can »0 4 7et « Give »2 7 E. - Confirmée :
TryFindExacten nomme 7 sur 11, rien pour C13, Cmaj13, Cm13 et Cmaj11 ;GetSymbolSuffixen rend 8, avec C9, C11 et C13 pour les trois accords majeurs ;GenerateChordName11. C13, Fmaj13, Gm13 et la gamme de F majeur sont un seul ensemble. - Confirmée : les neuf noms et les quatre accords définis par leur quinte, comme écrit. La prédiction ne disait pas que
SuggestedNotationappelle le F♯ de Cmaj7(♯11) « Flat fifth (tritone substitution) », ni que le catalogue en nomme sept sur neuf. - Confirmée : 25 900 gabarits, la seconde moitié répétant la première ; ♭13 dans aucun, ♯9 dans 80 gabarits Sus2, ♯11 dans 176 gabarits Sus4.
- Confirmée, avec une citation corrigée : les cinq ensembles réunis et les modes qui les contiennent sont comme écrit, mais la “Lydian-augmented colour” du brouillon est à la ligne 46 de
DRAFT.md, pas à la ligne 47. Non prédit : la fiche imprime « 24 modes » pour 6-Z19, la famille large de la leçon 2, et « mode 0 » pour D sur E♭, dont l’ensemble n’a pas de C, si bien queModeIndexvaut −1. - Confirmée : 3 et 9 entrées, l’accord de 13e sans sa onzième, et l’entrée Polychords avec « Creates all 12 chromatic pitches ». Non prédit : le même chargeur renvoie l’accord de Petrouchka d’
IconicChords.yamlavec ses six classes de hauteurs. - Confirmée : 12 triades, les neuf de Wikipédia avec C, Gm et Am ; aucun motif du catalogue nommé pour une structure supérieure ou un polyaccord, 0 sur 62.
Le test ajouté après la première exécution, dans ac620ce : D♭/C est 0 1 5 8, 1 ♭9 11 ♭13 sur C, contenu dans le phrygien, le locrien, le phrygien dominant et le locrien ♭♭7 ; D/C est 0 2 6 9, dans six modes, le lydien en tête ; Cmaj7♯11 dans le lydien et le lydien ♯2. Le “Cmaj7#11 sound” de MUS-005 est D/C, pas D♭/C.
Observations, pas des tests :
- Les trois voicings de guitare de la figure, qui laissent tomber la quinte, ne correspondent à aucun motif de
TryFindExact. - Au chargement,
YamlKnowledgeLoaderimprime sur la sortie d’erreur “Skipping SpecializedTunings.yaml: While parsing a flow sequence, did not find expected ‘,’ or ‘]’.” : un des fichiers de contenu de GA ne s’analyse pas, et ses entrées n’arrivent jamais à la recherche. - Le gestionnaire de progressions de
SpectralRagOrchestratorgarde chaque mot queChordSymbolParseraccepte, moins une courte liste de mots qui oublie « Can » (SpectralRagOrchestrator.cs, lignes 217-226). Lu, pas exécuté. - Le tableau des structures supérieures de MUS-005 donne B♭ majeur sur C7, dont le F est la onzième, comme “the sus/11 sound” ; ce n’est un accord sus qu’une fois la tierce partie.
2026-10-02 — Leçon 14 : prédictions avant la première exécution
Section intitulée « 2026-10-02 — Leçon 14 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, avant que le programme de la leçon existe ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon. Le cours prend la définition des voicings drop de Wikipédia : les voix d’un accord en position serrée, toutes dans une octave, sont numérotées depuis le haut, et un voicing drop n descend la voix n d’une octave.
- Les voicings drop, par définition. Pour les quatre accords de septième sur C (maj7, 7, m7, m7♭5), chacune de leurs quatre positions serrées (une par note du haut) et chaque choix de voix descendues parmi les voix 2, 3 et 4 (aucune, une, deux ou les trois), le cours construit 128 voicings et redonne le nom de chacun. Le
VoicingHarmonicAnalyzerde GA monte la note la plus grave d’une octave et répond « Drop-2 » quand les notes tiennent alors dans une octave, rien sinon (VoicingHarmonicAnalyzer.cs, lignes 46-58). Avec quatre notes de quatre classes de hauteurs différentes, c’est « Drop-2 » exactement quand une voix au plus est descendue : GA devrait appeler « Drop-2 » les 64 voicings serrés, drop 2, drop 3 et drop 4, et laisser les 64 autres sans nom. Il ne répond rien d’autre, donc les filtresDrop3etDrop2And4deVoicingFilters, qui cherchent « Drop-3 » et « Drop-2+4 » (VoicingFilters.cs, lignes 114-116), ne devraient en retenir aucun. Le test demande quatre notes : les trois voicings drop 2 de la triade de C majeur que donne Wikipédia et ses quatre voicings drop 2 et 4 de G7, que le cours devrait reconstruire tels qu’ils sont écrits (C E G, G C E, E G C ; G D F B, B F G D, D G B F, F B D G, en lisant depuis le haut), ne devraient rien recevoir. - Sans fondamentale et ouvert.
VoicingCharacteristicscontientIsRootless,DropVoicingetIsOpenVoicingdans cet ordre (VoicingCharacteristics.cs, lignes 10-12), etAnalyzepasseintervalSpread > 12, l’étiquette drop etfalse(VoicingHarmonicAnalyzer.cs, lignes 38-40). Pour GA, un voicing est donc « rootless », sans fondamentale, quand il couvre plus d’une octave, et aucun voicing n’est ouvert. Des 128 voicings, qui contiennent tous leur fondamentale, les 112 qui ont une voix descendue devraient être sans fondamentale, et aucun ouvert.ChordClassificationEngineétiquette alors chaque voicingclosed-voicinget chaque « Drop-2 »drop-2-voicings, voicings serrés compris (ChordClassificationEngine.cs, lignes 158-167). Sur des formes de guitare, les sept accords ouverts de la leçon 3 devraient tous être sans fondamentale, et trois d’entre eux « Drop-2 » : x32010 (C), x02210 (Am) et xx0232 (D), où les notes tiennent dans une octave une fois la basse montée d’une octave ; 032010, 022100, 320003 et 133211 ne reçoivent rien. Le “Drop-2 Cmaj7 (string set 5-4-3-2)” de MUS-005, x3200x, est C E G B dans une octave, une position serrée : GA devrait l’appeler « Drop-2 », comme la page, et pas sans fondamentale. Le voicing drop 2 avec C à la basse sur ces cordes, x3545x (C G B E), devrait être « Drop-2 » et sans fondamentale. - Les shells. Le cours joue fondamentale, tierce et septième sur les cordes Freddie Green de MUS-005 : G7, Gmaj7 et Gm7 avec la fondamentale sur la sixième corde (3x34xx, 3x44xx, 3x33xx, cordes 6-4-3, la septième sous la tierce), C7, Cmaj7 et Cm7 avec la fondamentale sur la cinquième (x323xx, x324xx, x313xx, cordes 5-4-3, la tierce sous la septième). Les trois premiers couvrent 15 ou 16 demi-tons, les autres 10 ou 11 : GA devrait dire les trois premiers sans fondamentale, alors que leur fondamentale est à la basse, et pas les autres. Trois règles de GA décident de ce qu’est un shell, et aucune ne regarde les notes de l’accord :
VoicingPhysicalAnalyzerdonne laShellFamily« 3-4 note shell », et l’étiquetteshell-voicing, à tout voicing sur trois ou quatre cordes (VoicingPhysicalAnalyzer.cs, lignes 126-131 et 204) : les six shells, xx0232, x3200x et tous les voicings drop sur quatre cordes.ChordClassificationEngineétiquetteshell-voicingun voicing sans fondamentale de trois classes de hauteurs (lignes 169-173) : les trois shells de la sixième corde, pas ceux de la cinquième, et les sept triades ouvertes de la leçon 3.- Le filtre
ShellVoicingsdeVoicingFiltersgarde un voicing sans fondamentale de trois notes MIDI distinctes (lignes 118-119) : les trois shells de la sixième corde et rien d’autre ici ; les triades ouvertes ont de quatre à six notes.
- Tous les voicings que GA génère.
VoicingGeneratorfait glisser une fenêtre de cinq cases le long du manche de 24 cases et garde toute combinaison de cordes étouffées et de cases de la fenêtre qui joue au moins deux notes (VoicingGenerator.cs, lignes 18-144 et 156-292). Avec six choix par corde, une fenêtre donne 6⁶ − 31 = 46 625 voicings, et deux fenêtres voisines en partagent 5⁶ − 25 = 15 600 : lancé en séquence, il devrait renvoyer 21 × 46 625 − 20 × 15 600 = 667 125 voicings. Le cours garde ceux qui jouent les quatre notes d’un accord de septième sur C sur quatre cordes. L’étiquette de GA devrait être « Drop-2 » exactement sur ceux que le cours trouve serrés, drop 2, drop 3 ou drop 4. Les 48 formes drop 2 que compte MUS-005 (4 qualités × 4 renversements × 3 groupes de cordes voisines) devraient toutes s’y trouver, puisqu’aucune ne couvre plus de quatre cases, la limite de GA, et les 32 formes drop 3 sur ses cordes 6-4-3-2 et 5-3-2-1 aussi. Sur ces voicings,VoicingFiltersdevrait garder avecDrop2les voicings serrés avec les drop 2, drop 3 et drop 4 ; avecClosedPosition, tous ; avecOpenPosition,Drop3,Drop2And4etShellVoicings, aucun ; avecRootless, ceux qui s’étendent sur plus d’une octave. - Les notes guides. Dans un ii–V–I, la tierce de ii est la septième de V et la tierce de V la septième de I, tandis que les septièmes de ii et de V descendent d’un demi-ton vers la tierce suivante. Les
TransposeTablesde GA donnent le ii–V–I majeur dans douze tonalités (ChordProgressions.yaml, lignes 581-618) : le cours devrait trouver ces quatre mouvements dans chaque ligne, et en C les deux lignes F F E et C B B derrière le “C-B, F-E” de MUS-005.VoicingAnalyzer.AnalyzeEnhancedconstruit chaqueToneInventoryennew ToneInventory([], false, [], [])(VoicingAnalyzer.cs, ligne 155) :HasGuideTonesdevrait valoir false, etTonesetOmittedTonesêtre vides, pour chaque voicing que le cours analyse, shells compris. - Les recettes d’accompagnement de GA.
ChordProgressions.yamlliste sixGuitarCompingRecipesavec quinze doigtés sur des groupes de cordes nommés (lignes 461-577). Son chargeur typé ne lit que la listeChordProgressions(ChordProgressionsConfigLoader.cs, lignes 41-44), maisYamlKnowledgeLoader, qui saute cinq fichiers et pas celui-ci (YamlKnowledgeLoader.fs, lignes 25-31), devrait renvoyer les six recettes pour la recherche, doigtés compris. Lus du grave à l’aigu sur leurs cordes en accordage standard, comme le disent les conventions du fichier (ligne 464), aucun doigté ne devrait donner les notes de son nom ni de son ordre des degrés :- Le ii–V–I majeur, un “Rootless Drop-2 set” sur les cordes 6-4-3-2, des cordes de drop 3 : “Dm9: x-5-5-5” donne G C E ; “G7(13,#9): x-5-4-6” donne G B F, le shell de G7 avec sa fondamentale ; “Cmaj9: 8-x-9-9-10” a cinq cases pour quatre cordes et, lu depuis la sixième corde, donne C B E A.
- Le iiø–V–i mineur, sur 5-4-3-2 : “Dm7b5(11): 5-6-5-6” donne D A♭ C F, un Dm7♭5 drop 2 avec sa fondamentale et sans onzième ; “G7(b9,#9): 5-4-5-5” donne D F♯ C E, D9 sans sa quinte, sans aucune des quatre notes que liste son ordre des degrés (B F A♭ A♯) ; “Cm(maj9): 3-5-4-5” donne C G B E, un Cmaj7 drop 2.
- La boucle pop, sur 5-4-3-2 : “G(add9): 10-12-12-10” donne G D G A, sans B ; “D(add9)/A: 12-11-11-12” donne A C♯ F♯ B, sans D ; “Em(add9): 7-9-9-7” donne E B E F♯, sans G ; “C(add9)/G: 10-10-9-10” donne G C E A, sans D.
- La recette rock, sur 6-5-4-3 : “A5(add2): 5-7-7-7” donne A E A D, une quarte au lieu d’une seconde ; “Gsus2: 3-5-5-5” donne G D G C, un Gsus4 ; “Dsus2/F#: 2-5-7-7” donne F♯ D A D, D majeur sur sa tierce.
- Les “Stacked 4ths (no 3rd)” du vamp “So What” : “Dm11: 5-7-9-10” donne D A E A et “Ebm11: 6-8-10-11” donne E♭ B♭ F B♭, deux quintes et une quarte.
- La recette blues ne donne aucune case ; son E7, “7th on D string, 3rd on G string”, est juste : D est la quatrième corde à vide et G♯ la première case de la troisième.
2026-10-02 — Leçon 14 : résultats face aux prédictions
Section intitulée « 2026-10-02 — Leçon 14 : résultats face aux prédictions »Le programme est Lesson16.cs (point d’entrée l16), sa sortie expected/l16.txt ; check.sh passe pour les leçons 1 à 16 et les 22 diagrammes. Il compile tels quels douze fichiers de plus de GA.Domain.Services, le générateur, les analyseurs et les filtres de voicings avec le reconnaisseur d’accords et les distances de cases qu’ils appellent, et treize fichiers de GA.Business.Core, les douze enregistrements d’analyse qu’ils renvoient et une classe de constantes ; fetch-ga.sh les ajoute maintenant à son extraction partielle. La compilation signale un avertissement, CS8604, dans le VoicingAnalyzer.cs de GA lui-même (ligne 198), où un ModeInfo qui peut être nul passe à un paramètre qui n’accepte pas nul. Aucun outil MCP ni aucun chatbot n’a été appelé, et aucun test n’a été ajouté après la première exécution.
- Confirmée : 64 « Drop-2 », 64 rien, aucune autre étiquette ; « Drop-2 » exactement quand au plus une voix est descendue. Les sept exemples de Wikipédia sont reconstruits comme écrit, et GA n’en nomme aucun.
- Confirmée : 112 « rootless », aucun ouvert, les 128 avec leur fondamentale ; chaque voicing étiqueté
closed-voicing, chaque « Drop-2 »drop-2-voicings, les serrés compris. Sur les formes, les sept accords ouverts de la leçon 3 sont « rootless », et x32010, x02210 et xx0232 « Drop-2 » ; x3200x est « Drop-2 » et pas « rootless », x3545x « Drop-2 » et « rootless ». - Confirmée : la règle des cordes sur les six shells, xx0232, x3200x et x3545x ; le moteur sur les trois shells sur la sixième corde et les sept triades ouvertes ; le filtre sur les trois shells sur la sixième corde et rien d’autre.
- Confirmée : 667 125 voicings ; « Drop-2 » exactement sur les voicings serrés, drop 2, drop 3 et drop 4 du cours ; 48 formes drop 2 sur 48 et 32 formes drop 3 sur 32, aucune plus large que quatre cases ;
Drop2264,ClosedPosition687,Rootless672, exactement ceux étalés sur plus d’une octave,OpenPosition,Drop3,Drop2And4etShellVoicingsaucun. Non prédit : 687 voicings en tout, dont 141 au-delà des drops ; des drop 2 sur sept groupes de cordes, les quatre absents du tableau de MUS-005 sautant chacun une corde ; les formes les plus larges atteignent exactement la limite de quatre cases. - Confirmée : 12 lignes sur 12 avec les quatre mouvements, F F E et C B B en C ; sur 711 analyses,
HasGuideTonesjamais vrai,TonesetOmittedTonestoujours vides. - Confirmée : une entrée pour chacune des six recettes, avec tous ses doigtés ; les quinze doigtés donnent les notes écrites à l’avance, aucun celles de son nom ou de son ordre des degrés ; le E7 de la recette blues est juste. Non prédit : le chargeur renvoie 36 entrées de
ChordProgressions.yaml.
Observations, pas des tests :
InterpretationService, dont le seul appelant,IndexVoicingsCommandde GaCLI, est exclu de la compilation (GaCLI.csproj, ligne 18), cherche « drop 2 » et « drop 3 » avec une espace (InterpretationService.cs, lignes 41-46), alors queDropVoicingcontient « Drop-2 » : ses étiquettes de drop ne se déclenchent jamais. Lu, pas exécuté.- MUS-005, tel qu’il se lisait à Demerzel
6aef19bjusqu’à ce que Demerzel #1098 le corrige, appelait x3200x, une position serrée, un “Drop-2 Cmaj7” ; il disait “Drop-2 voicings exist on four string sets” au-dessus d’un tableau de trois lignes ; ses diagrammes de shells montraient une note par accord. - La section sur les voicings drop de l’article “Voicing (music)” de Wikipédia porte la mention “This section does not cite any sources”.
2026-10-02 — Leçon 15 : prédictions avant la première exécution
Section intitulée « 2026-10-02 — Leçon 15 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, une fois le programme de la leçon compilé et avant sa première exécution ; les chiffres ont été calculés à la main à partir des formules de GA, et l’entrée des résultats confronte chacun à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon. Le cours place la frette n à d(n) = L(1 − 2^(−n/12)) du sillet, lit chaque forme depuis la corde 6 en accordage standard, et prend le système CAGED dans l’article « Bar chord » de Wikipédia.
- Où vont les frettes.
FretboardGeometry.CalculateSpanMm(0, n)multiplie 2^0 − 2^(−n/12) par 647,7 mm (FretboardGeometry.cs, lignes 17-32), etPhysicalFretboardCalculator.CalculateFretPositionMm(n)calcule 648 · (1 − 2^(−n/12)) (PhysicalFretboardCalculator.cs, lignes 35-43). Les deux devraient s’accorder avec le cours à chaque frette, sur deux diapasons distants de 0,3 mm : la frette 12 à 323,85 et 324,00 mm. Le calculateur devrait donner les 36,4, 162,5, 215,5, 324 et 486 mm de MUS-009.PHYSICAL_PLAYABILITY_IMPROVEMENTS.mdcite 120,11, 85,42 et 70,09 mm pour les frettes 0-5, 7-12 et 12-17, l’écart du bas étant « 71.4% larger » que celui du haut. La formule donne 162,55, 108,49 et 81,27 mm, et comme chaque distance est divisée par deux une octave plus haut, l’écart du bas fait exactement le double de celui du haut : trois lignesDIFF, et 100,0 % de plus. - Jusqu’où va une main.
ComfortableReachScaleUnitsvaut 0,21, avec le commentaire « (1 - 2^(-4/12)) approx 0.206 », la distance du sillet à la frette 4 (BiomechanicsConstants.cs, lignes 25-28).PhysicalCostServicela compare à l’écart des seules notes frettées (PhysicalCostService.cs, lignes 25-38, etFretboardGeometry.cs, lignes 38-57) : les cordes à vide ne comptent jamais, donc la frette la plus basse depuis laquelle il mesure est la 1. Depuis la frette 1, la portée devrait couvrir les frettes 1 à 5 ; depuis la frette 7, les frettes 7 à 13 ; depuis la frette 12, les frettes 12 à 21, dix frettes. La première position, index sur la frette 1 et auriculaire sur la frette 4, mesure 0,1502, largement dedans. LePlayerProfilepar défaut a uneHandSizeMedium et unMaxComfortableStretchMmde 129 mm (PlayerProfile.cs, lignes 14-17), et aucun des trois analyseurs ne lit l’un ni l’autre. - CAGED. Les cinq formes ouvertes devraient donner exactement les degrés de GTR-002. Montées jusqu’à ce que leur fondamentale soit C, elles devraient se placer aux frettes 0, 3, 5, 8 et 10, comme le dit Wikipédia, chacune tenant trois ou quatre frettes et ne jouant que C, E et G. Dans chaque tonalité, l’ordre en montant le manche devrait être C A G E D lu en boucle depuis l’une de ses lettres ; en G, G E D C A aux frettes 0, 3, 5, 7 et 10, la séquence de Wikipédia. Le troisième exercice de GTR-002 demande C sur la corde 2 « in each of the five CAGED positions » : seules la forme de C (frette 1) et la forme de D (frette 13) l’y ont ; les formes de A, G et E jouent E, E et G sur cette corde.
DetectCagedShapede GA renvoie null dès que l’indice 0 est étouffé (VoicingPhysicalAnalyzer.cs, lignes 264-265), et ses tests de A et de C exigent tous deux l’indice 0 étouffé (lignes 297 et 323) : il ne peut jamais répondre que « E-Shape ». Ses commentaires lisent l’indice 0 comme la corde 6 (ligne 263), alors queExtractPhysicalLayoutnumérote l’indice 0 comme la corde 1 (ligne 27), l’ordre des voicings de GA. Dans cet ordre, aucune forme de E ne devrait être reconnue ; le motif qui l’est, 001220 depuis la corde 6, joue E A D♯ A C♯ E. Inversée, la forme de E devrait être reconnue à chaque frette, et rien d’autre. L’étiquette écrite este-shape(ligne 203), qui ne contient ni « CAGED-E » ni « E shape », les chaînes que chercheVoicingFilterEngine(VoicingFilterEngine.cs, lignes 61-66 ; lu, pas exécuté). - L’effort d’une forme.
PhysicalCostService.CalculateStaticCostn’a aucun terme pour un barré (PhysicalCostService.cs, lignes 17-142). Sur ces formes, il devrait se réduire à la tension des cordes frettées, à un terme de registre quand la frette moyenne est sous 3 ou au-dessus de 9, et à un bonus par corde à vide : les accords ouverts sous zéro, de −0,63 (Em) à −0,06 (D) ; F 0,29 ; les formes de A, G et E de C 0,21, 0,24 et 0,24 ; la forme de D de C 0,59, et la forme de E à la frette 12 la plus haute, 0,66.VoicingPhysicalAnalyzerdevrait classer le C ouvert « Intermediate », parce que son écart fretté, 66,7 mm sur 648 mm, dépasse 0,8 × 80 mm, et Am, Em, E, G et D « Beginner » ; il ne trouve un barré que sur trois cordes adjacentes à la même frette, donc dans x35553 et 875558, et pas dans F ni dans les formes de E.BiomechanicalAnalyzertrouve un barré dès que trois notes partagent une frette, cordes à vide comprises (BiomechanicalAnalyzer.cs, ligne 153) : Em, E et G devraient en avoir un, avec F et les formes barrées, alors que Am, C, D et la forme de D de C non. Il devrait classer F « Very Easy » (0,92), avec Em et E, au-dessus du C ouvert (0,82, « Easy »). SaHandSizen’est jamais lue, donc les quatre tailles de main devraient donner les mêmes analyses ;PhysicalCostServicene lit pas non plus laHandSizeni leMaxComfortableStretchMmdu profil. AvecPlayerProfile.Beginner(), les formes au-dessus de la frette 5 devraient coûter plus, la forme de D de C 1,04, et avecJazz()cette forme devrait coûter 0,18. - Les accordages ouverts.
Tunings.tomldevrait contenir les mêmes 15 entrées de guitare qu’Instruments.yaml, où MUS-009 a trouvé la corde 2 d’Open C et d’Open A une octave trop bas. En écarts par rapport au standard, OpenCMajor devrait descendre la corde 2 de 11 demi-tons et OpenAMajor de 10, tandis que les neuf autres accordages à six cordes ne bougent aucune corde de plus de 2. Leurs cordes à vide devraient sonner l’accord que donne leur nom, sauf OpenEMajorV2, « Open E - 2 Minor », un accord de E mineur. Les ordres de cordes de Wikipédia pour open C, D, E et G devraient correspondre. Aucun code C# ou F# de GA ne lit le fichier ; un composant React le cite comme URL de données facultative et ignore la propriété. - La table derrière
ga_easier_voicings. Les 41 voicings de l’outil (GuitaristProblemTools.cs, lignes 506-562) devraient tous donner dansNotesles notes de leur symbole. Lus en accordage standard, Gsus4 310013 devrait jouer un B♭ et C5 x3500x un B, hors de leurs accords, et C7 x32310 devrait omettre sa quinte, G. Cinq sont marquésHasBarre, F, B♭, B, Bm et F5 ; quatre ont plus de quatre notes frettées, F5 en a trois. Avec la contrainte par défaut « no-barre », l’outil ne propose que des voicings de la table sur la même fondamentale (lignes 611-652) : Fmaj7 pour F et F5, B7 et B5 pour B et Bm, aucun des deux avec le D de B mineur, et rien pour B♭. Le Fsus2 (133011) et le C/F de la description ne sont pas dans la table.
2026-10-02 — Leçon 15 : résultats face aux prédictions
Section intitulée « 2026-10-02 — Leçon 15 : résultats face aux prédictions »Le programme est Lesson17.cs (point d’entrée l17), sa sortie expected/l17.txt ; check.sh passe pour les leçons 1 à 17 et les 23 diagrammes. Il compile tels quels sept fichiers de plus de GA.Domain.Services, la géométrie du manche, le service de coût avec l’enregistrement de position et l’interface de classement qu’il prend, et l’analyseur biomécanique avec les enregistrements qu’il renvoie, et PlayerProfile de GA.Business.Core ; il lit comme du texte Tunings.toml et GuitaristProblemTools.cs, un fichier du serveur MCP de GA. fetch-ga.sh les ajoute maintenant à son extraction partielle. La compilation ne signale aucun nouvel avertissement. Aucun outil MCP ni aucun chatbot n’a été appelé, et aucun test n’a été ajouté après la première exécution. Après une relecture indépendante, ce3a9ed corrige les étiquettes des deux tableaux de Wikipédia, qui imprimaient l’en-tête du cours au-dessus du chiffre de Wikipédia, et du tableau des accordages, qui disait que GA lit Instruments.yaml, et marque l’extension depuis la case 15 comme arrêtée à la 24e frette ; aucun chiffre n’a changé.
- Confirmée : chaque frette juste sur 647,7 et 648 mm, la frette 12 à 323,85 et 324,00 mm ; le rapport 1,059463 aux 24 frettes ; les cinq chiffres de MUS-009 ; trois lignes
DIFF, 162,55, 108,49 et 81,27 mm, l’écart du bas plus grand de 100,0 %. - Confirmée : 0,21 contre 0,2063 ; les cases 1 à 5 depuis la case 1, 7 à 13 depuis la case 7, 12 à 21 depuis la case 12 ; la première position à 0,1502 ; le profil par défaut Medium et 129,0 mm, qu’aucune mesure ne lit. Non prédit : les autres cases de départ, 2, 3, 5 et 9, qui atteignent les cases 6, 7, 10 et 16 ; depuis la case 15, l’extension dépasse la 24e frette, la dernière du manche ; et l’extension en millimètres, de 112,4 à 131,3 mm là où le manche ne l’arrête pas.
- Confirmée : les degrés de GTR-002 pour les cinq formes ; C aux cases 0, 3, 5, 8 et 10, trois ou quatre cases chacune, C, E et G seulement ; chaque ordre une rotation de C A G E D, et celui de G celui de Wikipédia ; C sur la corde 2 seulement dans la forme de C (case 1) et la forme de D (case 13), E, E et G dans les formes de A, G et E. Dans l’ordre de GA, aucune forme reconnue, et 001220, E2 A2 D♯3 A3 C♯4 E4, reconnu « E-Shape » ; inversée, la forme de E aux 13 cases et rien d’autre ; l’étiquette
e-shape, qui échoue au test deVoicingFilterEngine. - Confirmée : aucun terme de barré ; les accords ouverts de −0,63 (Em) à −0,06 (D), F 0,29, les formes de A, G et E en C 0,21, 0,24 et 0,24, la forme de D 0,59, la forme de E à la case 12 0,66 ; le C ouvert « Intermediate », Am, Em, E, G et D « Beginner » ; le barré de
VoicingPhysicalAnalyzerdans x35553 et 875558 seulement ; celui deBiomechanicalAnalyzerdans Em, E, G, F et les formes barrées, pas dans Am, C, D ni la forme de D en C ; F, Em et E « Very Easy » à 0,92, le C ouvert « Easy » à 0,82 ; les mêmes résultats pour les quatre tailles de main, et pour laHandSizeet leMaxComfortableStretchMmd’un profil ; la forme de D en C à 1,04 avecBeginner()et 0,18 avecJazz(). Non prédit : les scores non cités ci-dessus, comme 6,90 pour 875558 et 0,72 pour la forme de D en C. - Confirmée : les 15 entrées comme dans
Instruments.yaml; la corde 2 descendue de 11 demi-tons dans OpenCMajor et de 10 dans OpenAMajor, aucune corde bougée de plus de 2 dans les neuf autres ; OpenEMajorV2 un accord de E mineur ; les quatre ordres de cordes de Wikipédia. Que le C# et le F# de GA ne lisent jamais le fichier a été vérifié en cherchant dans le code àa826864, pas en l’exécutant. - Confirmée :
Notesjuste pour 41 sur 41 ; le B♭ de Gsus4, le B de C5, C7 sans G ;HasBarresur F, B♭, B, Bm et F5, plus de quatre notes appuyées sur tous sauf F5 ; Fmaj7 pour F et F5, B7 et B5 pour B et Bm, rien pour B♭ ; Fsus2 et C/F absents de la table. Non prédit : B7 contient toutes les notes de B et B5 non ; 133011 a cinq notes appuyées.
Observations, pas des tests :
PHYSICAL_PLAYABILITY_IMPROVEMENTS.mdprésente ses écarts comme la sortie deFretDistance_SameFretSpan_DifferentPositions_ShouldHaveDifferentPhysicalDistances, un test dePhysicalFretboardCalculatorTests.cs, que le projet de tests de GA retire de la compilation (GA.Business.Core.Tests.csproj, ligne 47). Le même projet retireBiomechanicalAnalyzerTests.cs(ligne 49), dont les tests de taille de main appellentBiomechanicalAnalyzer.CreateForHandSize, une méthode que la classe n’a pas. Lu, pas exécuté.MusicalEmbeddingGeneratorajoute « -shape » auCagedShapemis en minuscules (MusicalEmbeddingGenerator.cs, lignes 110-113), ce qui donneraite-shape-shape. Lu, pas exécuté.- La figure de GTR-002 “for key of E major” dessine les formes sur une échelle de cases 0, 3, 5, 7, 8, 10 et 12 ; le programme les trouve à 0, 2, 4, 7 et 9.
- Le prototype P7 du Laboratoire Guitar Alchemist a trouvé le C ouvert « Intermediate » et aucun barré dans 133211 au commit
66bdd04de GA, comme cette leçon àa826864.
2026-10-02 — Leçon 16 : prédictions avant la première exécution
Section intitulée « 2026-10-02 — Leçon 16 : prédictions avant la première exécution »Écrites d’après le code de GA à a826864, une fois le programme de la leçon compilé et avant sa première exécution ; l’entrée des résultats confronte chacune à ce que le programme a imprimé. Aucun outil MCP ni aucun chatbot n’a été appelé pour cette leçon : le programme compile les deux compétences du chatbot de GA et les appelle directement, avec des substituts pour le journal et l’extracteur de requête qu’elles prennent, et il lit l’outil MCP comme du texte pour l’appliquer. Le cours forme l’accord de septième de chaque degré en empilant des tierces dans la gamme, et prend les paires accord-gamme dans les articles « Chord-scale system » et « Jazz improvisation » de Wikipédia et la note à éviter dans son article « Avoid note ».
- Arpèges et modes. Les accords de septième de C majeur sont Cmaj7, Dm7, Em7, Fmaj7, G7, Am7 et Bm7♭5, et ceux de A mineur les mêmes sept depuis Am7. Les suffixes d’arpège des deux tables de l’outil (
GuitaristProblemTools.cs, lignes 386-406) devraient correspondre aux quatorze, etImprovisationSkill.ArpeggioFordevrait rendre le symbole de chaque accord (ImprovisationSkill.cs, lignes 266-284). Les colonnes Mode et Notes des tables devraient correspondre au mode de chaque degré, de même que leMajorScaleModede GA. Des douze autres gammes que nomment l’outil et les compétences, le mode de GA à la même place de sa classe devrait en reproduire dix. Les deux exceptions sont les modes diminués de GA, comme à la leçon 12 : le premier, que GA nomme « Half-whole diminished », commence par un ton, et le second est l’inverse, si bien que les deux lignes devraient indiquerDIFF. ga_arpeggio_suggestions. L’outil trouve le degré par la seule fondamentale de l’accord (ligne 463) et renvoiechord + arpeggioSuffix(ligne 482) : le symbole entier, suivi du suffixe de la table. Pour son propre exemple, Am F C G en C majeur, il devrait renvoyer « Amm7 », « Fmaj7 », « Cmaj7 » et « G7 », et non le « Am7 » de sa description (ligne 412). Pour un ii–V–I écrit avec des septièmes, il devrait renvoyer « Dm7m7 », « G77 » et « Cmaj7maj7 ». Le mode vient du degré, pas de l’accord. En A majeur, A7, E7 et D7 devraient recevoir l’ionien, le mixolydien et le lydien, ce qui met le G de A7 et le C de D7 hors du mode, là où le système accord-gamme de Wikipédia associe le mixolydien aux trois. Un accord de A majeur en C majeur devrait recevoir l’éolien, dont le C heurte le C♯ de l’accord ; les remarques d’ImprovisationSkilldécrivent ce cas (lignes 23-32). E7 en A mineur devrait recevoir le phrygien, qui n’a pas le G♯ de l’accord. Le deuxième mot de la tonalité nomme le mode, et tout autre mot que « minor » vaut majeur (lignes 428-430 et 450). Une tonalité écrite « Am » devrait donc se lire « Am major », c’est-à-dire A majeur : Am reçoit « Ammaj7 » et l’ionien, avec C dehors, et Dm reçoit « Dmmaj7 » et le lydien, avec F dehors. B♭ en C majeur est chromatique : il devrait recevoir « Bb (chromatic — outside key) », « depends on context » et les notes « R, M2, M3, P5 » (lignes 464-475).ImprovisationSkill.InferQualitymet le symbole en minuscules avant de le comparer (ligne 323), donc CM7 devrait se lire « minor 7 » : arpège Cm7, dorien en premier, et E et B hors de ses trois gammes. Sur les 31 symboles sur C, la première gamme proposée devrait contenir toutes les notes de l’accord, sauf pour sept symboles. Ce sont CM7 ; Cmaj7♯5, lu « major 7 » parce que la ligne 340 passe avant la ligne 343, avec G♯ hors de l’ionien comme du lydien ; C7♯11, dont le mixolydien n’a pas le F♯ que contient le lydien dominant ; C7♭13 et C7+5, lus « dominant 7 », dont le mixolydien n’a pas le A♭ ou le G♯ que contient le mixolydien ♭6 ; et C7♭9 et C7♯9, lus « altered dominant » avec l’arpège « C7alt », où la gamme altérée n’a pas le G de l’accord et où la gamme diminuée demi-ton–ton contient les cinq notes. Cadd9, Csus2, Csus4 et C5 devraient se lire « unknown » et recevoir la gamme majeure de la fondamentale. C6 et C69 devraient se lire « major triad », arpège C ; Cm6 « minor major 7 », arpège CmMaj7 ; C7♯5 « augmented », arpège Caug.CanHandledevrait accepter 16 de ses 17 requêtes d’exemple. Il devrait refuser « what scales fit over the progression Cmaj7 A7 Dm7 G7 » (ligne 74), qui ne contient aucun de ses mots-clés comme mot entier : « what scale » y est suivi d’un s (ChordIntentMatching.cs, lignes 22-35). Sur une suite d’accords, la compétence lit chaque symbole isolément (lignes 196-261). Am F C G devrait donner A éolien, puis F, C et G ionien ; F ionien a un B♭ et G ionien un F♯, des notes qu’aucun des quatre accords n’a. A7 E7 D7 devrait donner trois fois le mixolydien, la réponse de Wikipédia. Le vamp dorien de GAA-003, Am7 D7, devrait donner A dorien et D mixolydien. Son vamp mixolydien, A7 G/A, devrait se lire comme trois accords, A7, G et A, avec A ionien pour le dernier.OutsideNotesSkill.Classifyappelle note à éviter une note hors de l’accord quand elle se trouve un demi-ton au-dessus d’une note de l’accord, et tension sinon (lignes 141-189). Les notes à éviter devraient être D♭, F et A♭ sur Cmaj7, avec D, E♭, F♯, A et B♭ comme tensions ; D♭, F, A♭ et B, la septième majeure, sur C7 ; D♭, E, A♭ et B sur Cm7 ; D♭, E, G et B sur Cm7♭5. Le commentaire sur les accords de dominante nomme « the b9/#9/#11/b13 half-step clashes » (ligne 164), mais sur C7, D♯ (♯9) et F♯ (♯11) devraient être des tensions, et F et B des notes à éviter. Certaines tensions ne sont dans aucune des gammes qu’ImprovisationSkillpropose pour le même accord : E♭ et B♭ sur Cmaj7, E♭ sur C7, F♯ sur Cm7 et A sur Cm7♭5. La compétence devrait répondre à sept de ses dix requêtes d’exemple (lignes 48-63) : F note à éviter sur Cmaj7, trois fois ; A et F♯ tensions sur Cmaj7 ; F septième mineure de G7, bien queCanHandlerefuse cette requête faute de mot-clé ; et B♭ sur C major « an available tension — the b7 (minor seventh) », mesuré contre une triade de C majeur. « why does that note clash over the chord » et « why does the b9 sound so tense over C7 » devraient passerCanHandlesans recevoir de réponse, faute de note en majuscule avant « over » ; la première ne passe que parce que le motif d’accord ignore la casse (ligne 292) et lit « the chord » comme un accord de C. « why does the note clash over this chord » devrait échouer aux deux.- GAA-003 à travers
Classify. La réponse du module à sa première question d’auto-évaluation dit que sur Am7 aucune note de la pentatonique mineure de A ne se trouve à un demi-ton d’une note de l’accord, et que sur A7 C se trouve un demi-ton sous le C♯ de l’accord et D un demi-ton au-dessus. Sur Am7,Classifydevrait être d’accord : A, C, E et G sont des notes de l’accord, et D une tension (la 11). Sur A7, il ne devrait voir que la moitié de ce frottement : D est une note à éviter (la 11), mais C une tension (♯9). Les notes dont le module dit qu’elles tirent chaque mode ailleurs devraient toutes être des notes à éviter : F en A dorien sur Am7, la ♭13 ; G♯ en mixolydien sur A7, la septième majeure ; D en lydien sur Amaj7, la 11. Les tierces de A7, D7 et E7 tirées deChordVocabulary.GetFormula("dominant 7")(ChordVocabulary.cs, ligne 121) devraient être C♯, F♯ et G♯, les cibles du module. - Les entrées d’improvisation de GA et la boîte 1.
ImprovisationConcepts.yamlcontient quatre concepts (lignes 6-14), chacun avec un nom et une ligneConcept, aucun avec uneCategory.YamlKnowledgeLoaderdevrait renvoyer quatre entrées, de catégorie vide et avec le nom du fichier pour seule étiquette (YamlKnowledgeLoader.fs, lignes 65-91). Leur contenu devrait être le nom suivi de « Concept: … », et aucune n’associe une gamme à un accord. La boîte 1 de GAA-003 occupe les cases 5 et 8 des cordes 6, 2 et 1 et les cases 5 et 7 des cordes 5, 4 et 3. Elle devrait jouer A, C, D, E et G, les notes du cinquième mode de la pentatonique majeure de GA, et les trois modes du module sur A devraient correspondre à la graphie du cours.
2026-10-04 — Correctifs proposés à Guitar Alchemist
Section intitulée « 2026-10-04 — Correctifs proposés à Guitar Alchemist »Trois lignes du tableau QA sont reparties vers GA dans la PR n° 810, et une dans la PR n° 808, ouvertes depuis un clone séparé à main 75959835. Aucune n’est encore fusionnée : GA laisse la relecture et la fusion à quelqu’un d’autre que l’auteur.
-
Scale.Tritonedevient C D♭ E G♭ G B♭, les notes de l’accord de Petrouchka : 6 transpositions, là où l’ancien ensemble, C D♭ E F♯ G A, en avait 12.Scales.yamletExtendedScales.yamlsuivent : les catalogues donnent le nom « Tritone » à l’identifiant binaire 1235 au lieu de 723. -
DiminishedScaleDegreenomme le degré 1 « Whole-half diminished » et le degré 2 « Half-whole diminished », d’après le premier pas de chaque mode deScale.Diminished. -
IsSymmetricalSetcompare aussi le pas de la dernière classe de hauteurs vers la première : il est vrai pour 16 des 4096 ensembles au lieu de 156, parmi lesquels se trouvaient les 66 dyades et C D E. -
Dans la n° 808,
SpecializedTunings.yamlest du YAML valide.YamlKnowledgeLoader.LoadAllKnowledgeEntries(), appelé depuis une application basée sur un fichier qui référenceCommon/GA.Business.Config/GA.Business.Config.fsproj, compté par fichier source :main 75959835[YamlKnowledgeLoader] Skipping SpecializedTunings.yaml: While parsing a flow sequence, did not find expected ',' or ']'.entries: 192#808 (e4ce3cc6)entries: 213SpecializedTunings: 21Les 15 autres fichiers donnent les mêmes nombres des deux côtés.
ChordProgressions.yamletGuitarTechniques.yaml, que les chargeurs C# typés de GA ne savent pas lire surmain, y donnent 36 et 10 entrées : ce chargeur lit tout YAML valide en objets simples.
La ligne sur ChordFormula.GetSymbolSuffix (leçon 13) était déjà corrigée en amont quand le cours l’a mesurée. Le cours lit GA à a826864, un commit du 2026-09-14, et la PR n° 680, fusionnée le 2026-09-17, ajoute le « maj ». "C" + Chord.FromSymbol(symbol).Formula.GetSymbolSuffix() donne C9, C11 et C13 pour Cmaj9, Cmaj11 et Cmaj13 à a826864, et le symbole lui-même au commit 86f81ab2 de la n° 680 et à main 75959835.
Onze autres lignes sont reparties le même jour dans quatre pull requests, ouvertes depuis le même clone et mesurées avant et après sur main 75959835. Quand cette entrée a été écrite, la CI de GA avait passé sur les n° 818 et 819 et sur le premier commit de la n° 820, et tournait sur le second commit de la n° 820 et sur la n° 823. Aucune n’est encore fusionnée.
| PR | Lignes QA | Avant → après |
|---|---|---|
| n° 818 | Les vecteurs et les rotations de Modes.yaml, les noms que YAML coupait comme des commentaires, les noms alternatifs ; la ligne « Scale: » en partie |
Noms coupés : 8 sur 165 → 0 ; modes qui gardent leurs noms alternatifs : 0 → 79 ; vecteurs déclarés qui diffèrent des notes de leur famille : 2 sur 18 → 1 ; membres sans le vecteur de leur premier mode : 26 sur 134 → 22 |
| n° 819 | Les voicings drop, les filtres drop, les shells | Sur les 313 047 voicings de l’audit de voicings de GA, DropVoicing suit la définition de Wikipédia sur 225 338 → tous ; sur les 687 accords de septième sur C de la leçon 14 : Drop2 264 → 111, Drop3 0 → 92, Drop2And4 0 → 143 ; shell-voicing sur 57 981 voicings → sur les 877 shells |
| n° 820 | ChordSymbolParser ; CM7 dans Chord.FromSymbol |
Chiffrages de la leçon 13 justes : 17 sur 41 → 41 ; « Can » C majeur, « Give » G majeur → rejetés |
| n° 823 | GenerateAllPossibleChords |
25 900 gabarits → 12 950, la première moitié, dans le même ordre |
- Le cours lit GA à
a826864, et surmaincertaines lignes avaient déjà bougé : 2 des 18 vecteurs déclarés différaient, pas 9, et 26 membres n’avaient pas le vecteur de leur premier mode, pas 60. - Codex a relu la n° 818 : les renversements de l’accord augmenté étaient écrits C E G♯, comme l’état fondamental. Ils sont maintenant C E A♭ et C F♭ A♭, écrits d’après leurs intervalles au-dessus de la basse, comme les autres renversements.
- La n° 820 rejette ce que le parseur ne sait pas lire. Le chatbot, qui l’essaie sur un message entier, ne trouve plus d’accord dans « Cmaj7 jazz voicings », où il trouvait C majeur.
- La revue de Codex sur la n° 820 a relevé que le parseur lisait la basse d’un accord à basse imposée, puis la perdait :
C/Eavait C pourBass. Un second commit met la basse en tête, doncC/Eest E G C. La recherche de voicings de GaApi l’ignore encore : elle ne transmet que les classes de hauteurs. - Le premier commit de la n° 823 retirait aussi
NaturalMinorMode, dont les sept modes sont ceux de la gamme majeure, sous les mêmes noms : ses 1 666 gabarits ont les mêmes notes et classes de hauteurs que ceux des modes majeurs. Codex a relevé que la gamme parente de leur mode diffère (A B C D E F G, pasC D E F G A B) et queCreateTraditionalChordLibrarypromet ces modes : un second commit les remet. - La ligne sur
ChordAlterationServicen’est partie dans aucune PR : seulsChordTemplateNamingServiceetHybridChordNamingServicel’appellent, et aucune application, aucun outil MCP ni aucun chemin du chatbot ne les appelle à 75959835.
2026-10-07 — Leçon 16 : résultats face aux prédictions
Section intitulée « 2026-10-07 — Leçon 16 : résultats face aux prédictions »Le programme est Lesson18.cs (point d’entrée l18), sa sortie expected/l18.txt ; check.sh passe pour les leçons 1 à 18 et les 23 diagrammes. Codex a écrit le programme et les prédictions le 2026-10-02, avant que Program.cs ait une entrée pour lui ; cette session a repris le travail, ajouté l’entrée et lancé le programme pour la première fois le 2026-10-07. Il compile tels quels cinq fichiers de GA.Business.ML, les deux compétences, le filtre par mots-clés, le vocabulaire d’accords et l’interface des compétences, et l’attribut de GuitarAlchemist.Registry qu’elles portent ; StandIns.cs remplace les quatre types qu’elles prennent dans du code à paquets que le cours ne compile pas : le logger, l’enregistrement de réponse, l’extracteur de requêtes par LLM et sa requête. Il lit GuitaristProblemTools.cs comme du texte, comme la leçon 15. fetch-ga.sh ajoute maintenant les six fichiers à son sparse checkout. La compilation ne signale aucun nouvel avertissement. Aucun outil MCP ni aucun chatbot n’a été appelé. Après la première exécution, trois tableaux ont été réalignés, sans qu’aucune valeur change, et un bloc a été ajouté sous un titre qui le dit : la réponse entière d’OutsideNotesSkill pour B sur C7, et pour E et B sur CM7.
- Confirmé : les quatorze suffixes et les quatorze symboles d’
ArpeggioFor; les colonnes Mode et Notes des deux tables etMajorScaleMode; dix des douze autres gammes, et les deux modes diminuésDIFF. - Confirmé : « Amm7 », « Fmaj7 », « Cmaj7 » et « G7 » ; « Dm7m7 », « G77 » et « Cmaj7maj7 » ; ionien, mixolydien et lydien pour A7, E7 et D7, avec G et C en dehors ; éolien pour A en C majeur, contre son C♯ ; phrygien pour E7 en A mineur, sans son G♯ ; « Am major », avec « Ammaj7 » et C en dehors, « Dmmaj7 » et F en dehors ; B♭ chromatique, avec les trois chaînes fixes. Non prédit : les arpèges « Am7 » pour l’accord de A majeur et « E7m7 » pour E7. Trouvé après l’exécution : GA #626, fusionnée le 2026-09-24, a corrigé le suffixe et le degré en amont ; sur
mainc1416eee, la tonalité se lit comme avant. Lu, pas exécuté. - Confirmé : CM7 « minor 7 », arpège Cm7, dorien d’abord, E et B hors des trois gammes ; sept symboles dont la première gamme manque une note : CM7, Cmaj7♯5 (G♯, dans aucune de ses gammes), C7♯11 (Lydian Dominant le contient), C7♭13 et C7+5 (Mixolydian ♭6), C7♭9 et C7♯9 (Half-Whole Diminished) ; Cadd9, Csus2, Csus4 et C5 « unknown » ; C6 et C69 « major triad », arpège C ; Cm6 « minor major 7 », arpège CmMaj7 ; C7♯5 « augmented », arpège Caug ; 16 exemples de requête sur 17, la requête de grille refusée ; A éolien, puis F, C et G ionien ; trois fois mixolydien ; A dorien et D mixolydien ; A7, G et A, avec A ionien. Non prédit : la remarque “careful on the IV chord” sous C et G comme sous F. Trouvé en lisant le code après l’exécution : les remarques de
ChordVocabularydécrivent la régression de CM7. - Confirmé : les notes à éviter et les tensions des quatre colonnes ; les cinq tensions dans aucune des gammes de la compétence ; sept réponses, F sur G7 répondu bien que
CanHandlele refuse, B♭ mesuré contre une triade de C majeur ; deux requêtes qui passentCanHandleet reçoivent le texte d’aide, une qui échoue aux deux. Non prédit, ajouté après l’exécution : le conseil pour B sur C7, “exactly the kind of altered tension players reach for (major 7th on the V)”, et CM7 lu comme une septième majeure par cette compétence. - Confirmé : sur Am7, quatre notes de l’accord et D la 11 ; sur A7, D note à éviter et C la ♯9 ; F, G♯ et D notes à éviter, la ♭13, la septième majeure et la 11 ; C♯, F♯ et G♯.
- Confirmé : quatre entrées à catégorie vide, le nom du fichier comme seule étiquette, le nom puis « Concept: … » ; la boîte 1 A C D E G, « Minor pentatonic » de GA ; les trois modes. Non prédit : 192 entrées tirées de 15 fichiers,
SpecializedTunings.yamlsauté comme le 2026-10-04.
Observations, pas des tests :
- Depuis GA #626,
ga_arpeggio_suggestionssurmainnomme les arpèges parImprovisationSkill.InferQuality, donc l’outil lirait maintenant lui aussi CM7 comme une septième mineure. Lu, pas exécuté. - La leçon cite GAA-003 à Demerzel
0f7a5fd, le commit de la dernière synchronisation de Streeling sur le site.
À vérifier
Section intitulée « À vérifier »- Si le reconnaisseur d’accords complet de GA (pas seulement
TryFindExact) nomme les renversements comme032010; la recherche de voicings du MCP laisse penser que oui (C/E), mais le cours ne l’a pas appelé. - Le commit du serveur MCP : les réponses ci-dessus n’ont pas été reproduites avec un serveur compilé à partir de
a826864. HarmonicFunctionAnalyzer.Parsesur “Supertonic” et “Submediant”, par un test dans GA.- Les rayons et les axes de symétrie du
BraceletNotationde GA, rendus dans un navigateur. domain.commonTonessur un serveur compilé après #681 : le correctif a été lu sur5c3a52a, pas exécuté.- Les réponses du chatbot lui-même à « voice leading C major to G major » et à « voice leading from G to Cmaj7 », plutôt que la réécriture de sa règle par le cours.
- Si une version ultérieure de GA enregistre
YamlKnowledgeSyncServiceet laisse un agent chercher dans la collectionyaml_knowledge, de sorte que les lignes fausses deModalInterchange.yamlpuissent arriver jusqu’à une réponse. - Les deux outils
ga_chord_substitutionsen marche, la closure du serveur MCP et l’outil du même nom de GaApi, face aux résultats de la leçon 10. get_borrowed_chordspar le serveur MCP et par GaApi, plutôt que le service compilé seul.get_mode_infoetget_available_modespar le serveur MCP en marche, plutôt queModesConfigseul :get_mode_info("Ionian Augmented")devrait répondre C D♯ E F G♯ A B.- Ce que répond le
ModesSkilldu chatbot, qui litGetModalFamilieset garde donc les noms alternatifs, pour « Ionian Augmented », « Altered bb7 » et « Lydian ». - La ligne « Scale: » du
ga_chord_to_seten marche pour Cmaj7, G7 et Cm. - La réponse du
ModesSkillen marche à « modes of limited transposition », plutôt que la reconstruction de son format par le cours. - La ligne « Scale: » du
ga_chord_to_seten marche pour le sixième mode de Messiaen, C D E F G♭ A♭ B♭ B : la recherche répond « Diminished (Half-Whole) ». - Les accords que
GenerateFromSymmetricalScalesconstruit à partir des 20 modes, et les modes queModalCharacteristicIntervalServiceperd à cause de ses indices qui se chevauchent, en les exécutant. VoicingFilterServicesur « Cmi7 » et le chatbot sur “Can you analyze this progression: Dm7 G7 Cmaj7”, exécutés plutôt que lus.- Le
ga_polychorden marche sur B sur C et C sur F♯, face à la copie de son code par le cours. - Le reconnaisseur d’accords complet de GA, pas
TryFindExactseul, sur les voicings x3233x, x32335 et x3234x. - Le
ga_search_voicingsen marche sur « drop2 », « shell » et « rootless » : quels voicings l’index renvoie pour chaque étiquette. - L’étiquette « Shell » d’
AutoTaggingServicesur le corpus indexé, exécutée plutôt que lue, et si une version ultérieure de GA recompileIndexVoicingsCommand, ce qui rendrait atteignables les étiquettes de drop d’InterpretationService. - Ce que répond le chatbot quand on lui demande des voicings drop 3, puisque GA n’en étiquette aucun.
- Le
ga_easier_voicingsen marche sur F, Bm et B♭, plutôt que la lecture de son filtre par le cours, et les indications de substitution qu’il ajoute à partir dedomain.chordSubstitutions. - Si une version ultérieure de GA lit
Tunings.toml, ou laisseHarmonicNavigator3Dutiliser ses propriétéstuningsetdataUrls. ga_arpeggio_suggestions,ImprovisationSkilletOutsideNotesSkillen direct, sur les requêtes de la leçon 16, plutôt que l’outil lu comme du texte et les compétences compilées seules ; et surmain, si l’outil, qui appelle maintenantInferQuality, lit CM7 comme une septième mineure.