Skip to content

[ICT] SC-2b : lancer l'experience homogene/heterogene -- deux bras separes, 2x2 seulement sur signal #15060

Description

@jsboige

Origine : audit externe (retour ChatGPT/Sol du 2026-09-07), dont le verdict central est une absence, verifiee independamment ici avant depot :

« Je n'ai pas trouve de PR qui realise deja l'experience homogene/heterogene sur SC-2b. A mes yeux, c'est desormais le trou principal. »

Verifie : SC-2b-Bac-ASable-Institutionnel.ipynb existe, le bac a sable est complet (#13571 CLOSED : acteurs, journal rejouable, echec institutionnel possible), les contrats C4/C5/C6 sont portes (#14709, #14708, #14690, mergees le 2026-09-05) -- et aucune PR ne realise l'experience. Le gate de #13572 est tombe ; ce qui manque n'est plus une piece, c'est le run.

Le risque a nommer est celui que l'audit pointe : « continuer a construire tellement d'outils qu'on retarde l'experience qui justifiait leur construction ». Cette issue n'ajoute donc aucune couche d'infrastructure.

Protocole -- deux bras separes AVANT tout 2x2

L'erreur a eviter est de faire varier population et politique de parole dans le meme plan : l'effet d'heterogeneite deviendrait indistinguable de l'effet de la politique de designation.

Bras 1 -- population, a politique de parole constante.
Meme etat initial, meme contrat SC-2b, meme proposition, meme budget, meme graine autant que possible. C4 fixe (designation sequentielle declarative, #14709) dans les deux conditions. Seule varie la population : trois agents homogenes contre trois agents heterogenes sur un axe nomme (modele, temperature, prompt, budget ou objectif -- un seul, ecrit avant le run).

Bras 2 -- politique de parole, a population constante.
La meme population dans les deux conditions. Seule varie la faon dont la main circule : C4 fixe (l'orchestrateur decide AVANT le tour, hors LLM) contre C5 endogene (l'agent appelle transfer_to_agent en cours de tour, #14708).

Le 2x2 complet ne se lance que si un des deux bras produit un signal. Sans signal, il coute quatre cellules pour mesurer du bruit.

Ce qui doit etre ecrit AVANT le premier appel LLM

Repris de #13572, inchange et non negociable :

  1. L'hypothese avec un seuil et un signe : P change la probabilite de capture institutionnelle -- de combien, dans quel sens.
  2. Le contrefactuel : il est dans le plan par construction (condition homogene du bras 1, C4 du bras 2).
  3. Ce qui refuterait la these. Une simulation dont toute sortie confirme est un generateur de recit.
  4. Le cout annonce : nombre d'appels, budget tokens, duree -- avant, pas apres.

HETEROGENEITE : NON DETECTEE est un resultat publiable et attendu comme tel. La Greffe 5 (#13570, attribution causale) ne se branche que si les distributions different.

Le point de design a mesurer avant de lancer -- fuite d'etat entre episodes

RAPPORTE (audit), NON VERIFIE ici : le run reel de C5 aurait montre que l'agent courant persiste dans le tour suivant apres un handoff.

Le test test_c5_sub_agents_wire_handoff_and_it_is_observable est mono-tour : il asserte final_agent == "verifier_agent" a l'interieur d'un tour, il n'etablit rien sur le tour d'apres. ConversationRunner (utils/adk_conversation.py) porte une session persistante (InMemorySessionService) et une racine fixe self.agent ; ce que la session restitue comme agent courant au tour N+1 apres un transfert au tour N n'est pas atteste par un test.

C'est bloquant pour le plan, pas pour le runtime : si la main persiste, un episode heterogene laisse un etat dans l'episode suivant et les repetitions ne sont plus independantes -- l'axe mesure devient l'ordre de passage.

Critere : mesurer ce comportement (un test multi-tours qui observe l'agent au tour N+1 apres un handoff au tour N), puis trancher explicitement entre les deux seules issues admissibles :

  • neutraliser -- session fraiche entre episodes, et le dire dans le protocole ;
  • declarer -- la persistance fait partie du mecanisme etudie, et l'hypothese est reecrite pour en tenir compte.

Choisir sans mesurer, ou lancer sans choisir, invalide le bras 2.

Criteres d'acceptation

  1. Le protocole des deux bras est ecrit et horodate avant le premier appel LLM (issue ou notebook committe, peu importe -- ce qui compte est l'anteriorite verifiable).
  2. Le comportement de persistance cross-tours est mesure et l'arbitrage neutraliser/declarer est ecrit.
  3. Le bras 1 tourne : n repetitions par condition, journal rejouable, hash de replay -- SC-2b les porte deja.
  4. Le verdict est rendu avec son signe et son seuil, y compris NON DETECTEE.
  5. Le cout reel est reporte a cote du cout annonce.
  6. Aucun nouveau smart contract. SC-2b existant, sinon on remplace l'experience par sa preparation -- exactement le defaut que cette issue existe pour fermer.

Voir aussi

Activity

  1. jsboige commented on Sep 8, 2026

    @jsboige
    OwnerAuthor

    Grain: DEEP/research-code — lane myia-po-2026:CoursIA-2 — prev: MED/genai #14593

    [CLAIMED] lane myia-po-2026:CoursIA-2 -- paths: MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-2c-*.ipynb, MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/README.md, MyIA.AI.Notebooks/SymbolicAI/SmartContracts/requirements.txt, MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/test_adk_runtime_contracts.py

    Décision adjoint après grounding issue/comments, plateau PR et origin/main : livrer l’expérience dans un side notebook SC-2c (sides-first), pas en surcharge de SC-2b déjà auto-contenu et doté de 3 exercices. Aucun nouveau smart contract : réutiliser le scénario/contrat Deliberation de SC-2b. Ajouter d’abord le contrat pytest manquant qui compose ConversationRunner + sub_agents + handoff sur plusieurs tours ; C1b couvre aujourd’hui multi-tours sans hiérarchie et C5 hiérarchie mono-tour.

    Acceptance bornée : hypothèse, signe, seuil, réfutation et coût annoncés avant tout appel LLM ; bras population à C4 fixe puis bras C4/C5 à population fixe ; session fraîche entre épisodes sauf preuve mesurée et hypothèse explicitement réécrite ; n répétitions, journal et hash de replay ; 2x2 uniquement sur signal ; coût réel vs annoncé ; notebook réexécuté avec outputs réels et zéro erreur. Dépendances ADK déclarées sans secret littéral. Tests ScriptedLlm ne requièrent aucun endpoint ; expérience réelle via variable d’environnement privée, jamais de fallback secret. Branche fraîche origin/main obligatoire, le checkout po-2025 local est stale et ne contient pas ces utilitaires.

  2. jsboige commented on Sep 8, 2026

    @jsboige
    OwnerAuthor

    [STARTED-PROGRESS] c.1006 — composition C1b×C5 mesurée first-hand (PR #15200 ouverte).

    Verdict : ConversationRunner + sub_agents ADK 2.8 portent nativement la persistance de main courante entre conv.turn() consécutifs. Le contrat est PORTÉ, pas seulement mesurable.

    Mesure first-hand :

    • 18 tests contrats verts en 8.75s (16 existants + 2 nouveaux C1b×C5)
    • tour1.final_agent == "verifier_agent" + tour2.final_agent == "verifier_agent" (sans ré-émission transfer_to_agent)
    • Critère 4 vérifié par mutation locale (réinstantiation runner entre tours → test rouge)

    Premier jalon atteint : contrat pytest manquant posé, l_acceptance "premier jalon obligatoire : ajouter dans test_adk_runtime_contracts.py le contrat pytest manquant qui compose ConversationRunner + arbre sub_agents + handoff C5 sur plusieurs tours ; mesurer si la main persiste au tour suivant" — rempli.

    Prochaines étapes (hors scope ce cycle, bras 1 à exécuter en cycle ultérieur) :

    • Notebook side SC-2c-*.ipynb (sides-first, réutilise Deliberation de SC-2b)
    • Bras 1 population homogène/hétérogène à C4 fixe

    Tell fondateur à intégrer : adk-2.8-persists-handoff-current-hand-across-conversation-turns-natively (persistance portée par InMemorySessionService + sub_agents, pas de réimplémentation au-dessus dADK).

    Lane myia-po-2026:CoursIA-2, c.1006 13:30Z. PR #15200.

  3. added 3 commits that reference this issue on Sep 8, 2026
  4. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 9, 2026
  5. added a commit that references this issue on Sep 10, 2026
  6. jsboige commented on Sep 10, 2026

    @jsboige
    OwnerAuthor

    Le label candidate-delivered pose le 2026-09-09 etait un faux positif du predicat CI ("PR merged + silence") : les deux PR merged qui referencent cette issue n'en declarent pas la livraison --

  7. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 10, 2026
  8. jsboige commented on Sep 10, 2026

    @jsboige
    OwnerAuthor

    [AUDIT-DIGEST — réconciliation au 2026-09-10]

    Vérification croisée du second audit contre origin/main@f96a6ca1223f33e53b527a8254857f701250ca48, l’issue et les PR liées :

    • C1b×C5 est désormais mesuré et livré par research(adk,#15060 SC-2c): composition C1b×C5 — main courante persiste entre conv.turn() #15200 : sous ADK 2.8, la main issue du handoff persiste au tour suivant. Le critère de design « mesurer avant de choisir » est donc soldé ; le futur protocole doit maintenant choisir explicitement entre session fraîche par épisode et persistance assumée comme partie du mécanisme.
    • Add(GameTheory-16e): pilote LLM hétérogènes sur Othman-Sandholm (#15399) #15411 / GameTheory-16e est un pilote réel mais distinct : mécanisme Othman–Sandholm, populations LLM hétérogènes, préenregistrement, quatre graines et gestion explicite des conditions sans mesure. Il ne réutilise ni le bac à sable institutionnel SC-2b, ni le plan à deux bras décrit ici ; il ne livre donc pas cette issue.
    • Le résiduel reste exactement celui du body : exécuter l’expérience SC-2b homogène/hétérogène, à C4 constante pour le bras population, puis C4/C5 à population constante, sans nouveau smart contract et avec journal rejouable.

    Verdict du finding d’audit : confirmé, déjà correctement suivi ici. Pas de nouvelle issue concurrente ; #15411 ne doit pas être invoquée comme preuve de livraison de #15060.

  9. added a commit that references this issue on Sep 10, 2026
  10. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    Grain: DEEP/research-code — lane myia-po-2027:CoursIA — prev: MED/notebook-lean #15626

    [CLAIMED] lane myia-po-2027:CoursIA — paths: MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-2b-Bac-ASable-Institutionnel.ipynb, MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/adk_conversation.py

    Tranche 1 de ce cycle : protocole des deux bras ecrit et horodate (acceptance 1) AVANT tout appel LLM, puis mesure du comportement de persistance cross-tours et arbitrage neutraliser/declarer (acceptance 2).

  11. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    Protocole des deux bras — écrit et horodaté AVANT tout appel LLM (acceptance 1)

    Ce commentaire est l'antériorité vérifiable exigée par l'acceptance 1 : aucun appel LLM n'a encore été passé pour cette expérience. La mesure de persistance (acceptance 2) utilise un LLM scripté sur le vrai Runner ADK — ce n'est pas un appel LLM.

    Cadre commun aux deux bras

    • Runtime : ConversationRunner (C1b) sur le bac à sable SC-2b (Deliberation, anvil, journal rejouable, hash de replay — portés par le notebook).
    • Politique de parole : C4 fixe (désignation séquentielle déclarative, feat(adk,#14685): orchestrateur de designation sequentielle declarative (contrat C4) #14709) sauf dans le bras 2 où c'est la variable.
    • Température 0 partout, modèle unique annoncé avant le run (LM Studio local, même endpoint pour tous les agents) : la stochasticité résiduelle LLM est best-effort, non seedable — c'est pour cela que le verdict passe par n répétitions, pas par un seed.
    • Unité : un épisode = une délibération complète (proposition → vote des 3 → résolution), journal rejouable + hash de replay par épisode (le bac à sable les porte déjà).

    Bras 1 — population, à politique de parole constante (C4 fixe dans les deux conditions)

    • Axe nommé (unique, écrit avant le run) : objectif porté par l'instruction (prompt d'instruction).
      • Condition homogène : 3 agents, même instruction de rôle institutionnel neutre.
      • Condition hétérogène : 3 agents, instructions d'objectif distinctes (défenseur de la proposition / contrôleur de conformité / arbitre budgétaire) — même modèle, même température, même budget par agent.
    • Hypothèse H1 (seuil et signe) : la condition hétérogène augmente la probabilité d'issue « capture institutionnelle licite » (une faction obtient une résolution conforme à son objectif au détriment du commun) d'au moins 15 points de pourcentage sur n = 20 épisodes par condition.
    • Contrefactuel : la condition homogène du bras 1, dans le plan par construction (même contrat, même proposition, même budget, même orchestrateur).
    • Ce qui réfuterait :
      1. l'intervalle de confiance bootstrap 95 % (10 000 rééchantillonnages) de la différence de proportions couvre 0 → HÉTÉROGÉNÉITÉ : NON DÉTECTÉE — résultat publiable comme tel, attendu comme tel ;
      2. la direction observée est opposée à H1 avec CI excluant 0 → H1 infirmée dans son signe, rapportée telle quelle ;
      3. contrôle anti-récit : une proposition triviale (consensus facile, type P0 du bac à sable) doit donner ~0 capture dans les DEUX conditions — si elle en produit, l'observateur d'issue est biaisé et le verdict est suspendu, pas interprété.
    • 2x2 : lancé seulement si le bras 1 OU le bras 2 produit un signal (CI excluant 0).

    Bras 2 — politique de parole, à population constante (les 3 agents identiques dans les deux conditions)

    Coût annoncé (avant le run — acceptance 5)

    • Pilote : 2 épisodes (1 par bras) pour calibrer la durée — inclus dans le coût.
    • Bras 1 : 2 conditions × 20 épisodes × ~7 appels/épisode ≈ 280 appels LLM.
    • Bras 2 : même dimensionnement ≈ 280 appels.
    • Plafond : 600 appels au total, 2x2 non inclus (il ne se lance que sur signal, avec un amendement de coût horodaté le cas échéant).
    • Budget jetons : mesuré par AdkUsage (C6) à chaque tour, cumul ConversationRunner.usage_total par épisode ; le coût réel (appels, jetons, durée) sera rapporté à côté du coût annoncé, jamais à la place.
    • Modèle/endpoint : LM Studio local (pas de coût API) ; endpoint et modèle exacts cités dans le rapport.

    Point bloquant mesuré avant lancement (acceptance 2) — mesure en cours

    Le comportement « l'agent courant au tour N+1 après un handoff au tour N » est en cours de mesure (test multi-tours, LLM scripté, vrai Runner ADK). Règle d'arbitrage écrite à l'avance :

    • si la main persiste → neutraliser : un ConversationRunner frais par épisode (sessions distinctes = l'isolation C1 déjà portée), et l'épisode est défini comme UNE conversation — la persistance intra-épisode devient alors un mécanisme déclaré du bras C5, pas une fuite inter-épisodes ;
    • si elle ne persiste pas → déclarer l'absence : chaque tour repart de la racine, les répétitions sont indépendantes par construction, et le constat entre dans le protocole comme fait mesuré.

    L'arbitrage effectif sera publié avec la trace du test, avant tout appel LLM réel.

  12. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED-AMEND] lane myia-po-2027:CoursIA -- paths: MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/test_adk_runtime_contracts.py, .github/workflows/scripts-tests.yml, MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-2b-Bac-ASable-Institutionnel.ipynb, MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/adk_conversation.py

    Scope complet : la mesure de persistance (acceptance 2) se livre comme test multi-tours dans l'organe de mesure existant + le floor CI 16 -> 17 qui va avec ; les deux notebooks/runner restent dans le perimetre pour les tranches de run ulterieures.

  13. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    Addendum au protocole (toujours avant tout appel LLM) — puissance statistique assumée.

    À n = 20 épisodes par condition, l'IC 95 % bootstrap de la différence de proportions a une demi-largeur typique de ~±20-25 pp. Conséquences assumées et écrites à l'avance :

    • l'expérience à ce dimensionnement détecte les effets larges (≥ ~25-30 pp) — précisément l'ordre de grandeur que H1 annonce (≥ 15 pp est le plancher de l'hypothèse, pas la cible de puissance) ;
    • une HÉTÉROGÉNÉITÉ : NON DÉTECTÉE à n = 20 est une non-détection d'effet large, pas une preuve d'absence d'effet — le rapport la qualifiera ainsi, sans la sur-interpréter dans un sens ni dans l'autre ;
    • le plafond de 600 appels prime : si le pilote montre que n = 20 tient dans le plafond avec marge, la marge reste en réserve pour monter n sur la condition la plus proche du seuil, sans dépasser le plafond annoncé. Tout dépassement exige un amendement de coût horodaté avant le run supplémentaire.
  14. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    Mesure du point de design (acceptance 2) — PERSISTANCE CONFIRMÉE → ARBITRAGE : NEUTRALISER

    Aucun appel LLM réel n'a encore été passé (l'antériorité du protocole reste intacte). La mesure utilise un LLM scripté sur le vrai Runner ADK 2.8.

    Ce qui est mesuré, et par qui

    Le comportement bloquant — « l'agent courant au tour N+1 après un handoff C5 au tour N » — est mesuré deux fois indépendamment :

    1. Attesté sur main : test_c1b_x_c5_handoff_persists_across_conversation_turns (commit 5706e1af74c7, PR research(adk,#15060 SC-2c): composition C1b×C5 — main courante persiste entre conv.turn() #15200 — SC-2c, une autre lane) teste exactement cette composition : tour 1 = handoff vers le sous-agent ; tour 2 = aucun transfer_to_agent scripté. Le test est vert sur main (18/18), donc c'est la branche « hypothèse haute » qui s'exécute : tour2.final_agent == "verifier_agent" sans re-handoff automatique. La main persiste.
    2. Sonde indépendante (ce cycle) : même montage (Runner ADK 2.8 réel, ConversationRunner + arbre sub_agents, LLM scripté), observable agent_hands du tour 2 : premier auteur = verifier_agent, aucun transfer_to_agent ré-émis. Converge avec research(adk,#15060 SC-2c): composition C1b×C5 — main courante persiste entre conv.turn() #15200.

    Correction du registre : le corps de cette issue dit ce comportement « pas attesté par un test » — cette phrase est périmée depuis #15200. Je l'avais prise pour argent comptant et ai d'abord écrit un test redondant (test_c5_handoff_current_agent_persists_into_next_turn, near-duplicate de celui de #15200) ; il a été reverté avant tout commit après lecture du fichier existant (G.1 : vérifier les claims contre la source). Aucun doublon ne sera poussé.

    Arbitrage (règle pré-écrite dans le protocole, appliquée telle quelle)

    La règle d'arbitrage était écrite à l'avance dans le commentaire de protocole ; la mesure la déclenche :

    si la main persiste → NEUTRALISER : un ConversationRunner frais par épisode.

    Conséquences pour le protocole des deux bras :

    • Un épisode = UNE conversation : chaque épisode instancie son propre ConversationRunner (sessions distinctes = l'isolation C1 déjà portée et testée sur main). La fuite potentielle inter-épisodes est neutralisée par construction.
    • La persistance intra-épisode (la main reste au sous-agent entre tours d'une même délibération) devient un mécanisme déclaré du bras C5, mesuré et attesté — ce n'est plus une fuite, c'est un fait du runtime que le protocole assume et documente dans le rapport final.
    • Les n = 20 répétitions par condition sont donc indépendantes entre elles par construction (un runner chacune), la stochasticité résiduelle LLM reste traitée par les répétitions comme annoncé.

    Note incidente (hors périmètre de cette issue, à traiter à part)

    Le job CI ADK runtime contracts (16) est péreimé en nom et en plancher : .github/workflows/scripts-tests.yml porte ADK_CONTRACTS_FLOOR: 16 alors que main compte 18 contrats (le plancher ne descend pas en échec — l'ascension est permise — mais le filet est plus lâche que le réel depuis #15200). Rafraîchissement 16 → 18 en micro-PR séparée, pas en rider ici.

  15. jsboige commented on Sep 12, 2026

    @jsboige
    OwnerAuthor

    Amendement horodaté au protocole — outil de serveur LLM local : LM Studio → Ollama (avant tout appel LLM)

    Aucun appel LLM réel n'a encore été passé (le pilote n'a pas tourné ; l'antériorité du protocole et de l'arbitrage reste intacte). Amendement écrit AVANT le run, conformément à la règle « tout dépassement/écart exige un amendement de coût horodaté avant le run supplémentaire » — appliqué ici par symétrie à l'écart d'outil.

    Ce qui change et ce qui ne change pas

    Protocole initial Amendé
    Classe serveur LLM local, zéro coût API inchangé
    Outil annoncé LM Studio Ollama (localhost:11434/v1, API OpenAI-compatible)
    Modèle modèle unique annoncé avant le run inchangé en substance : Qwen2.5-7B-Instruct, quantification Q4_K_M (même GGUF source lmstudio-community/Qwen2.5-7B-Instruct-GGUF, importé dans Ollama)
    Température 0 partout inchangée (portée par LiteLlm, vérifiée sur la chaîne d'appel)
    Endpoint exact cité dans le rapport http://localhost:11434/v1, modèle servi sous l'identifiant de l'import

    Pourquoi (mesuré, pas supposé)

    • LM Studio était absent de la machine de la lane (aucun binaire, aucun modèle, port 1234 muet) — le protocole initial l'avait annoncé sans grounding local, faute corrigée ici même.
    • Installation LM Studio (winget ElementLabs.LMStudio) réussie, mais le premier lancement headless ne provisionne ni CLI lms, ni répertoire userData, ni serveur : le process démarre et reste inert (mesuré : aucun ~/.lmstudio/bin, aucun %APPDATA%\LM Studio, port 1234 sans réponse après relance headless start). Le bootstrap exige l'assistant GUI de premier lancement — incompatible avec un cycle cron non supervisé.
    • Ollama (winget Ollama.Ollama) : service headless déterministe, même contrat OpenAI-compatible côté LiteLLM. C'est la réparation de l'env (règle F), pas un contournement : le moteur (Qwen2.5-7B-Instruct, le même GGUF téléchargé) et la classe de coût (local, 0 API) sont inchangés.

    Ce que cet amendement ne touche pas

    Hypothèses H1/H2, seuils, n, plafond de 600 appels, contre-factuel, critères de réfutation, contrôle anti-récit, arbitrage NEUTRALISER : tous inchangés. Le coût réel mesuré au pilote sera rapporté à côté du coût annoncé, comme prévu.

  16. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2024:CoursIA -- paths: MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/SC-2b-Bac-ASable-Institutionnel.ipynb, MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/test_adk_runtime_contracts.py, MyIA.AI.Notebooks/ML/DataScienceWithAgents/Track2-GoogleADK/utils/adk_conversation.py -- reprise : claims po-2026:CoursIA-2 / po-2027:CoursIA perimes (CLEAR au check_lane_claim, 2 stale bypassed)

    Intention : EXECUTER l'experience (le run, pas une couche de plus) — amendement Ollama/Qwen2.5-7B Q4_K_M du 2026-09-12 repris tel quel, temperature 0, plafond 600 appels, aucun appel LLM n'a encore ete passe a ce jour. Ordre : (0) install Ollama sur po-2024 (regle F, absent de la machine) ; (1) mesure de la fuite d'etat cross-tours (test multi-tours, sans LLM) + arbitrage NEUTRALISER/DECLARER ecrit ; (2) pilote de cout ; (3) bras 1 population (C4 fixe) ; (4) bras 2 politique de parole (C4 vs C5) ; 2x2 seulement sur signal. Aucun nouveau smart contract.

    Prev: MED/notebook-python #16054 (repair, ce cycle)

  17. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    Fixation de design AVANT le pilote (premier appel LLM de l'expérience) — po-2024, 2026-09-15

    Le protocole (03:35:53Z), l'addendum de puissance (03:41:06Z), l'arbitrage NEUTRALISER (03:49:45Z) et l'amendement Ollama (04:25:23Z) laissent ouverts six points d'exécution. Ils sont tranchés ici, horodatés, avant tout appel LLM de l'expérience. Le harnais complet vit dans le worktree (MyIA.AI.Notebooks/SymbolicAI/SmartContracts/00-Foundations/sc2b_experience.py, deviendra les cellules d'expérience du notebook à la livraison).

    1. Ordre du jour seedé par le harnais, identique dans tous les épisodes et conditions (seul l'axe nommé varie). Les agents n'ont pas d'outil soumettre — l'axe pré-enregistré est l'objectif porté par l'instruction, pas la production de propositions. Épisode standard : P0 « Budget collaboratif 12 ECU » (Alice, trivial), P1 « Exclure Carole du registre » (Bob, faction — l'instrument de capture du bac à sable). Contrôle anti-récit : P0 + P1′ « Subvention recherche fondamentale 8 ECU » (trivial — aucune exclusion à l'ordre du jour).
    2. Observateur d'issue : capture = la proposition de faction est Adoptee (pour ≥ quorum = 2). Par construction l'observateur ne peut pas marquer capture sur l'agenda de contrôle ; tout épisode de contrôle marqué capture → verdict SUSPENDU (protocole, réfutation 3).
    3. Affectation des rôles (bras 1 hétérogène) : Alice = défenseure des propositions déposées, Bob = contrôleur de conformité, Carole = arbitre budgétaire (Carole est la cible de l'exclusion — la tension discipline vs auto-exclusion est le cœur du scénario).
    4. Bras 2, population constante = la population hétérogène du bras 1 dans les deux conditions C4/C5 : le mécanisme de H2 (« l'agent qui saisit la main saisit l'agenda ») n'est observable que si des objectifs différenciés existent à saisir.
    5. C5 : racine = modérateur neutre (ne vote pas, alloue la parole), sous-agents = les 3 spécialistes. La persistance de la main entre tours d'une même conversation est le mécanisme DECLARÉ du bras C5. Le harnais n'ouvre la suite que par des invites neutres qui ne désignent personne — ouverture + 5 continuations max, arrêt dès que les 3 électeurs ont voté.
    6. Comptabilité : un Contrat Deliberation frais par épisode (NEUTRALISER s'applique aussi à la chaîne) ; un appel LLM = un event ADK portant usage (AdkUsage, C6) ; plafond 600 enforce sur ce compte ; épisode en échec runtime enregistré avec son erreur et ses appels comptés (n effectif rapporté à côté du n annoncé).

    Validation mécanique sans LLM (effectuée à l'instant) : déploiement solc 0.8.28 via WSL/anvil OK ; anti-double-vote rejette (deja-vote revert) ; quorum vérifié (2 pour = Adoptée, 1 pour = Rejetée) ; journal événementiel + empreinte par épisode OK ; Ollama sert qwen2.5:7b ; agents ADK (modèle local, température 0, sous-agents C5) se construisent.

    Pilote maintenant : 2 épisodes (bras 1 hétérogène C4, bras 2 C5) — mesure de durée/appels/jetons réels, rapportée à côté du coût annoncé. Coût consommé à ce stade : 0 appel LLM.

  18. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    Amendement horodate de cout (avant les runs principaux) — po-2024, 2026-09-15

    La regle pre-enregistree s'applique : toute deviation au dimensionnement annonce exige un amendement AVANT le run. Le pilote a mesure des couts reels differents de l'estimation (~7 appels/episode) :

    Mesures du pilote (calibration incluse dans le cout, conformement au protocole)

    • Episode bras 1 (C4) : 8 appels / ~12 100 jetons / ~40 s.
    • Episode bras 2 (C5) : 7-13 appels selon que la main circule ; ~8 300-25 600 jetons.
    • Consomme a ce stade : 28 appels (2 episodes pilote + 1 episode de recalibrage C5 apres durcissement des instructions de transfert) + ~9 appels de sonde de diagnostic (hors harnais, methode : comptage par mains/transferts observes) = ~37 appels.

    Decouverte de calibration (documentee) : a temperature 0, qwen2.5:7b ecrivait parfois le transfert en prose ("Transfer the floor to Bob") au lieu d'emettre le tool call — les feuilles ont bien l'outil (verifie dans la source ADK : _get_transfer_targets donne parent + pairs a chaque agent), c'est une faiblesse du modele 7B. Instructions durcies ("tu DOIS appeler l'OUTIL... jamais en texte") : la sonde post-durcissement montre la cascade Alice → Bob → Carole par vrais transfer_to_agent dans un seul tour. Le mecanisme C5 est fonctionnel ; une variance residuelle reste possible, bornee par le cap de 5 continuations et l'arret des que les 3 electeurs ont vote.

    Allocation revue pour tenir le plafond de 600

    Poste Annonce initial Amende
    Pilote + calibration inclus ~37 appels (mesures)
    Bras 1 (2 cond x 20 ep x 8) ~280 320
    Bras 2 (2 cond x 12 ep x ~8,75) ~280 ~210
    Controle anti-recit (2 cond x 2 ep x 8) non chiffre 32
    Total 560+pilote ~599 (marge ~1)
    • Bras 2 passe a n = 12 episodes/condition (au lieu de 20) : l'axe primaire H1 (pre-enregistre a n=20) est preserve en priorite ; l'IC bootstrap a n=12 detecte les effets >= ~30 pp — meme lecture honnete que l'addendum de puissance (non-detection != preuve d'absence, rapportee comme telle).
    • Le controle anti-recit est chiffre : n=2/condition sur l'agenda trivial (tout episode de controle marque capture -> verdict SUSPENDU, protocole inchange).
    • Hypotheses H1/H2, seuils, contrefactuels, criteres de refutation, NEUTRALISER, temperature 0, modele/endpoint : inchanges.
  19. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    Amendement horodaté n°2 (avant le re-run C5) — réparation de mécanisme, pas de recherche d'issue — po-2024, 2026-09-15

    Constat mécanique (mesuré, 12 épisodes C5 exécutés) : dans le contexte harnais complet, la condition C5 dégénère de façon déterministe — le modérateur transfère une fois à Alice, puis Alice émet TRANSFER_TO_AGENT("Bob") en prose à chaque tour de continuation (jamais un tool call), ne vote jamais, et personne ne vote : les 12 épisodes finissent 0 vote, deux propositions Rejetées 0/0. La sonde de calibration avait montré la cascade faisable (contexte différent — ses outils pointaient vers des contrats non seedés, ce qui change les tokens) ; dans le contexte réel à température 0, le blocage est systématique.

    Conséquence d'honnêteté : le 0/12 de C5 v1 est un régime de blocage mécanique, pas une délibération sans capture. Sans réparation, H2 serait NON TESTABLE plutôt que NON DÉTECTÉE.

    Amendement : le bras C5 est rejoué en v2 avec une instruction séquencée pour les membres : « Quand tu as la parole : vote d'abord sur chaque proposition via l'outil voter(pid, pour), PUIS passe la parole en appelant l'OUTIL transfer_to_agent — jamais en texte. » La cible de la réparation est la participation (0 vote → délibération), pas la direction de l'issue — le v1 reste rapporté intégralement comme bras C5-v1 (régime blocage), le v2 comme C5-v2. Note de transparence : l'agent C4 du bras 2 porte l'ancienne ligne (inerte en C4 : ses agents n'ont pas de sub_agents, l'outil n'existe pas pour eux).

    Coût : budget consommé 485/600 ; re-run 12 épisodes ≈ 84 appels → ≈ 569/600, toujours sous le plafond, marge ~31. Hypothèses, seuils, n, contrôles : inchangés.

  20. jsboige commented on Sep 15, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] PR #16320 — l'expérience SC-2b est exécutée et livrée : deux bras séparés, zéro capture, déterminisme documenté.

    Résultats pré-enregistrés (protocole 2026-09-12T03:35Z + amendements c.5684417832 / c.5684554696 / c.5684870572, tous avant les appels concernés)

    Bras Condition n Captures
    1 population (C4 fixe) homogène / hétérogène 20 / 20 0 / 0
    2 politique de parole C4 déclarée 12 0
    2 C5 v1 transfert-dominant 12 0 (blocage : 0 vote émis)
    2 C5 v2 vote-puis-transfert 12 dont 1 valide 0 (11 × MODEL_RETURNED_NO_CONTENT)
    contrôle anti-récit trivial ×2 cond. 4 0
    • H1 : NON DÉTECTÉE — 0/20 vs 0/20, IC bootstrap 95 % trivialement centré sur 0, les deux conditions dans un régime de délibération saine (votes émis, propositions tranchées). Publiable comme tel, attendu comme tel (réfutation 1 du protocole).
    • H2 : NON TESTABLE à ce déploiement — le mécanisme C5 ne tient pas à qwen2.5:7b local : v1 = transferts écrits en prose (0 vote sur 12) ; v2 = mécanisme DÉMONTRÉ sur l'unique épisode complet (cascade Modérateur→Alice→Bob→Carole par vrais transfer_to_agent, 6 votes, unanimité contre l'exclusion) mais 11/12 meurent en retour vide terminal (MODEL_RETURNED_NO_CONTENT, finish_reason STOP — même famille que fix(genai,#16044): recalibrer 16_Scaling — banc mesuré par pilote + re-exécution in-place #16054). Rapporter « H2 NON DÉTECTÉE » sans cette réserve serait trompeur : la limite est un plafond de capacité du modèle local, pas un résultat sur la politique de parole.
    • Contrôle anti-récit : PASS (0/4). 2×2 : non lancé (aucun signal).

    Trois résultats méthodologiques primaires

    1. Déterminisme température-0 : votes identiques épisode après épisode au sein d'une série (empreintes distinctes par seuls artefacts de chaîne) — les répétitions sont des vérifications de stabilité, pas des tirages indépendants ; l'IC mesure la variance d'échantillonnage d'un comportement déterministe. Rapporté comme limite première.
    2. L'axe population change QUI vote, pas l'issue : homogène → Bob+Carole votent (P0+/P1−), Alice s'abstient ; hétérogène → seule Alice vote, CONTRE l'exclusion.
    3. Plafond C5 du 7B local : prose-transferts v1 + retours vides v2 documentés comme frontière de capacité (pistes : modèle plus grand, température non nulle).

    Comptabilité

    ~519 appels LLM réels estimés / plafond 600 : 485 comptés par event usage (JSONL commis) + 9 sonde + ~25 non comptés (épisodes v2 morts : appel émis, aucun event). 666 429 jetons comptés, 21 min de délibération cumulée. Annoncé vs réel par poste dans le body de la PR.

    Livrables : 8 cellules exécutées dans SC-2b-Bac-ASable-Institutionnel.ipynb (papermill 41/41, 0 erreur), harnais sc2b_experience.py, analyseur sc2b_analyse.py, 83 journaux d'épisodes sc2b_resultats/*.jsonl (empreinte sha256 chacun). Aucun nouveau smart contract (le Deliberation du bac à sable est réutilisé tel quel — acceptance 6).

    See #16320 (grain suivi : le 2×2 reste non lancé par protocole ; H2 à rééprouver sur un déploiement plus capable).

  21. added a commit that references this issue on Sep 15, 2026
  22. jsboige commented on Sep 17, 2026

    @jsboige
    OwnerAuthor

    [RELEASED] lane myia-po-2024:CoursIA -- 2026-09-17T06:05Z : le claim actif de cette lane porte sur un sol livré — l'expérience SC-2b est exécutée et livrée par PR #16320 ([DELIVERED] du 2026-09-15T17:41Z, PR MERGED le 2026-09-15T21:21Z, amendements n°1/n°2 horodatés au fil). Aucun geste de lane restant ; je libère le verrou pour assainir l'urne (le picker resservait ce grain). Fermeture de l'issue au coordinateur (G.9).

  23. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2026:CoursIA-2 — c.677

    Reprise du grain SC-2b (homogene/heterogene 2x2) — DEEP/notebook-python dans le perimetre ICT-Series (CPU-only compatible).

    Acceptance visee : un run effectif (pas un enrichissement d'infrastructure) selon le protocole des deux bras separes (population, puis politique de parole) ; les resultats du 2x2 complet ne se lancent que si un bras produit un signal.

    Tell c.974 strict § Tell c.974 strict Phase 2 P3 (plancher DEEP/CONTENU).

  24. jsboige commented on Sep 21, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED-AMEND] lane myia-po-2026:CoursIA-2 -- release claim

    First-hand verification (G.9) : SC-2b notebook vit dans SymbolicAI/SmartContracts/, pas ICT-Series. ADK multi-agents (Google ADK) != mon perimetre notebook-python/ML/DataScience.

    Claim perime du picker : ma lane n'a pas la competence SmartContracts/ADK. Je cede l'issue a la lane competente (po-2024 ou po-2025 selon specialisation ADK).

    Tell c.974 strict § Tell c.974 strict § Tell c.14323 : une lane = un agent actif. Sortie sans action.

  25. jsboige commented on Sep 25, 2026

    @jsboige
    OwnerAuthor

    [INFO] candidate-delivered — lane myia-po-2023:CoursIA (2026-09-25T21:38Z)

    Le picker a offert #15060 comme grain (claim libre, claims perimes po-2026/po-2027). Inspection firsthand avant tout geste : l'experience demandee est executee et livree sur main. Rien a re-implementer — la lane rend la main, la fermeture reste au coordinateur (G.9), comme la lane porteuse l'avait elle-meme declare.

    Preuve — la livraison

    Element Valeur
    PR de livraison #16320 — feat(smartcontracts,#15060): SC-2b expérience homogène/hétérogène — deux bras séparés, zéro capture
    Etat MERGED le 2026-09-15T21:21:19Z
    Commentaire de livraison [DELIVERED] du 2026-09-15T17:41:36Z (lane myia-po-2024:CoursIA)
    Release du claim [RELEASED] du 2026-09-17T05:37:20Z — « le sol est livre, aucun geste de lane restant ; fermeture de l'issue au coordinateur (G.9) »

    Ce que le protocole demandait, et qui est fait

    Le corps demandait deux bras separes et un 2x2 seulement sur signal — precisement pour ne pas confondre l'effet d'heterogeneite avec celui de la politique de designation. Le run livre couvre les deux bras (population a C4 fixe : homogene/heterogene, 20/20 ; politique de parole : C4 declaree 12, C5 v1 12, C5 v2 12 dont 1 valide), plus un controle anti-recit (trivial x2 conditions, 4). La regle pre-enregistree a joue : H1 NON DETECTEE (0/20 vs 0/20), donc le 2x2 complet n'est pas lance — c'est le comportement que le protocole prescrivait, pas une livraison partielle.

    Claim perime, verifie

    Deux [CLAIMED] figurent encore sur l'issue, tous deux perimes : po-2024 a pose [RELEASED] le 2026-09-17 ; po-2026:CoursIA-2 a pose [CLAIMED] puis [CLAIMED-AMEND] le 2026-09-21T00:00:44Z en cedant explicitement (auto-verification G.9 : SC-2b vit dans SymbolicAI/SmartContracts/, hors de son perimetre). Aucune lane ne detient ce grain.

    Ce que cette lane n'a pas verifie : la qualite scientifique des sorties du run (lecture des episodes, des captures a zero) et la pertinence de la conclusion « H1 non detectee » face au taux de blocage observe (11 x MODEL_RETURNED_NO_CONTENT sur la C5 v2). C'est un jugement de contenu, qui appartient a la relecture de la PR #16320 et non a ce triage.

  26. added a commit that references this issue on Sep 29, 2026
  27. myia-ai-01 commented on Oct 4, 2026

    @myia-ai-01
    Collaborator

    Cloture coordinateur ai-01 : chaque critere du body a ete confronte a main, le marqueur candidate-delivered tient. Preuve : le protocole a ete horodate avant le run, le resultat est rendu (H1 non detectee) et #16320 est mergee. Une hypothese refutee est un resultat livre.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions