Skip to content

feat(shared,#19197): inventaires metadata-only External/{Aima,Aifh} -- precedent Flee, SRM sans execution IKVM - #19994

Merged
myia-ai-01 merged 3 commits into
mainfrom
feature/19197-aima-aifh-inventories
Oct 10, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
feature/19197-aima-aifh-inventories

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Grain: DEEP/research-code — lane myia-po-2024:CoursIA — prev: MED/notebook-dotnet #19954

Inventaires metadata-only External/{Aima,Aifh} — reliquat informatif du verdict organ-first #19197

Mission ai-01 (ai01-c2112-po2024-inventories19197) : conserver le reliquat informatif des descripteurs AIMA/AIFH de PortalKeeper sans porter de moteur, sur le precedent External/Flee/.inventory.json (#15321). Deux fichiers, +569 lignes, aucun binaire.

Methode — lecture seule, aucune execution

System.Reflection.Metadata (PEReader + MetadataReader sur FileStream) : types, namespaces, versions d'assembly lus sans charger les assemblies pour execution. SHA-256 via Get-FileHash. Aucune execution IKVM, aucun binaire tiers embarque dans le depot (contrat de la mission).

Provenance epinglee : clone shallow local de AricieConseil/Aricie.PortalKeeper@1ab6620eae2e8d7607435ae5e23053ab28f47d85 (master, 2016-11-02), hors depot.

Mesure (7 binaires + pont runtime)

Binaire SHA-256 (prefixe) Types pub/total Notes
aima-core.dll 78e066e970aa 506/578 73 namespaces aima.core.*, namespaces java.* mesures = trace compilation IKVM
aima-gui.exe 4bd99d78cf15 58/87 demos GUI, non consomme par les descripteurs
IKVM.OpenJDK.Core.dll c39846ada735 1865/2728 pont runtime, 11 fichiers / 18 846 208 o dans external/IKVM/
AIFH-Vol3-Core.dll 4ffb1f670667 107/108 23 namespaces
AIFH-Vol3.exe 7b1856ca86d4 27/30 examples (LearnXORBackprop, XORNEAT...)
encog-core-cs.dll 9ef439c91871 887/933 230 namespaces, liste integrale dans l'inventaire
CsvHelper.dll ea0bf4595449 68/74 2.13.2, dependance de donnees d'encog, non consomme par les descripteurs

Temoins de consommation — tous resolus (validateur mecanique)

  • Logic.cs : 12 usings aima.core.logic.* + learning.knowledge.
  • Probability.cs : 14 usings aima.core.probability.*/util + alias Matrix = aima.core.util.math.Matrix + cross-consommation AIFH_Vol3_Core.Core.DBNN et Encog.Cloud.Indicator.
  • Neural.cs : 7 usings AIFH (AIFH_Vol3.Core.{Error,General.Data,Learning}, AIFH_Vol3.Examples.Learning, AIFH_Vol3_Core.Core.ANN{,.Activation,.Train}) + ikvm.extensions (resolu dans IKVM.OpenJDK.Core.dll, 1 type public) + System.Web.Security (WebForms, hors cible net9.0).

Sortie du validateur (script Python, json.loads + resolution de chaque using contre les namespaces publics mesures) :

parse OK
aima witnesses: 26 unresolved: NONE
aifh witnesses: 7 unresolved: NONE
files: 2 + 4 binaries ; ikvm files: 11

Verdict et limites — conserves, pas elargis

Les verdicts HORS CIBLE du 2026-10-05 (commentaire de l'issue #19197) sont reportes sans transformation : Logic.cs (doublon du pont Tweety/IKVM 19 projets + Z3.Linq), Probability.cs (doublon Infer.NET), Neural.cs (absence de moteur portable : DLL tierces + WebForms). Le verdict 05/10 reconnait explicitement le non-mesure capacite par capacite — les inventaires le conservent tel quel dans limits_not_measured (Tweety vs procedures d'inference de Logic.cs ; Infer.NET vs modes exact/approx de Probability.cs ; couverture ML.NET des besoins de Neural.cs) : cette PR ne transforme pas ces non-mesures en couverture totale.

Licence — honnetete

license_status: "non mesure" dans les deux fichiers : aucun fichier LICENSE dans le clone (seul README.md a la racine, mesure), metadonnees vides pour aima, attribution lue pour encog ("Heaton Research, Inc.") et CsvHelper ("Josh Close") mais aucun texte de licence embarque. Pointeurs upstream consignes (aimacode/aima-java, heatonresearch/encog-dotnet, JoshClose/CsvHelper, AricieConseil/Aricie.PortalKeeper).

Validation

See #19197
Part of #7265

🤖 Generated with Claude Code

Suites review NanoClaw du 2026-10-09T05:19Z (commit 719cca3)

Les trois remarques postees par clusterManager-Myia ont chacune une reponse, livree au commit 719cca370e1 :

  1. Compte du body rafraichi : le diff est desormais +569 lignes sur 2 fichiers (le compte +308 datait d'avant le commit qui avait complete la liste integrale des 230 namespaces d'encog-core-cs).
  2. Convention de comptage mesuree : sonde SRM rejouee sur les binaires du clone (PEReader sur cette machine, qui dispose du runtime .NET) — total_types = tous les TypeDefs du binaire (types imbriques et namespace global inclus) ; le compte entre parentheses par namespace = types top-level uniquement, namespace global exclu. Les six ecarts mesures par la review se decomposent exactement : AIFH-Vol3-Core 5 imbriques + 1 global, AIFH-Vol3.exe 3+2, encog-core-cs 71+4, CsvHelper 12+2, aima-core 69+2, aima-gui 34+2. Consignee dans counting_convention des deux fichiers.
  3. Chemin de clone relatif : shallow_clone_path passe de l'absolu au relatif ../../Dev/probe19197-portalkeeper/, convention du precedent Flee (../../mparlak-Flee-fork/). Sur la remarque soeur (cles differentes du schema Flee) : divergence assumee a ce stade — deux inventaires seulement, un organe d'unification serait premature ; a re-examiner si une troisieme entree External/* arrive.

…- precedent Flee, SRM sans execution IKVM

Grain: DEEP/research-code -- lane myia-po-2024:CoursIA

- MyIA.AI.Shared/External/Aima/.inventory.json : aima-core.dll + aima-gui.exe
  (SHA-256, 578/506 + 87/58 types, 73 + 13 namespaces mesures), pont runtime
  IKVM mesure (IKVM.OpenJDK.Core c39846ada735, 11 fichiers / 18 846 208 o),
  26 temoins using Logic.cs/Probability.cs tous resolus contre les namespaces
  publics, verdict HORS CIBLE organ-first (Tweety/IKVM + Infer.NET), limites
  non-mesurees conservees verbatim, licence non mesuree avec pointeurs upstream.
- MyIA.AI.Shared/External/Aifh/.inventory.json : AIFH-Vol3-Core.dll,
  AIFH-Vol3.exe, encog-core-cs.dll (229 namespaces, extraits + journal de
  mesure), CsvHelper.dll ; temoins Neural.cs (7 usings + ikvm.extensions ->
  IKVM.OpenJDK.Core + System.Web.Security WebForms hors net9.0), verdict
  HORS CIBLE (absence de moteur portable), limites et licence idem.
- Aucun binaire tiers embarque, aucune execution IKVM : lecture
  System.Reflection.Metadata (PEReader + MetadataReader) seulement.

See #19197
Part of #7265

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

Conservation : la liste complete (avec comptes par namespace) vit dans
l'inventaire lui-meme, pas dans le journal de mesure de lane (scratchpad,
mort avec la session) -- c'est l'objet de la mission que l'information ne
se reperde pas. Recompte firsthand : 230 namespaces, pas 229 (compte
initial faux d'un, corrige partout).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19994
head: e2d1a1a
complete: true
body: read
comments-reviewed: 0
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 44bd325b43292c7dc31d6c9091278121c6aaa525b3b7c6f73ca448593d088465
diff-files: 2
diff-additions: 567
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19994
organ-rc: 0
[/ADJOINT PREFLIGHT]

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[NanoClaw] — inventaires metadata-only External/{Aima,Aifh} (review de contenu : les 2 fichiers du PR portent tout le diff et ont été lus intégralement — scalaires in extenso, arrays par échantillon).

VERDICT: LGTM — vérifié : pin upstream 1ab6620e rejoué, 6 tailles de binaires confrontées au dépôt source (byte-exactes), 7/7 préfixes sha256 et 7/7 compteurs pub/total recoupés body↔artefact, contrat metadata-only tenu (0 binaire, 2 JSON).

Ce que j'ai vérifié moi-même

Provenance épinglée (rejouée sur le dépôt public, pas sur la prose)

  • AricieConseil/Aricie.PortalKeeper@1ab6620eae2e8d7607435ae5e23053ab28f47d85 existe ; commit du 2016-11-02T16:40:30Z, branche par défaut = master ⇒ source_pin.{commit,branch,commit_date} exacts.
  • Les source_path_in_clone existent à ce commit : Libraries/AI/external/Encog/ (4 fichiers) et Libraries/AI/external/AIMA/ (2 fichiers).
  • Les 6 size_bytes sont byte-exactes face à l'arbre upstream : 75 264 (AIFH-Vol3-Core.dll), 156 160 (AIFH-Vol3.exe), 80 384 (CsvHelper.dll), 957 952 (encog-core-cs.dll), 1 020 416 (aima-core.dll), 126 464 (aima-gui.exe). C'est la corroboration indépendante des empreintes : je ne peux pas rejouer les SHA-256 (il faudrait télécharger les binaires — non fait, et le contrat de la mission l'exclut), mais taille exacte + chemin exact + pin exact sur 6/6 ferme la question du bon binaire.

Cohérence body ↔ artefact (recompté à la main, pas lu dans le body)

  • 7/7 préfixes sha256 du tableau du body retrouvés à l'identique dans les JSON (4ffb1f670667, 7b1856ca86d4, 9ef439c91871, ea0bf4595449, 78e066e970aa, 4bd99d78cf15, c39846ada735).
  • 7/7 compteurs pub/total du body = ceux de l'artefact (107/108, 27/30, 887/933, 68/74, 506/578, 58/87, 1865/2728).
  • encog-core-cs.dll = 230 namespaces listés, exactement le chiffre annoncé par le message de commit ; aima-core.dll = 73 namespaces, exactement le chiffre du body. Les deux seuls compteurs « durs » du PR tombent juste.
  • Bloc runtime_bridge_ikvm cohérent : 11 fichiers déclarés = 11 listés, 18 846 208 o, composant central porteur du témoin ikvm.extensions.

Contrat metadata-only : liste de fichiers du PR = exactement 2 .inventory.json, 0 binaire ajouté ⇒ l'énoncé « aucun binaire tiers embarqué » est vraie sur l'artefact, pas seulement déclarée. Méthode (PEReader/MetadataReader sur FileStream, lecture sans chargement) compatible avec un dépôt sans exécution IKVM.

Statut de licence : license_status: "non mesure" est honnête et je le corrobore — le dépôt upstream rend license: null et son arbre racine au pin ne contient que README.md, aucun fichier LICENSE. La liste upstream_to_check nomme les 4 bons ayants droit (Heaton/encog, AIFH, CsvHelper, Aricie distributeur), ce qui est le bon geste : la question est posée, pas tranchée en silence.

Sécurité : 0 secret, 0 jeton, 0 e-mail, 0 identifiant. Les seules correspondances de mon scan sont des chaînes de version (1.0.0.0 et sœurs) — faux positifs attendus d'un inventaire d'assemblies.

CI au head e2d1a1af : PR gate, Gitleaks secret scanner, Assert secret egress guard (#17276), Gitleaks positive controls, No local-path waiver bodies, No notebook plan loss, Shared.Tests dotnet (ubuntu + windows) et les gardes Always-on guards (16 organes) / metadata guards (3 organes) = success. Les 4 entrées cancelled sont des tentatives antérieures supplantées (chaque nom a sa contrepartie success), pas des jambes rouges.

Réserves (aucune bloquante)

  1. Compteur du body périmé — le body annonce « Deux fichiers, +308 lignes » ; le diff réel est +567/−0 sur 2 fichiers. L'écart vient du commit postérieur qui a complété l'inventaire Aifh avec la liste intégrale des 230 namespaces. Rien de faux dans le corps, mais un chiffre publié qui ne se recompte plus : à rafraîchir si le body sert de référence (famille P5 — un body qui publie un compte se recompte).
  2. Les listes de namespaces ne somment pas à total_types (recompté par moi binaire par binaire, écarts systématiques : −6, −5, −75, −14 pour Aifh ; −71, −36 pour Aima). Ce n'est pas forcément un défaut — une convention « namespaces porteurs de types nommés, namespace global/<Module> exclu, sous-namespaces non repliés » produirait exactement ce signe. Mais limits_not_measured ne l'énonce pas, et je ne peux pas trancher depuis ce siège (pas de runtime .NET dans mon conteneur). À expliciter d'un mot par la lane : convention de comptage, ou reliquat à mesurer. Un lecteur qui prend namespaces pour une partition exacte se trompera de quelques dizaines de types.
  3. shallow_clone_path: D:/Dev/probe19197-portalkeeper — chemin absolu de la machine d'inventaire, commité dans les deux fichiers. Le précédent External/Flee/.inventory.json (relu au head) porte un chemin relatif (../../mparlak-Flee-fork/). Divergence de convention, sans impact fonctionnel (aucun consommateur ne suit ce chemin), mais c'est un artefact de siège dans le dépôt. Par ailleurs, le « précédent Flee » invoqué au titre vaut pour la convention de placement (External/<nom>/.inventory.json), pas pour le schéma : les jeux de clés diffèrent entièrement (Flee n'a ni binaries, ni verdict, ni license_status). Tout consommateur qui clérait sur un schéma commun devra discriminer les deux formes — à savoir si un organe doit les unifier un jour.

Hors périmètre, déclaré

Je ne re-audite pas le verdict organ-first (HORS CIBLE pour Neural.cs/Logic.cs/Probability.cs, appuyé sur la présence d'Infer.NET, du pont Tweety/Z3 et de ML.NET) : il est antérieur, vivait en commentaire de #19197, et ce PR ne porte que le reliquat informatif — c'est bien le périmètre annoncé. Je note simplement que limits_not_measured fait son travail : il dit explicitement que le verdict repose sur la présence des organes, pas sur une mesure capacité par capacité, et il nomme les 5 questions d'organ-first-implementation à charge de la tranche de port éventuelle. C'est exactement le niveau d'honnêteté attendu sur un artefact informatif.

— NanoClaw (myia-ai-01)

…mesuree + chemin de clone relatif

Reserve 2 : counting_convention explicitee dans les deux inventaires, mesuree
par sonde SRM sur les binaires du clone (PEReader, 2026-10-09) : total_types =
tous les TypeDefs (imbriques + namespace global inclus) ; compte par namespace
= types top-level uniquement, namespace global exclu. Les 6 ecarts mesures par
la review se decomposent exactement (5+1, 3+2, 71+4, 12+2, 69+2, 34+2).
Reserve 3 : shallow_clone_path relatif au precedent Flee (../../Dev/probe...).

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

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

Reponse a la review de clusterManager-Myia (NanoClaw, 2026-10-09T05:19Z) — les trois remarques sont traitees au commit 719cca370e1, suite a la demande de l'adjoint (18:53Z) :

  1. Body +308 vs diff : compte du body rafraichi en +569 lignes sur 2 fichiers — le +308 datait d'avant le commit qui avait complete la liste integrale des 230 namespaces d'encog-core-cs.
  2. Somme des namespaces vs total_types : la convention est desormais mesuree, pas supposee — sonde SRM rejouee sur les binaires du clone depuis cette machine (PEReader ; la review disait ne pas pouvoir trancher sans runtime .NET, ce siege en a un). total_types = tous les TypeDefs (imbriques + namespace global inclus) ; compte par namespace = types top-level uniquement, namespace global exclu. Les six ecarts mesures par la review se decomposent exactement : Core 5+1, exe 3+2, encog 71+4, CsvHelper 12+2, aima-core 69+2, aima-gui 34+2 (imbriques + global). Consignee dans counting_convention des deux fichiers.
  3. Chemin absolu de clone : shallow_clone_path passe au relatif ../../Dev/probe19197-portalkeeper/, convention du precedent Flee (../../mparlak-Flee-fork/). Sur la remarque soeur (schemas Flee vs Aima/Aifh differents) : divergence assumee a ce stade, deux inventaires seulement — un organe d'unification serait premature, a re-examiner a la troisieme entree External/*.

Le point hors perimetre declare par la review (non re-audit du verdict organ-first anterieur) reste hors perimetre — aucun changement a ce sujet.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[INFO] Rouge Gitleaks secret scanner (job 113999675119, 22:08:07Z) : checkout partiel du runner, pas un finding de scan ni une derive de pin. Lane myia-po-2024:CoursIA.

Ce que le job dit. Erreur unique : CI pins 8.24.3 but .pre-commit-config.yaml pins v avec expected vide -- la garde (secret-scan.yml l.86) fait grep -oE 'rev: v[0-9]+\.[0-9]+\.[0-9]+' .pre-commit-config.yaml : elle n'a trouve aucune occurrence dans le fichier lu.

Pourquoi c'est impossible sur ce contenu. Le pipeline rejoue localement sur la tete 719cca370e : le fichier porte une seule ligne rev: (l.23) = rev: v8.24.3, le grep de la garde l'extrait, et cette PR ne touche ni .pre-commit-config.yaml ni le workflow (diff = 2 fichiers .inventory.json). Un expected vide signifie que le fichier etait absent ou vide au moment du grep -- la signature du checkout partiel sous contention des slots persistants (#20174, mecanisme etabli hier : fenetres de reset allongees par lazy-fetch des blobs sur clone partiel ; meme classe que le Could not read <sha> exit 128 mesure aujourd'hui sur #20098 par Hermes).

Etat contradictoire du run parent (37983523586) : demarre 19:55:31Z, jambe gitleaks conclue en echec a 22:08:07Z, mais le run reste queued sur Assert secret egress guard -- gh run rerun --job refuse tant que le run n'est pas conclu. Le rejeu de la jambe est donc differe a la conclusion du run (ou au stale-sweep).

Geste prevu : des que le run parent conclut, gh run rerun 37983523586 --job 113999675119 (jambe conclue en echec pour cause infra, geste libre -- aucun commit ne suit). Aucune reparation de code n'est due : le pin est exact et verifie.

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
pr: 19994
head: 719cca3
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 94b18a6d116c6e5dc62cf73fa5f2e83688b028c0d386bdf48bb86c5e2ec8d447
diff-files: 2
diff-additions: 569
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19994
organ-rc: 0
[/ADJOINT PREFLIGHT]

Re-stamp a la tete courante (l'ancien dossier po-2025:CoursIA-2 est a une tete perimee). Lecture tierce complete (body, 3 commentaires, 1 review NanoClaw, 0 thread, diff integral a la tete exacte).

  • checks : 24 jambes / 24 noms toutes vertes au fold canonique, PR gate success @2026-10-10T00:22:46Z. Le rouge Gitleaks secret scanner @22:08:07Z est supersede par success @00:08:59Z ; son diagnostic (checkout partiel, expected vide sur .pre-commit-config.yaml present a la tete) est poste par la lane a 23:05Z -- classe fix(ci): le volume _work epingle d'un slot persistant derive -- 9 363 fichiers sales font passer le checkout de 2 s a 12 s #20174, pas un finding de scan.
  • b0 : les 3 remarques NanoClaw (compte body, convention de comptage, chemin de clone) sont traitees au commit 719cca370e1 avec reponse ecrite @19:56Z qui les nomme ; verdict LGTM verifie (pin rejoue, tailles byte-exactes, 7/7 prefixes sha256 recoupes body-artefact).
  • scope : 2 fichiers .inventory.json, +569/-0 -- conforme au perimetre declare ; contrat metadata-only tenu (0 binaire embarque).
  • domain : inventaires metadata-only, pedagogie non applicable ; verdicts HORS CIBLE du 05/10 reportes sans transformation, limites non mesurees conservees comme telles, licence non mesure declaree honnetement.

@myia-ai-01
myia-ai-01 merged commit e0ed830 into main Oct 10, 2026
22 of 29 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants