✔ normal movement is accepted without signal (368.7657ms)
✔ player character walk and sprint limits are accepted (370.3389ms)
✔ player character impossible displacement remains observe-only (386.5749ms)
✔ jump and falling context do not create fly signal (306.5162ms)
✔ unsupported persistent vertical hover creates observe-only fly signal (339.8871ms)
✔ impossible speed creates observation signal, never ban (329.4953ms)
✔ non-finite position is rejected safely (322.5103ms)
✔ action rate is distinct from service rate limit (330.7763ms)
✔ risk state accumulates without automatic ban (383.6543ms)
✔ profile exposes recent timeline and configured observe mode (298.8354ms)
✔ authorized teleport opens a bounded grace window (318.5372ms)
✔ reconnect resets movement baseline without accusation (348.6426ms)
[astra] Astra City backend sur http://127.0.0.1:52754 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ bootstrap HTTP fermé : secret non configuré → 403 pour un secret vide ou quelconque (164.4861ms)
✔ bootstrap HTTP fermé : le tout premier inscrit est un PLAYER, jamais un SUPER_ADMIN (141.9444ms)
[astra] Astra City backend sur http://127.0.0.1:52760 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ bootstrap HTTP : secret invalide → 403, aucun compte créé (114.2364ms)
✔ bootstrap HTTP : secret valide → SUPER_ADMIN ; inscription publique → PLAYER ; rejeu → 409 ; rate limit (389.2077ms)
[astra] Astra City backend sur http://127.0.0.1:52768 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52780 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-01 migration 011 non destructive ; libellé V2 conservé (461.3889ms)
✔ L5-02 métiers versionnés : enregistrement idempotent, exigences immuables, cycle de vie (1931.7663ms)
[astra] Astra City backend sur http://127.0.0.1:54447 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-03 éligibilité déterministe : NOT_ELIGIBLE (écart exact), NEARLY_ELIGIBLE, ELIGIBLE, porte de confiance (26458.6005ms)
[astra] Astra City backend sur http://127.0.0.1:53218 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-04 écarts et objectifs d’apprentissage, sans inscription automatique (7584.3672ms)
[astra] Astra City backend sur http://127.0.0.1:53230 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-05 Milo NON ÉLIGIBLE : candidature rejetée avec instantané, aucun emploi, poste intact (5619.2286ms)
[astra] Astra City backend sur http://127.0.0.1:49744 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-06 agent éligible : cycle complet de candidature, embauche, poste occupé, états séparés (5630.1514ms)
[astra] Astra City backend sur http://127.0.0.1:50151 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-07 idempotence : double candidature, double acceptation, double embauche, rejeu d’événement (5584.8657ms)
[astra] Astra City backend sur http://127.0.0.1:54572 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✖ L5-08 concurrence RÉELLE : deux processus acceptent le même poste, un seul emploi (9762.5228ms)
[astra] Astra City backend sur http://127.0.0.1:54578 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-09 garde-fous base : double occupation impossible, historique non supprimable et figé (6000.6217ms)
[astra] Astra City backend sur http://127.0.0.1:51038 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:51040 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-10 reprise après redémarrage : OFFERED puis ACCEPTED non finalisée, aucune double embauche (10593.9885ms)
[astra] Astra City backend sur http://127.0.0.1:51043 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-11 autorisations : propriétaire, administrateur, exception auditée, aucune route « force job » (1826.0044ms)
[astra] Astra City backend sur http://127.0.0.1:51045 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-12 expérience : mission réelle réussie → WorkExperienceEvent avec preuve, rejouer ne double rien (7298.6491ms)
[astra] Astra City backend sur http://127.0.0.1:52366 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:62579 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-13 panne fournisseur ou mission non pertinente : aucune expérience, aucune pénalité de carrière (31962.6247ms)
[astra] Astra City backend sur http://127.0.0.1:62593 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-14 aperçu de promotion : NOT_READY avec écarts explicites, rien n’est appliqué (7805.0052ms)
[astra] Astra City backend sur http://127.0.0.1:62610 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L5-15 Mission Control : aperçu carrière non décisionnel, routage V2 identique (5900.4942ms)
✔ L5-16 compatibilité : agent historique sans emploi, libellé V2 affiché, carrière explicable (1347.8994ms)
ℹ Error: Test "L5-08 concurrence RÉELLE : deux processus acceptent le même poste, un seul emploi" at astra\test\career.test.js:216:1 generated asynchronous activity after the test ended. This activity created the error "SyntaxError: Unexpected end of JSON input" and would have caused the test to fail, but instead triggered an uncaughtException event.
[astra] Astra City backend sur http://127.0.0.1:52759 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ les secrets sont chiffrés (AES-GCM) et infalsifiables (25.759ms)
✔ mots de passe hachés (scrypt) (314.9001ms)
✔ inscription, connexion, rôles et session (698.1751ms)
✔ mission refusée sans droit d’accès (EntitlementService) (125.415ms)
✔ ticket launcher : échange sans mot de passe, usage unique, expiration et isolation du compte (255.9212ms)
✔ machine à états des agents (65.4044ms)
✔ bac à sable des outils : pas de secrets, pas de sortie du dépôt (8.5986ms)
✔ temps réel : authentification obligatoire et snapshot (134.2505ms)
✔ audit : une référence non consultée est signalée, une lecture réelle est vérifiée (112.8297ms)
✔ audit : formats de référence avec crochets et lignes isolées (114.8156ms)
✖ Practice et Exam : même résultat depuis la racine, depuis astra/ et depuis un répertoire étranger (378.7806ms)
✔ Exam : le moteur d’examen n’utilise plus de chemin relatif au répertoire courant (1.6206ms)
[astra] Astra City backend sur http://127.0.0.1:52757 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✖ synthetic complex decomposition executes children through the production lifecycle (18941.9625ms)
[astra] Astra City backend sur http://127.0.0.1:52764 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
✔ 0. un verdict de recette n'est jamais perdu, jamais inventé (8.8964ms)
✔ A. seules les commandes autorisées sont exécutables (3.2246ms)
✔ B. les commandes sont extraites des critères du plan (0.7206ms)
✔ C. les tests dérivés ciblent les fichiers réellement présents (11.1308ms)
[astra] Astra City backend sur http://127.0.0.1:52798 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
[astra] Astra City backend sur http://127.0.0.1:52800 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
✔ D. le cycle complet produit un vrai commit, de vrais tests et une recette persistée (6678.0883ms)
[astra] Astra City backend sur http://127.0.0.1:52807 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
[astra] Astra City backend sur http://127.0.0.1:52817 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
[astra] Astra City backend sur http://127.0.0.1:52823 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
✔ E. reprendre après recette ne refait ni écriture, ni test, ni recette (754.1558ms)
✔ F. la base refuse une recette dont le relecteur est le développeur (1504.3354ms)
✔ G. un plan figé est relu tel quel (1356.0014ms)
✔ H. sans job à recetter → BLOCKED tracé, jamais un PASS fabriqué (1808.8191ms)
✔ I. le relecteur provisionné est distinct, sans droit d'écriture, et hors routage (1682.5449ms)
[astra] Astra City backend sur http://127.0.0.1:61453 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
[astra] Astra City backend sur http://127.0.0.1:61457 (espace de travail des agents : C:\Users\jerom\AppData\Local\Temp\astra-devchain-KAyevx\ws)
✔ J. un test en échec interdit le commit — la preuve figée ne ment jamais (7230.0978ms)
✔ L. un plan sans critères d'acceptation ne rend pas la chaîne aveugle (1472.2355ms)
✔ K. la mission décomposée traverse la chaîne autonome sans passer par le rapport (5313.4815ms)
[astra] Astra City backend sur http://127.0.0.1:52767 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52779 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52789 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52795 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52799 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52804 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52816 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52824 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52831 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52838 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:61389 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:61452 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:61459 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:65325 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:61370 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:54445 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:54448 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:53205 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:53210 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:53216 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L2-01 migration 008 non destructive (V2 + lot 1 intacts) (363.4542ms)
✔ L2-02 Course Pack : chargement et empreinte SHA-256 déterministe (74.209ms)
✖ L2-03 validation stricte du manifeste et du contenu (données non fiables) (161.349ms)
✔ L2-04 registre : enregistrement idempotent, conflit de contenu, activation et types non exécutables (1850.6355ms)
✔ L2-05 immuabilité d’une version publiée (1652.3806ms)
✔ L2-06 une inscription reste sur sa version même si une nouvelle version est activée (2315.3833ms)
✔ L2-07 inscription : idempotente, propriété, prérequis (1850.63ms)
✔ L2-08 séparation étudiant / professeur / correcteur (1742.6466ms)
✔ L2-09 machine à états : transitions validées, persistées, journalisées (2226.164ms)
✔ L2-10 formation complète : artefacts hashés, points de reprise, aucune compétence ni certification (2110.4519ms)
✔ L2-11 panne fournisseur : état bloqué, codes distingués, bon acteur, rien de perdu (13374.5518ms)
✔ L2-12 reprise au bon point : aucun travail perdu, aucune activité réexécutée (3894.1999ms)
✔ L2-13 idempotence : double démarrage, double reprise, rejeu d’événement (1593.4343ms)
✔ L2-14 budget pédagogique : paliers 70/85/95, pause propre, artefacts conservés (1709.6474ms)
[astra] Astra City backend sur http://127.0.0.1:53217 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:53219 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L2-15 persistance après redémarrage : pause propre, reprise sans recommencer (1754.6695ms)
[astra] Astra City backend sur http://127.0.0.1:53222 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L2-16 API : cours, inscriptions, formation, propriété, registre réservé aux admins (1909.3358ms)
✔ L2-17 Mission Control inchangé ; aucune compétence modifiée par l’Université (1335.9536ms)
[astra] Astra City backend sur http://127.0.0.1:52750 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ A. une lecture réelle crée une preuve vérifiée, avec provenance complète (114.0071ms)
✔ B. un identifiant de preuve se résout vers l’observation persistée exacte (9.4084ms)
✔ C. un identifiant de preuve fabriqué échoue (2.3373ms)
✔ D. une référence chemin:ligne fabriquée échoue toujours (2.1624ms)
✔ E. un fichier qui existe mais n’a jamais été observé ne devient PAS vérifié (1.7492ms)
✔ I. une empreinte divergente échoue (le fichier a changé après l’observation) (29.5674ms)
✔ K. une citation par identifiant ne fait pas planter l’audit (pas de nom de fichier) (2.9401ms)
✔ L. une preuve héritée reste résoluble en chemin:ligne (forme historique) (1.8793ms)
✔ G. une reprise (point de contrôle) conserve l’identité des preuves (2.681ms)
✔ H. une preuve ne traverse pas une tâche non autorisée (1.5368ms)
✔ F. la preuve héritée de RECONNAISSANCE est utilisable par PLAN (1.4266ms)
✔ J. les garanties anti-hallucination existantes restent intactes (1.6627ms)
✔ persistance : une preuve est écrite en base, cloisonnée par mission, et relisible (73.2763ms)
[astra] Astra City backend sur http://127.0.0.1:52755 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52792 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT3-14 gouvernance désactivée (défaut) : la mission tourne comme en V2, sans trace de pool (5158.9071ms)
[astra] Astra City backend sur http://127.0.0.1:52797 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT3-15 gouvernance active sans worker : la mission est BLOQUÉE avec le motif, jamais exécutée (2077.8633ms)
✔ LOT3-16 gouvernance active avec un worker : runtime substitué, place réservée puis rendue (3907.8515ms)
✔ C-00 deux budgets distincts, centralisés (1171.7609ms)
✔ C-01 PRACTICE : tsc hors budget → aucune note, aucune progression, soumission conservée ; reprise → vraie note (6280.2083ms)
✔ C-02 PRACTICE : une vraie erreur TypeScript reste un échec de l’étudiant (discriminant) (2971.6877ms)
✔ C-03 EXAM : tsc hors budget → pas de FAILED, pas de tentative consommée, pas de délai ; reprise → PASSED (17988.122ms)
✔ C-04 EXAM : une vraie erreur TypeScript donne FAILED et déclenche le délai (règles existantes) (7023.9781ms)
✔ C-05 redémarrage après blocage : reprise sur une nouvelle instance, invariants 1/1/1 (4984.9815ms)
node:internal/modules/esm/load:193
    throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
          ^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
    at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:193:11)
    at defaultLoadSync (node:internal/modules/esm/load:146:3)
    at #loadAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:802:12)
    at #loadSync (node:internal/modules/esm/loader:834:53)
    at ModuleLoader.load (node:internal/modules/esm/loader:783:26)
    at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:494:31)
    at #getOrCreateModuleJobAfterResolve (node:internal/modules/esm/loader:560:36)
    at afterResolve (node:internal/modules/esm/loader:607:52)
    at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:613:12)
    at ModuleJob.syncLink (node:internal/modules/esm/module_job:163:33) {
  code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v24.19.0
✖ C-06 crash réel (SIGKILL) pendant la notation Practice : reprise, une seule évaluation, une seule progression (975.1816ms)
✔ C-07 le code de l’étudiant garde son propre budget : boucle infinie = échec imputable à la solution (5744.8732ms)
✖ C:\Astra\worktrees\public-beta-readiness\astra\test\grading-timeout.test.js (2.7954ms)
✔ URI : aller-retour site/room/row/rack/node (6.4538ms)
✔ URI : un caractèrepiège ne peut pas créer de segment (0.6109ms)
✔ masquage : MAC et IP ne sortent jamais en clair (1.0618ms)
✔ états : une sonde réussie achève la découverte (0.5014ms)
✔ dénylist : les noms de secrets sont refusés (3.8487ms)
✔ parseBlocks : un champ va dans le bloc englobant, pas le précédent (1.8832ms)
✔ parseKeyValue : accepte « : » et « = », normalise les clés (0.8561ms)
✔ bytesOf : unités SI et binaires, jamais de valeur inventée (1.3007ms)
✔ normalisation : aucun composant sans fait réel (22.8516ms)
✔ normalisation : la RAM n'est instanciée que si les DIMM sont énumérés (1.8666ms)
✔ normalisation : un secret dans les faits est écrasé avant écriture (0.9683ms)
✔ normalisation : les adresses sont masquées dans les faits ET dans les composants (3.3606ms)
✔ masquage : idempotent, un fait déjà masqué ne perd pas sa famille (0.273ms)
✔ assertNoSecrets refuse un inventaire qui fuit un secret (0.5181ms)
✔ presentNode : lit une ligne SQL et renvoie UNKNOWN plutôt que de combler (0.6358ms)
✔ registre : les quatre sources sont enregistrées, aucune n'est active par défaut (0.3784ms)
✔ canUse refuse une source non configurée plutôt que d'inventer (0.4377ms)
✔ service : la disposition physique est créée une seule fois (464.9097ms)
✔ service : seul un administrateur peut brancher une source (463.8116ms)
✖ service : découverte réelle de la machine locale (488.4555ms)
✔ service : aucun secret n'atteint la base ni l'API (415.6324ms)
✔ service : un redécouverte ne duplique ni composants ni incidents (430.5766ms)
✔ service : un hôte injoignable passe OFFLINE, jamais ONLINE (1100.2744ms)
✔ service : l'emplacement physique est unique, le même nom reste libre ailleurs (432.6407ms)
✖ service : l'arborescence destinée à Unreal est cohérente (428.3995ms)
✖ datacenter : le snapshot ne mélange pas les machines de deux comptes (466.4161ms)
✖ service : les événements sont émis pour les changements réels (428.7285ms)
✖ seuils : une métrique jamais lue reste NON MESURÉE, jamais saine (445.4135ms)
✖ seuils : franchir puis rejoindre les bornes ouvre et referme un incident unique (417.9ms)
✖ seuils : un avertissement qui devient critique est suivi, pas planté (403.1984ms)
✖ seuils : deux métriques hors bornes = deux incidents, pas un seul partagé (752.5707ms)
✖ seuils : un seuil de composant n'emprunte pas la mesure de l'hôte (424.4788ms)
✖ collecte périodique : la source est sondée, et sa cadence est réellement respectée (411.1747ms)
✔ collecte périodique : une source devenu impossible à sonder est ignorée, pas déclarée morte (452.7782ms)
✔ collecte périodique : une source configurée qui ne répond plus est un échec, pas un silence (456.7887ms)
✔ émissions : sans wattmétrie, le total reste inconnu — jamais zéro (537.7294ms)
✖ émissions : la puissance nominale n'est jamais comptée comme une consommation (431.952ms)
✖ émissions : le facteur réseau, s'il est déclaré, s'applique aux watts mesurés (486.7031ms)
✖ seuils : retirer un seuil emporte l'incident qu'il avait ouvert (478.7792ms)
✖ seuils : un seuil ne peut pas viser le composant d'un autre hôte (409.935ms)
✖ seuils : un joueur ne pose pas de seuil, et un seuil incohérent est refusé (409.2163ms)
✔ plateforme : la charge macOS est lue en virgule décimale, pas écrasée à 0 (2.0424ms)
✔ plateforme : un sysctl absent ne fabrique pas de charge (0.3553ms)
✖ intégration : la machine réelle expose un inventaire non vide et sourcé (90.0134ms)
[astra] Astra City backend sur http://127.0.0.1:52761 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ les doublures d’escalade sont classées « local » (coût nul) (212.2222ms)
✔ unité en échec de capacité → UNE escalade locale, qui réussit (28220.4432ms)
✔ si le modèle escaladé échoue aussi : la mission reste BLOQUÉE, sans reboucle (3107.1622ms)
✔ la base refuse une escalade cloud, une rétrogradation, ou deux escalades (5.6411ms)
✔ le fournisseur Ollama demande une libération rapide du modèle (keep_alive) (7.6387ms)
✔ l'arbitrage de résidence libère le modèle principal avant l'escalade (4.6154ms)
✔ le contexte local est bornable : sur un gros modèle, 32768 tue la machine (1.2901ms)
✔ router preview local ne consomme rien et ne crée ni mission ni donnée (7.5162ms)
✔ versioning, sélection déterministe et questions confidentielles (38.246ms)
✔ échec puis réussite déterministe et certification idempotente (13662.603ms)
✔ provider bloqué, autorité et révocation restent explicites (44.395ms)
✔ fresh database reaches latest worker_stats schema (362.4735ms)
✔ legacy worker_stats drift is repaired without losing rows (248.2344ms)
[astra] Astra City backend sur http://127.0.0.1:52826 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT1-01 migration 013 strictement additive : `agents` et les métiers V2 sont intacts (352.2704ms)
✔ LOT1-02 migration 013 rejouable deux fois sans effet de bord (365.839ms)
✔ LOT1-03 couche canonique : l’état stocké V2 devient l’état d’affichage, et inversement (3.3671ms)
✔ LOT1-04 `isAssignable` inchangé : seul AVAILABLE est assignable, les états ajoutés ne le sont pas (2.2617ms)
✔ LOT1-05 catégories d’état et dénombrement cohérents (1.1402ms)
✔ LOT1-06 catalogue : 9 départements, tous peuplés et avec un responsable, tous les bâtiments et métiers existent (1.5731ms)
✔ LOT1-07 honnêteté des outils : la partition disponible / en attente est exacte et sans trou (1.5094ms)
✔ LOT1-08 les compétences d’un rôle viennent du métier et existent toutes au catalogue (1.4857ms)
✔ LOT1-09 provision idempotente : un agent fondateur par rôle, un seul ensemble, aucun doublon (2681.1093ms)
✔ LOT1-10 honnêteté : un agent provisionné n’est ni exécutable ni disponible (3024.3317ms)
✔ LOT1-11 performance : aucun taux inventé, null tant qu’aucune mission n’est mesurée (2676.0173ms)
✔ LOT1-12 historique d’états en ajout seul, alimenté par le bus d’événements (709.2979ms)
✔ LOT1-13 rattachement des agents V2 par libellé de département, sans les modifier (845.113ms)
✔ LOT1-14 statisticien : les faits par département, jamais de causalité affirmée (3179.1104ms)
[astra] Astra City backend sur http://127.0.0.1:61387 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT1-15 API : organisation, provision administrateur, refus d’une écriture non autorisée (4103.6307ms)
✔ LOT1-16 API : le journal d’organisation est consultable, croît et reste immuable (3184.5554ms)
[astra] Astra City backend sur http://127.0.0.1:52765 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52778 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ physical arrival v1: validation, reconnect and exactly-once duplicate handling (1600.7689ms)
✔ headless simulation arrives deterministically for all supported activity destinations (1915.6381ms)
[astra] Astra City backend sur http://127.0.0.1:52770 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52782 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ BRIDGE-01 mission EXPERT sans runtime EXPERT : bloquée directement, ni enfant ni unité, aucun travail exécuté (1619.0385ms)
[astra] Astra City backend sur http://127.0.0.1:65321 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✖ BRIDGE-02 mission COMPLEX, runtime SIMPLE seul : PLAN jamais direct, unités bornées routées normalement, assemblage déterministe (21573.8966ms)
[astra] Astra City backend sur http://127.0.0.1:49743 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ BRIDGE-03 retry d’une mission bloquée : les tâches DONE sont intactes, aucun doublon d’étape, d’unité ni d’assemblage (23557.5398ms)
✔ BRIDGE-04 reprise : PLAN dont toutes les unités sont DONE mais non assemblé (arrêt entre deux écritures) → assemblé une fois, rien de dupliqué (24348.3456ms)
✔ TS-101 seed immuable et hidden tests séparés (2.9775ms)
✔ sandbox AST bloque les primitives dangereuses (15.0251ms)
✔ sandbox hostile : filesystem, environnement, réseau, child-process, boucle et sortie (1030.5172ms)
✔ soumission persistée avant évaluation, tsc réel, hidden non transmis, progression idempotente (4755.3231ms)
✔ erreur TypeScript et hidden test échoué restent des résultats pédagogiques (4713.3278ms)
✔ P-01 codes réseau et délais (objets d’erreur) (9.5475ms)
✔ P-02 « fetch failed » : la cause décide (2.8273ms)
[astra] Astra City backend sur http://127.0.0.1:52772 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ P-03 erreurs RÉELLES de Node : port fermé, connexion coupée, port interdit (136.636ms)
✔ P-04 messages fournisseurs / CLI, et vraie erreur d’exécution (3.5725ms)
[astra] Astra City backend sur http://127.0.0.1:52784 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ P-05 vrai fournisseur Ollama vers un port fermé, via le Provider Gateway : NETWORK_ERROR (1376.9769ms)
[astra] Astra City backend sur http://127.0.0.1:52802 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ P-06 MISSION + panne réseau réelle → PROVIDER_BLOCKED NETWORK_ERROR, aucun échec de l’agent (7002.2659ms)
✔ P-07 UNIVERSITÉ + même panne réseau réelle → PROVIDER_BLOCKED NETWORK_ERROR, aucun échec de l’étudiant (2277.9704ms)
[astra] Astra City backend sur http://127.0.0.1:52785 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ A. « Node.js » (et autres technologies avec un point) ne deviennent jamais des fichiers (289.9479ms)
✔ 21. timeout du relecteur → PROVIDER_BLOCKED (jamais FAILED ni ESCALATION_REQUIRED) (3230.4051ms)
✔ 22. l’échec du relecteur n’affecte pas l’exécutant (stats, tentatives, statut, escalade) (418.4999ms)
✔ 24. le MissionArtifact existe avant le lancement de la relecture (2.2149ms)
✔ 23 + 25. reprise depuis AFTER_AUDIT : aucun nouvel appel d’exécution, RESUMING → REVIEW → COMPLETED (1507.3501ms)
✔ B + C. SESSION_LIMIT de l’EXÉCUTANT → PROVIDER_BLOCKED (agent bloqué) puis reprise de son travail (3752.1895ms)
✔ D. une correction ne redéclenche aucun appel d’outil (aucun outil fourni) (3513.8733ms)
✔ E. le budget arrête proprement l’exploration et un livrable est quand même produit (4997.8536ms)
✔ MCP : le serveur MCP refuse les appels au-delà de 95 % du budget (828.012ms)
✔ F. exclusions : validation/, journaux, Saved/, caches, CLAUDE.md sont hors analyse (734.8538ms)
✔ I. le contrat de preuve appliqué par checkDeliverable est écrit dans le prompt (2681.0613ms)
✔ G + H. un livrable tronqué est refusé ; cycle borné sans boucle (3410.4111ms)
[astra] Astra City backend sur http://127.0.0.1:52787 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ classification heuristique et niveaux de modèles (172.4108ms)
✔ mission complexe BLOQUÉE s’il n’existe qu’un petit modèle (pas de repli) (206.7032ms)
✔ échec après révision → escalade vers un runtime supérieur avec dossier de passation (6018.5297ms)
✔ Agent et runtime découplés : Nova change de moteur sans perdre son identité (15.4297ms)
✔ la qualification est bornée par le parc local (un EXPERT non servi ne rend pas la mission inroutable) (202.7794ms)
[astra] Astra City backend sur http://127.0.0.1:52808 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT3-01 migration 017 additive : agents et agent_runtimes intouchés (306.8065ms)
✔ LOT3-02 la base refuse une récurrence sans date de départ (672.3718ms)
✔ LOT3-03 LIVE est refusé bruyamment, jamais exécuté en PAPER (725.8057ms)
✔ LOT3-04 la file sert la priorité la plus haute, puis la plus ancienne (685.7298ms)
✔ LOT3-05 le plafond de concurrence retient les missions et l’attente est tracée (1056.1744ms)
✔ LOT3-06 reap libère la place d’une mission terminée et la file avance (689.6143ms)
✔ LOT3-07 le graphe de tâches respecte les dépendances et l’ordre (690.3526ms)
✔ LOT3-08 une dépendance inexistante bloque la tâche au lieu de la laisser filer (699.4434ms)
✔ LOT3-09 une mission planifiée attend son heure, puis devient éligible (702.8992ms)
✔ LOT3-10 la récurrence quotidienne et hebdomadaire avance d’un pas, l’inconnue est refusée (696.152ms)
[astra] Astra City backend sur http://127.0.0.1:52818 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT3-11 API : réglages réservés à l’administrateur, file et timeline lisibles (2090.9138ms)
[astra] Astra City backend sur http://127.0.0.1:52825 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT3-12 POST /api/missions répond sans attendre la fin du pipeline (1868.8644ms)
✔ LOT3-13 après close, aucune boucle de file ne touche la base (4709.3227ms)
✔ capability sensible : refus et événement serveur (322.2959ms)
✔ launch ticket à usage unique (333.1904ms)
✔ 01 capability ADMIN refusée (339.0954ms)
✔ 02 capability INFRA_WRITE refusée (328.3614ms)
✔ 03 capability FINANCE_EXECUTE refusée (0.5356ms)
✔ 04 événement capability contient l’acteur (351.7495ms)
✔ 05 launch ticket valide (330.3836ms)
✔ 06 launch ticket one-shot (341.4115ms)
✔ 07 launch ticket cross-user refusé (354.9421ms)
✔ 08 launch ticket expiré refusé (693.1333ms)
✔ 09 rate limit déclenche un événement (345.1076ms)
✔ 10 utilisateur public ne contient pas le hash (1.1781ms)
✔ 11 hasRole ne promeut jamais un payload inconnu (1.2524ms)
✔ 12 rôle client non utilisé par publicUser (0.3226ms)
✔ 13 session inconnue refusée (323.8611ms)
✔ 14 session logout révoque le token (607.8894ms)
✔ 15 event security ne stocke pas le token (384.2145ms)
✔ 16 event permission denied est journalisé (326.831ms)
✔ 17 bootstrap SUPER_ADMIN initial contrôlé par secret (387.2991ms)
✔ 18 bootstrap replay refusé (443.0232ms)
✔ 19 bootstrap secret invalide refusé (324.8368ms)
✔ 20 inscription publique reste PLAYER (377.16ms)
✔ 21 RBAC fail closed pour utilisateur absent ou rôle inconnu (0.6534ms)
✔ 22 bootstrap concurrent : exactement un succès (546.4467ms)
✔ HTTP réel en mémoire : PLAYER refuse les security events (15.6121ms)
✔ HTTP réel en mémoire : ADMIN accède aux security events (2.8467ms)
✔ HTTP réel en mémoire : token invalide refuse une route protégée (8.4491ms)
✔ IDOR agent cross-user refusé et réponse uniforme (33.744ms)
✔ IDOR mission cross-user refusé (6.1418ms)
[astra] Astra City backend sur http://127.0.0.1:52794 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:52830 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:61391 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ annulation d’une mission bloquée puis fermeture immédiate : pas d’écriture tardive, agent libéré (13780.8115ms)
[astra] Astra City backend sur http://127.0.0.1:54443 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ ordre de fermeture : le poll Velko en vol et la libération d’agent se terminent AVANT la fermeture de la base (11232.0893ms)
[astra] Astra City backend sur http://127.0.0.1:54444 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
[astra] Astra City backend sur http://127.0.0.1:54449 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ L1-01 migration 007 non destructive (759.3292ms)
✔ L1-02 registre idempotent, ajout de compétence sans code (1182.4012ms)
✔ L1-03 alias (1519.3406ms)
✔ L1-04 normalisation des besoins de mission (1340.8605ms)
✔ L1-05 toute progression passe par un événement (même transaction) (1214.1631ms)
✔ L1-06 registre en ajout seul, contrainte previous + delta = new (1133.0393ms)
✔ L1-07 sans source ni preuve : aucune progression (1069.5158ms)
✔ L1-08 rendements décroissants et somme bornée (2533.7521ms)
✔ L1-09 plafond de contenu (1116.2147ms)
✔ L1-10 explication reconstruit exactement le score (1157.8407ms)
✔ L1-11 confiance selon le type de preuve, jamais abaissée par un gain (1319.5061ms)
✔ L1-12 score ≠ certification (1131.1177ms)
✔ L1-13 changer le runtime ne modifie ni score, ni confiance, ni événements (1261.8311ms)
✖ L1-14 backfill déterministe, idempotent, non destructif, conforme à la table (1286.6945ms)
✔ L1-15 Mission Control inchangé : candidats identiques avant / après backfill (1859.7964ms)
✔ L1-16 seuils de niveau lus depuis les réglages (1109.1449ms)
✔ L1-17 API : lecture, explication, import audité, pas d’écriture directe (1829.2495ms)
✖ C:\Astra\worktrees\public-beta-readiness\astra\test\skills.test.js (9.0212ms)
✔ Velko Gateway UNCONFIGURED ne démarre aucun poll (44.4835ms)
✔ Velko Gateway CONFIGURED poll et persiste les événements (40.7173ms)
✔ Velko Gateway ne lance jamais deux polls simultanés (108.5827ms)
✔ close pendant une requête draine le poll sans écrire après fermeture (31.7356ms)
✔ échec HTTP : le cycle suivant reste possible (46.3126ms)
[astra] Astra City backend sur http://127.0.0.1:61454 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT2-01 migration 015 strictement additive : `agents` et `agent_runtimes` intacts (824.0468ms)
✔ LOT2-02 migration 015 rejouable deux fois sans effet de bord (505.3193ms)
✔ LOT2-03 découverte : un worker par modèle réellement listé, et rien d’autre (841.9033ms)
✔ LOT2-04 découverte : une connexion morte ne laisse aucun worker en ligne (700.8173ms)
✔ LOT2-05 honnêteté : ce que le fournisseur ne publie pas reste inconnu, pas deviné (706.3947ms)
✔ LOT2-06 sélection : le bon worker pour le niveau demandé, avec la justification (646.3259ms)
✔ LOT2-07 honnêteté : aucun worker ne convient → refus motivé, jamais un choix par défaut (616.8108ms)
✔ LOT2-08 mémoire : un modèle plus grand que la RAM disponible est refusé, pas espéré (917.7576ms)
✔ LOT2-09 mémoire non mesurée : le worker reste sélectionnable, mais la garantie est absente (623.7559ms)
✔ LOT2-10 mode LOCAL_ONLY : le fournisseur distant est structurellement interdit (664.588ms)
✔ LOT2-11 outils et contexte exigés : un modèle qui ne sait pas est écarté avec son motif (634.4533ms)
✔ LOT2-12 réservation : la place est réellement occupée, puis libérée (682.9248ms)
✔ LOT2-13 réservation expirée : la place revient, sinon la capacité fuit (637.1248ms)
✔ LOT2-14 performance : les statistiques viennent des mesures, jamais de constantes (686.401ms)
[astra] Astra City backend sur http://127.0.0.1:61460 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT2-26 les mesures du sélecteur ne se déclarent pas par l’API (1731.1722ms)
[astra] Astra City backend sur http://127.0.0.1:65327 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT2-27 réserver engage une capacité réelle : c’est une action d’administrateur (1410.7865ms)
[astra] Astra City backend sur http://127.0.0.1:53206 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT2-28 la fenêtre de détention est bornée des deux côtés (1477.8842ms)
✔ LOT2-21 un appel réel alimente les statistiques du worker (664.0416ms)
✔ LOT2-22 un appel en échec compte comme un échec, avec sa durée, sans jeton (652.5378ms)
✔ LOT2-23 un observateur en panne n’empêche pas l’agent de travailler (630.4502ms)
✔ LOT2-24 un appel sur une worker jamais découvert n’invente rien (921.1341ms)
✔ LOT2-25 observer ne change ni le routage ni la place réservée (639.9372ms)
✔ LOT2-15 le choix est guidé par la fiabilité et la latence mesurées (650.9712ms)
✔ LOT2-15b les mesures décident entre deux workers équivalents, et le choix suit les mesures (691.616ms)
✔ LOT2-16 quota : épuisé, le sélecteur refuse même un worker parfait (632.3653ms)
✔ LOT2-17 le pool ne remplace pas `agent_runtimes` : les deux coexistent (659.697ms)
[astra] Astra City backend sur http://127.0.0.1:53213 (espace de travail des agents : C:\Astra\worktrees\public-beta-readiness)
✔ LOT2-18 API : découverte, évaluation, sélection et refus, avec les bons droits (1370.8551ms)
✔ LOT2-19 API : le snapshot WebSocket porte le pool et les faits mesurés (1517.8955ms)
✔ LOT2-20 le lecteur de ressources échoue proprement quand la mesure est impossible (10.0191ms)
✔ trusted registration is idempotent and player updates use metres (3.4793ms)
✔ same-world and freshness gates fail closed (1.5274ms)
✔ transition ticket is session, destination and one-use bound (1.3339ms)
✔ expired and wrong-destination tickets are denied (0.4405ms)
✔ old world instance is rejected and human roles are not authority (0.3044ms)
ℹ tests 309
ℹ suites 0
ℹ pass 284
ℹ fail 25
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 137938.1627

✖ failing tests:

test at astra\test\career.test.js:216:1
✖ L5-08 concurrence RÉELLE : deux processus acceptent le même poste, un seul emploi (9762.5228ms)
  SyntaxError: Unexpected end of JSON input
      at JSON.parse (<anonymous>)
      at ChildProcess.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/career.test.js:236:231)
      at ChildProcess.emit (node:events:509:28)
      at ChildProcess._handle.onexit (node:internal/child_process:295:12)

test at astra\test\cwd.test.js:46:1
✖ Practice et Exam : même résultat depuis la racine, depuis astra/ et depuis un répertoire étranger (378.7806ms)
  AssertionError [ERR_ASSERTION]: node:internal/modules/esm/load:193
      throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed, schemes);
            ^
  
  Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
      at throwIfUnsupportedURLScheme (node:internal/modules/esm/load:193:11)
      at defaultLoadSync (node:internal/modules/esm/load:146:3)
      at #loadAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:802:12)
      at #loadSync (node:internal/modules/esm/loader:834:53)
      at ModuleLoader.load (node:internal/modules/esm/loader:783:26)
      at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:494:31)
      at #getOrCreateModuleJobAfterResolve (node:internal/modules/esm/loader:560:36)
      at afterResolve (node:internal/modules/esm/loader:607:52)
      at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:613:12)
      at node:internal/modules/esm/loader:632:32 {
    code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
  }
  
  Node.js v24.19.0
  
  
  1 !== 0
  
      at file:///C:/Astra/worktrees/public-beta-readiness/astra/test/cwd.test.js:49:12
      at Array.map (<anonymous>)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/cwd.test.js:47:57)
      at Test.runInAsyncScope (node:async_hooks:227:14)
      at Test.run (node:internal/test_runner/test:1382:25)
      at Test.start (node:internal/test_runner/test:1242:17)
      at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 1,
    expected: 0,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\decomposition.test.js:47:1
✖ synthetic complex decomposition executes children through the production lifecycle (18941.9625ms)
  Error: timeout: ASSIGNED
      at Timeout.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/decomposition.test.js:42:79)
      at listOnTimeout (node:internal/timers:635:17)
      at process.processTimers (node:internal/timers:571:7)

test at astra\test\education.test.js:99:1
✖ L2-03 validation stricte du manifeste et du contenu (données non fiables) (161.349ms)
  Error: EPERM: operation not permitted, symlink 'C:\etc\hosts' -> 'C:\Users\jerom\AppData\Local\Temp\astra-edu-kvvHpy\bad-lien\modules\m1\lesson.md'
      at Object.symlinkSync (node:fs:1938:11)
      at file:///C:/Astra/worktrees/public-beta-readiness/astra/test/education.test.js:106:76
      at bad (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/education.test.js:100:70)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/education.test.js:106:3)
      at Test.runInAsyncScope (node:async_hooks:227:14)
      at Test.run (node:internal/test_runner/test:1382:25)
      at Test.processPendingSubtests (node:internal/test_runner/test:960:18)
      at Test.postRun (node:internal/test_runner/test:1522:19)
      at Test.run (node:internal/test_runner/test:1447:12)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    errno: -4048,
    code: 'EPERM',
    syscall: 'symlink',
    path: 'C:\\etc\\hosts',
    dest: 'C:\\Users\\jerom\\AppData\\Local\\Temp\\astra-edu-kvvHpy\\bad-lien\\modules\\m1\\lesson.md'
  }

test at astra\test\grading-timeout.test.js:172:1
✖ C-06 crash réel (SIGKILL) pendant la notation Practice : reprise, une seule évaluation, une seule progression (975.1816ms)
  AssertionError [ERR_ASSERTION]: interrompue pendant la notation
  + actual - expected
  
  + 'SUBMITTED'
  - 'EVALUATING'
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/grading-timeout.test.js:191:10)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 'SUBMITTED',
    expected: 'EVALUATING',
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\grading-timeout.test.js:22:1
✖ C:\Astra\worktrees\public-beta-readiness\astra\test\grading-timeout.test.js (2.7954ms)
  Error: EPERM, Permission denied: \\?\C:\Users\jerom\AppData\Local\Temp\astra-grading-x6qO5C '\\?\C:\Users\jerom\AppData\Local\Temp\astra-grading-x6qO5C'
      at Object.rmSync (node:fs:1283:18)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/grading-timeout.test.js:22:16)
      at TestHook.runInAsyncScope (node:async_hooks:227:14)
      at TestHook.run (node:internal/test_runner/test:1382:25)
      at TestHook.run (node:internal/test_runner/test:1726:18)
      at TestHook.run (node:internal/util:581:20)
      at Test.runHook (node:internal/test_runner/test:1269:20)
      at after (node:internal/test_runner/test:1322:20)
      at Test.run (node:internal/test_runner/test:1408:13)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
    errno: 1,
    code: 'EPERM',
    path: '\\\\?\\C:\\Users\\jerom\\AppData\\Local\\Temp\\astra-grading-x6qO5C',
    syscall: 'rm'
  }

test at astra\test\infra.test.js:254:1
✖ service : découverte réelle de la machine locale (488.4555ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
  + actual - expected
  
  + undefined
  - 'ONLINE'
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:260:12)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: undefined,
    expected: 'ONLINE',
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\infra.test.js:336:1
✖ service : l'arborescence destinée à Unreal est cohérente (428.3995ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
  
  0 !== 1
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:346:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: 0,
    expected: 1,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\infra.test.js:355:1
✖ datacenter : le snapshot ne mélange pas les machines de deux comptes (466.4161ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected
  
  + []
  - [
  -   'infra://astra/server-room/row-a/rack-a02/player-node'
  - ]
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:370:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [],
    expected: [ 'infra://astra/server-room/row-a/rack-a02/player-node' ],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }

test at astra\test\infra.test.js:378:1
✖ service : les événements sont émis pour les changements réels (428.7285ms)
  AssertionError [ERR_ASSERTION]: infra.connection_registered
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:386:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: false,
    expected: true,
    operator: '==',
    diff: 'simple'
  }

test at astra\test\infra.test.js:392:1
✖ seuils : une métrique jamais lue reste NON MESURÉE, jamais saine (445.4135ms)
  Error: Hôte introuvable.
      at Object.declareThreshold (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:801:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:400:13)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:410:1
✖ seuils : franchir puis rejoindre les bornes ouvre et referme un incident unique (417.9ms)
  Error: Hôte introuvable.
      at Object.telemetry (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:764:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:415:33)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:438:1
✖ seuils : un avertissement qui devient critique est suivi, pas planté (403.1984ms)
  Error: Hôte introuvable.
      at Object.telemetry (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:764:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:443:26)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:464:1
✖ seuils : deux métriques hors bornes = deux incidents, pas un seul partagé (752.5707ms)
  Error: Hôte introuvable.
      at Object.telemetry (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:764:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:469:23)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:489:1
✖ seuils : un seuil de composant n'emprunte pas la mesure de l'hôte (424.4788ms)
  Error: Hôte introuvable.
      at Object.components (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:743:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:494:26)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:514:1
✖ collecte périodique : la source est sondée, et sa cadence est réellement respectée (411.1747ms)
  AssertionError [ERR_ASSERTION]: la machine locale répond
  
  'FAILED' !== 'OK'
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:529:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: 'FAILED',
    expected: 'OK',
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\infra.test.js:603:1
✖ émissions : la puissance nominale n'est jamais comptée comme une consommation (431.952ms)
  Error: Hôte introuvable.
      at Object.components (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:743:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:611:30)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:626:1
✖ émissions : le facteur réseau, s'il est déclaré, s'applique aux watts mesurés (486.7031ms)
  TypeError: Provided value cannot be bound to SQLite parameter 1.
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:632:8)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    code: 'ERR_INVALID_ARG_TYPE'
  }

test at astra\test\infra.test.js:646:1
✖ seuils : retirer un seuil emporte l'incident qu'il avait ouvert (478.7792ms)
  Error: Hôte introuvable.
      at Object.telemetry (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:764:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:651:26)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:663:1
✖ seuils : un seuil ne peut pas viser le composant d'un autre hôte (409.935ms)
  Error: Hôte introuvable.
      at Object.components (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:743:21)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:669:27)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    status: 404
  }

test at astra\test\infra.test.js:685:1
✖ seuils : un joueur ne pose pas de seuil, et un seuil incohérent est refusé (409.2163ms)
  AssertionError [ERR_ASSERTION]: un seuil sans borne est refusé
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:694:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: Error: Hôte introuvable.
        at Object.declareThreshold (file:///C:/Astra/worktrees/public-beta-readiness/astra/src/infra/inventory.js:801:21)
        at assert.throws.h.infra.declareThreshold.metric (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:694:33)
        at getActual (node:assert:611:5)
        at strict.throws (node:assert:759:24)
        at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:694:12)
        at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
        at async Test.run (node:internal/test_runner/test:1389:7)
        at async Test.processPendingSubtests (node:internal/test_runner/test:960:7),
    operator: 'throws',
    diff: 'simple'
  }

test at astra\test\infra.test.js:733:1
✖ intégration : la machine réelle expose un inventaire non vide et sourcé (90.0134ms)
  AssertionError [ERR_ASSERTION]: Plateforme non supportée : win32
  
  false !== true
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/infra.test.js:737:10)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.run (node:internal/test_runner/test:1389:7)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: false,
    code: 'ERR_ASSERTION',
    actual: false,
    expected: true,
    operator: 'strictEqual',
    diff: 'simple'
  }

test at astra\test\plan-bridge.test.js:77:1
✖ BRIDGE-02 mission COMPLEX, runtime SIMPLE seul : PLAN jamais direct, unités bornées routées normalement, assemblage déterministe (21573.8966ms)
  Error: timeout: ASSIGNED
      at Timeout.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/plan-bridge.test.js:55:79)
      at listOnTimeout (node:internal/timers:635:17)
      at process.processTimers (node:internal/timers:571:7)

test at astra\test\skills.test.js:245:1
✖ L1-14 backfill déterministe, idempotent, non destructif, conforme à la table (1286.6945ms)
  AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
  + actual - expected
  
    [
      'AI Engineer',
  -   'ASTRA-BUILDER',
      'Backend Engineer',
      'Chief Orchestrator',
      'Data Analyst',
      'DevOps Engineer',
      'Documentation Agent',
  
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/skills.test.js:279:10)
      at Test.runInAsyncScope (node:async_hooks:227:14)
      at Test.run (node:internal/test_runner/test:1382:25)
      at async Test.processPendingSubtests (node:internal/test_runner/test:960:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: [ 'AI Engineer', 'Backend Engineer', 'Chief Orchestrator', 'Data Analyst', 'DevOps Engineer', 'Documentation Agent', 'Frontend Engineer', 'Fullstack Engineer', 'Incident Commander', 'Market Data Analyst', 'Mission Planner', 'Professor Software Engineering', 'QA Coordinator', 'QA Engineer', 'SRE', 'Security Analyst', 'Senior Backend Engineer', 'Unreal Engineer', 'Web Researcher' ],
    expected: [ 'AI Engineer', 'ASTRA-BUILDER', 'Backend Engineer', 'Chief Orchestrator', 'Data Analyst', 'DevOps Engineer', 'Documentation Agent', 'Frontend Engineer', 'Fullstack Engineer', 'Incident Commander', 'Market Data Analyst', 'Mission Planner', 'Professor Software Engineering', 'QA Coordinator', 'QA Engineer', 'SRE', 'Security Analyst', 'Senior Backend Engineer', 'Unreal Engineer', 'Web Researcher' ],
    operator: 'deepStrictEqual',
    diff: 'simple'
  }

test at astra\test\skills.test.js:358:1
✖ C:\Astra\worktrees\public-beta-readiness\astra\test\skills.test.js (9.0212ms)
  Error: EPERM, Permission denied: \\?\C:\Users\jerom\AppData\Local\Temp\astra-skills-ENzINb '\\?\C:\Users\jerom\AppData\Local\Temp\astra-skills-ENzINb'
      at Object.rmSync (node:fs:1283:18)
      at TestContext.<anonymous> (file:///C:/Astra/worktrees/public-beta-readiness/astra/test/skills.test.js:358:16)
      at TestHook.runInAsyncScope (node:async_hooks:227:14)
      at TestHook.run (node:internal/test_runner/test:1382:25)
      at TestHook.run (node:internal/test_runner/test:1726:18)
      at TestHook.run (node:internal/util:581:20)
      at Test.runHook (node:internal/test_runner/test:1269:20)
      at after (node:internal/test_runner/test:1322:20)
      at Test.run (node:internal/test_runner/test:1408:13)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
    errno: 1,
    code: 'EPERM',
    path: '\\\\?\\C:\\Users\\jerom\\AppData\\Local\\Temp\\astra-skills-ENzINb',
    syscall: 'rm'
  }
