ZIP Space Deployer commited on
Commit
d7f2c54
·
1 Parent(s): 0c75d5e

Deploy ZIP — 2026-10-10 18:01 UTC

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. AUTHORING.md +48 -8
  2. QA.md +113 -72
  3. README.md +2 -2
  4. RELEASE-2.28.md +67 -0
  5. RELEASE-MANIFEST.sha256 +511 -0
  6. answer_contract.py +8 -0
  7. answer_dossier.py +50 -0
  8. answer_focus.py +11 -12
  9. app.py +30 -6
  10. dialogue_contract.py +31 -1
  11. evaluation-reports/2.27/adapted-fixtures.log +19 -0
  12. evaluation-reports/2.27/focused-development.log +22 -0
  13. evaluation-reports/2.27/python-development.log +415 -0
  14. evaluation-reports/2.28/VALIDATION.txt +38 -0
  15. evaluation-reports/2.28/benchmark-unavailable.json +11 -0
  16. evaluation-reports/2.28/contract-fixtures.json +5 -0
  17. evaluation-reports/2.28/fourth-pack.log +3 -0
  18. evaluation-reports/2.28/pool.log +8 -0
  19. evaluation-reports/2.28/review-fixtures.json +5 -0
  20. evaluation-reports/2.28/story.log +1 -0
  21. evaluation-reports/2.28/ui-results.txt +7 -0
  22. evaluation-reports/2.28/unit-verified.log +226 -0
  23. examples/quiet-archive/README.md +29 -0
  24. examples/quiet-archive/compiled/public.js +1 -0
  25. examples/quiet-archive/compiled/story.en.json +1 -0
  26. examples/quiet-archive/compiled/story.fr.json +1 -0
  27. examples/quiet-archive/decisions/choices.json +54 -0
  28. examples/quiet-archive/decisions/narrator-actions.json +21 -0
  29. examples/quiet-archive/manifest.json +47 -0
  30. examples/quiet-archive/mechanics/challenges.json +4 -0
  31. examples/quiet-archive/narration/dialogue.json +311 -0
  32. examples/quiet-archive/narration/responses.json +132 -0
  33. examples/quiet-archive/narration/voice.json +4 -0
  34. examples/quiet-archive/presentation/cover.svg +1 -0
  35. examples/quiet-archive/presentation/messages.en.json +1 -0
  36. examples/quiet-archive/presentation/ui.json +98 -0
  37. examples/quiet-archive/tests/answer_contract.json +138 -0
  38. examples/quiet-archive/tests/authored_responses.json +1 -0
  39. examples/quiet-archive/tests/conversation_cases.json +1 -0
  40. examples/quiet-archive/tests/intent_cases.json +1 -0
  41. examples/quiet-archive/tests/narrator-cases.json +1 -0
  42. examples/quiet-archive/tests/response_selection.json +1 -0
  43. examples/quiet-archive/text/story.en.json +17 -0
  44. examples/quiet-archive/text/story.ink +60 -0
  45. examples/quiet-archive/world/canon.json +126 -0
  46. examples/quiet-archive/world/characters.json +55 -0
  47. examples/quiet-archive/world/notebook.json +35 -0
  48. examples/quiet-archive/world/scenes.en.json +27 -0
  49. examples/quiet-archive/world/scenes.fr.json +27 -0
  50. narration.py +2 -1
AUTHORING.md CHANGED
@@ -1,9 +1,10 @@
1
- # Écrire un pack histoire — contrat 2.27
2
 
3
  Un nouveau récit apporte ses passages, faits, personnages et réponses. Il ne
4
  doit pas ajouter de noms, de tests de phrases ou de transitions spécifiques
5
- dans le contrôleur Python. `stories/the-last-light` est un exemple complet
6
- et court. Ce guide est la référence actuelle ; les anciens contrats sont
 
7
  conservés dans `docs/history/`.
8
 
9
  ## 1. Séparer les responsabilités
@@ -91,6 +92,24 @@ FR/EN. Les conditions doivent être mutuellement exclusives. Décrire le présen
91
  sans effacer le passé : « la pompe fonctionne maintenant ; vous avez retiré
92
  l’obstruction ». Ne pas remettre une réparation terminée au programme.
93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  `source_sha256` et `translation_sha256` lient le canon aux textes Ink et anglais.
95
  Après modification de ces textes, relire leur cohérence avec le canon avant
96
  de recalculer les empreintes. Ne pas les actualiser seulement pour faire passer
@@ -103,6 +122,8 @@ portraits à `portrayal_requires`. Décrire tempérament, motivation, voix et
103
  limites d’interaction, sans biographie non établie. Les guides de scène
104
  déclarent les présences et les contacts à distance, avec canal et conditions.
105
  Connaître une personne ne la rend pas joignable ; une radio ne la téléporte pas.
 
 
106
 
107
  `narration/dialogue.json` contient un profil `narrator` et les profils des
108
  personnages. Les variantes de matériau (`beats`) dépendent de l’état, des
@@ -124,7 +145,11 @@ Le format courant de `responses.json` est `schema_version: 2`, avec `evidence`,
124
  les cartes de rappel du nouveau contrat.
125
 
126
  Le besoin est d’abord classé depuis la demande et le dernier échange, sans
127
- voir les faits ou réponses candidats. Les packs déclarent leurs capacités
 
 
 
 
128
  dans `needs`, sans fournir de liste de formulations à reconnaître.
129
 
130
  | Besoin | Contenu attendu |
@@ -220,6 +245,12 @@ Le contrôle de portée distingue :
220
  pendant qu’une génération tente de répondre entièrement.
221
  - `different` : ne pas publier ni réintroduire ce texte en repli factuel.
222
 
 
 
 
 
 
 
223
  `partial` contient deux gabarits FR/EN avec un seul `{answer}` et au plus
224
  25 mots chacun. Exemple : `{answer} Cela éclaire une partie de votre question,
225
  sans tout expliquer.` Le moteur ne transforme pas une sortie refusée en vérité.
@@ -228,17 +259,25 @@ avant publication.
228
 
229
  ## 7. Comprendre les limites de génération
230
 
231
- Une conversation autorise une génération. Une question factuelle exige une
232
- réponse directe sourcée. Un conseil séparé n’est proposé que pour une demande
 
 
 
 
 
 
233
  d’orientation compatible avec la position du lecteur. Le prompt vise 50 mots
234
  de réponse, 20 de conseil, 70 au total ; le parseur accepte au plus 80 au total
235
- et 30 pour le conseil. Un conseil mal formé peut être retiré ; la réponse
236
  restante passe encore tous les contrôles sémantiques.
237
 
238
  Les contrôles factuels, de divulgation, de langue, de rôles et de non-exécution
239
  restent nécessaires. Si la génération ou sa relecture échoue, le moteur utilise
240
  le rappel partiel précédemment validé, sinon le dialogue contextualisé du pack.
241
- Le budget de tour reste borné. Une panne complète du serveur ou du réseau ne
 
 
242
  peut pas produire une réponse distante : le navigateur conserve le contexte
243
  reçu puis récupère la session par lecture, sans rejouer l’action.
244
 
@@ -250,6 +289,7 @@ prouve pas que toute question libre a reçu une explication suffisante.
250
  ```bash
251
  node engine/compile.cjs --all
252
  python scripts/validate_stories.py
 
253
  python scripts/check_answer_contract.py --validate-only
254
  python -m unittest discover -s tests -p 'test_*.py'
255
  ```
 
1
+ # Écrire un pack histoire — contrat 2.28
2
 
3
  Un nouveau récit apporte ses passages, faits, personnages et réponses. Il ne
4
  doit pas ajouter de noms, de tests de phrases ou de transitions spécifiques
5
+ dans le contrôleur Python. `examples/quiet-archive` est un quatrième récit autonome, avec des faits nouveaux,
6
+ des limites de preuve et huit cas FR/EN ; `stories/the-last-light` reste un
7
+ exemple court parmi les trois récits installés. Ce guide est la référence actuelle ; les anciens contrats sont
8
  conservés dans `docs/history/`.
9
 
10
  ## 1. Séparer les responsabilités
 
92
  sans effacer le passé : « la pompe fonctionne maintenant ; vous avez retiré
93
  l’obstruction ». Ne pas remettre une réparation terminée au programme.
94
 
95
+ Chaque version peut déclarer `epistemic` (obligatoire dans nos nouveaux packs) :
96
+
97
+ ```json
98
+ {
99
+ "kind": "observation",
100
+ "limits": {
101
+ "fr": "Un sceau intact ne prouve pas que le contenu soit vrai.",
102
+ "en": "An intact seal does not prove the contents are true."
103
+ }
104
+ }
105
+ ```
106
+
107
+ Types : `identity`, `state`, `observation`, `testimony`, `intention`,
108
+ `mechanism`, `stakes`. Les limites appartiennent à l’auteur, pas au modèle.
109
+ Chaque variante temporelle redéfinit son contrat : une incertitude valable
110
+ avant une révélation ne doit pas contredire un événement désormais établi.
111
+ Les rappels incorporent les limites nécessaires à une réponse autonome.
112
+
113
  `source_sha256` et `translation_sha256` lient le canon aux textes Ink et anglais.
114
  Après modification de ces textes, relire leur cohérence avec le canon avant
115
  de recalculer les empreintes. Ne pas les actualiser seulement pour faire passer
 
122
  limites d’interaction, sans biographie non établie. Les guides de scène
123
  déclarent les présences et les contacts à distance, avec canal et conditions.
124
  Connaître une personne ne la rend pas joignable ; une radio ne la téléporte pas.
125
+ Demander son identité n’exige pas de la joindre. Le contrôle `contact_intent`
126
+ distingue une question à son sujet d’une demande de contact.
127
 
128
  `narration/dialogue.json` contient un profil `narrator` et les profils des
129
  personnages. Les variantes de matériau (`beats`) dépendent de l’état, des
 
145
  les cartes de rappel du nouveau contrat.
146
 
147
  Le besoin est d’abord classé depuis la demande et le dernier échange, sans
148
+ voir les faits ou réponses candidats. Les trois hypothèses principales ordonnent
149
+ la recherche ; elles n’excluent aucun fait public ou rappel éligible. Un
150
+ `answer_focus` incertain conserve des candidats, sans les autoriser à être
151
+ publiés. Seuls la visibilité et l’état décident de l’éligibilité.
152
+ Les packs déclarent leurs capacités
153
  dans `needs`, sans fournir de liste de formulations à reconnaître.
154
 
155
  | Besoin | Contenu attendu |
 
245
  pendant qu’une génération tente de répondre entièrement.
246
  - `different` : ne pas publier ni réintroduire ce texte en repli factuel.
247
 
248
+ Le contrôleur peut assembler deux ou trois textes éligibles sans suggestion,
249
+ puis contrôler la portée du texte complet. Deux réponses partielles ne sont
250
+ pas automatiquement une réponse complète. Le résultat est résolu à nouveau
251
+ depuis les IDs du pack, dans la langue demandée, avant publication. Aucun
252
+ texte fourni par le modèle ne peut être déguisé en réponse écrite du pack.
253
+
254
  `partial` contient deux gabarits FR/EN avec un seul `{answer}` et au plus
255
  25 mots chacun. Exemple : `{answer} Cela éclaire une partie de votre question,
256
  sans tout expliquer.` Le moteur ne transforme pas une sortie refusée en vérité.
 
259
 
260
  ## 7. Comprendre les limites de génération
261
 
262
+ Une conversation autorise une génération. `answer_dossier` regroupe la demande,
263
+ les hypothèses de besoin, jusqu’à huit faits publics prioritaires et leurs
264
+ limites, la réponse partielle disponible et les contrôles de portée. Le
265
+ catalogue complet reste disponible pendant la sélection. Le dossier ne crée
266
+ aucune vérité.
267
+
268
+ Une question factuelle exige une réponse directe sourcée, en un à trois
269
+ fragments `answer` pour des assertions indépendantes. Un conseil séparé n’est proposé que pour une demande
270
  d’orientation compatible avec la position du lecteur. Le prompt vise 50 mots
271
  de réponse, 20 de conseil, 70 au total ; le parseur accepte au plus 80 au total
272
+ et 30 pour le conseil. Un conseil mal formé ou un fragment factuel rejeté peut être retiré ; la réponse
273
  restante passe encore tous les contrôles sémantiques.
274
 
275
  Les contrôles factuels, de divulgation, de langue, de rôles et de non-exécution
276
  restent nécessaires. Si la génération ou sa relecture échoue, le moteur utilise
277
  le rappel partiel précédemment validé, sinon le dialogue contextualisé du pack.
278
+ Le budget partagé par défaut est de 25 secondes, avec au plus 10 secondes
279
+ pour la génération. Le rappel partiel est conservé dès son contrôle positif,
280
+ avant de rechercher un complément, pour survivre à un délai ou une panne. Une panne complète du serveur ou du réseau ne
281
  peut pas produire une réponse distante : le navigateur conserve le contexte
282
  reçu puis récupère la session par lecture, sans rejouer l’action.
283
 
 
289
  ```bash
290
  node engine/compile.cjs --all
291
  python scripts/validate_stories.py
292
+ python scripts/check_fourth_pack.py
293
  python scripts/check_answer_contract.py --validate-only
294
  python -m unittest discover -s tests -p 'test_*.py'
295
  ```
QA.md CHANGED
@@ -1,99 +1,140 @@
1
- # Recette 2.27
2
 
3
- Les résultats exécutés sont consignés dans
4
- `evaluation-reports/2.27/VALIDATION.txt`. Les rapports antérieurs mesurent
5
- leurs propres versions. Un test avec verdicts contrôlés prouve le comportement
6
- du moteur, pas l’exactitude sémantique de Kev ou Qwen.
7
 
8
  ## Validation locale
9
 
10
- Après installation des dépendances de développement du projet :
11
 
12
  ```bash
13
  node engine/compile.cjs --all
14
  python scripts/validate_stories.py
15
- python scripts/check_answer_contract.py --validate-only
16
- python -m unittest discover -s tests -p 'test_*.py' -v
 
 
17
  node tests/test_story.cjs
18
- node tests/test_western.cjs
19
  node tests/test_dom.cjs
20
  node tests/test_story_ui.cjs
21
  node tests/test_library_ui.cjs
22
  node tests/test_network_ui.cjs
 
23
  ```
24
 
25
- Avec Chromium installé et l’application démarrée localement, compléter par
26
- `node tests/test_browser.cjs` pour la mise en page réelle aux cinq largeurs.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
- Les tests 2.27 rejouent les formats observés lors de l’audit 2.26, utilisent
29
- les vrais états Ink et injectent les erreurs d’inférence. Ils vérifient :
30
- besoin distinct du sujet ; distinction cause/statut/orientation ; impossibilité
31
- de faire passer un portrait pour une preuve ; retrait d’un conseil sans
32
- contourner les relectures ; rappel partiel après panne ; exclusion d’un rappel
33
- rejeté ; état, journal et traduction conservés. Le quatrième pack de test et
34
- ses identifiants renommés vérifient l’absence de dépendance aux trois récits.
35
 
36
- ## Recette réelle après déploiement
37
 
38
- Vérifier `/api/health` : version **2.27.0**, modèle de décision et narrateur
39
- prêts. Utiliser de nouvelles parties. Les scripts créent leurs propres sessions.
40
 
41
  ```bash
42
- python scripts/check_conversations.py --url https://fffiloni-hero-game-julia.hf.space --expect-version 2.27.0 --cases tests/fixtures/regressions_v227.json --output regressions-live-2.27.json
43
- python scripts/check_conversations.py --url https://fffiloni-hero-game-julia.hf.space --expect-version 2.27.0 --cases tests/fixtures/answer_contract_v227.json --output contract-live-2.27.json
44
  ```
45
 
46
- Ajouter `--trust-env` si les proxies de l’environnement sont nécessaires.
47
- Le premier corpus rassemble les **105 tours antérieurs**, attentes inchangées.
48
- Le second ajoute **24 tours** sur besoin, preuve, risque, état et mécanisme,
49
- dont les quatre cas isolés dans le dernier audit. Ce sont des régressions
50
- connues, pas une mesure indépendante sur des formulations inédites.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
- Depuis le conteneur ou un environnement ayant accès au serveur System One :
 
53
 
54
  ```bash
55
- python scripts/check_answer_contract.py --url http://127.0.0.1:8080 --output selection-live-2.27.json
56
- python scripts/check_reviews.py --url http://127.0.0.1:8080 --cases tests/fixtures/dialogue_reviews_v226.json --output reviews-live-2.27.json
57
  ```
58
 
59
- Le premier isole les classificateurs de dialogue, besoin, fait et portée avec
60
- les mêmes fonctions de production. Il n’exécute ni action ni génération Qwen.
61
- Le second conserve les 49 réponses fixes antérieures pour mesurer séparément
62
- les faux rejets et les fausses acceptations du vérificateur.
63
-
64
- ## Lire le résultat, pas seulement le score
65
-
66
- Pour chaque tour, vérifier la question entière, les mots de la réponse, les
67
- faits réellement acquis et l’état avant/après. Une réponse vide, un blocage,
68
- une transition involontaire ou un indice caché divulgué est un échec. Une
69
- réponse hors sujet ou incomplète reste un défaut même si les contrôles passent.
70
-
71
- | Mesure | Ce qu’elle démontre |
72
- | --- | --- |
73
- | `response_delivered` | Une réponse a été livrée |
74
- | `answer_contract` | Besoin estimé, distribution et incertitude |
75
- | `answer_focus` | Sources sélectionnées dans l’état courant |
76
- | `response_selection.scope` | Portée estimée : complète, partielle ou différente |
77
- | `authored_response` | Texte exact du pack publié après sélection |
78
- | `factual_recovery` | Rappel pertinent partiel conservé après échec ; qualité dégradée |
79
- | `dialogue_recovery` | Repli contextualisé ; qualité à examiner |
80
- | Relectures de génération | Faits, divulgation, pertinence, rôles, langue et absence d’action |
81
-
82
- Relire en priorité : observation et déduction pour Ada/Mara ; sel et brume
83
- pour Iris ; but et préparatifs pour une demande d’orientation ; état du treuil
84
- et d’Elias après résolution ; contacts distants ; changement FR/EN.
85
-
86
- Ajouter ensuite des questions nouvelles écrites sans regarder les répliques
87
- du pack : composées, ambiguës, avec prémisse fausse, refus mêlé à une vraie
88
- question, demandes d’informations absentes. Les références de cartes et les
89
- sorties attendues ne doivent pas être ajoutées au moteur sous forme d’exceptions.
90
-
91
- Tester une panne réelle du narrateur et une coupure réseau côté navigateur.
92
- Le repli doit répondre sans changer Ink, la saisie rester disponible, la reprise
93
- se faire par GET et aucun POST, dé ou journal ne doit être doublé. En panne
94
- totale du serveur, le contexte conservé doit être signalé comme tel : ce n’est
95
- pas une nouvelle réponse enregistrée.
96
-
97
- La recette est acceptable lorsque les régressions et les nouvelles questions
98
- ont été relues, les résultats et délais sont consignés, et aucun défaut bloquant
99
- n’est observé. Un taux de réponses de 100 % ne vaut pas 100 % de pertinence.
 
1
+ # Recette 2.28
2
 
3
+ Les résultats réellement exécutés sont dans `evaluation-reports/2.28/VALIDATION.txt`.
4
+ Les anciens rapports mesurent leurs versions respectives. Un verdict contrôlé
5
+ vérifie le moteur ; il ne mesure pas la compréhension de Kev ou Qwen.
 
6
 
7
  ## Validation locale
8
 
9
+ Après installation des dépendances Python et `npm ci` :
10
 
11
  ```bash
12
  node engine/compile.cjs --all
13
  python scripts/validate_stories.py
14
+ python scripts/check_fourth_pack.py
15
+ python scripts/check_answer_contract.py --validate-only --output contract-fixtures.json
16
+ python scripts/check_reviews.py --validate-only --output review-fixtures.json
17
+ python -m unittest discover -s tests -p 'test_*.py'
18
  node tests/test_story.cjs
 
19
  node tests/test_dom.cjs
20
  node tests/test_story_ui.cjs
21
  node tests/test_library_ui.cjs
22
  node tests/test_network_ui.cjs
23
+ node tests/test_western.cjs
24
  ```
25
 
26
+ Exécuter `check_fourth_pack.py` seul, avant les autres suites : il installe
27
+ provisoirement l’exemple, valide ses huit cas avec Ink réel puis retire sa
28
+ copie. Il refuse un pack du même nom déjà installé. Les trois aventures
29
+ publiées restent les seules proposées par défaut. Les verdicts de sélection
30
+ dans cet essai sont contrôlés, pas des inférences réelles.
31
+
32
+ Les nouvelles régressions injectent un mauvais besoin, un focus à faible
33
+ marge, un premier candidat hors sujet, un délai pendant la recherche, une
34
+ panne du narrateur et une réponse composite partiellement fausse. Elles
35
+ vérifient les indices cachés, les variantes temporelles, le texte exact du
36
+ pack, la relecture d’un extrait conservé et l’absence de double transition.
37
+ Les tests de sessions simulent 150 cas avec trois sessions, puis leur libération.
38
+
39
+ `test_network_ui.cjs` vérifie six scénarios de coupure et resynchronisation
40
+ avec un DOM simulé. Une recette de mise en page dans Chromium reste distincte :
41
+ `node tests/test_browser.cjs`, application démarrée et navigateur installé.
42
+
43
+ ## Recette après déploiement
44
+
45
+ Vérifier `/api/health` : version **2.28.0**, modèles prêts. Puis :
46
+
47
+ ```bash
48
+ python scripts/check_conversations.py --url https://fffiloni-hero-game-julia.hf.space --expect-version 2.28.0 --cases tests/fixtures/conversations_v228.json --output conversations-live-2.28.json
49
+ ```
50
+
51
+ Ajouter `--trust-env` si un proxy est nécessaire. Le corpus contient **147 tours** :
52
+ 105 régressions, 24 cas de contrat, 12 questions de la dernière exploration et
53
+ 6 reprises ciblées. Ce sont désormais des cas connus ; ils ne constituent pas
54
+ une évaluation indépendante de généralisation.
55
+
56
+ L’outil garde au plus une session par récit, redémarre celle-ci entre les cas
57
+ et libère ses propres sessions à la fin via `DELETE /api/session`. Aucun token
58
+ n’est écrit dans le rapport. Sur un ancien serveur sans DELETE, la réutilisation
59
+ limite tout de même l’occupation. Ne pas lancer plusieurs audits en même temps.
60
 
61
+ Relire chaque réponse, indépendamment du score : demande entière, faits acquis,
62
+ langue, personnages, refus et conséquences. Classer conforme / partielle /
63
+ défectueuse. Un repli livré ne compte pas comme une réponse correcte à une
64
+ question qui reste sans réponse. Ajouter un lot de formulations inédites,
65
+ écrites sans consulter les répliques du pack, avant toute conclusion générale.
 
 
66
 
67
+ ## Calibrer le vérificateur séparément
68
 
69
+ Depuis un environnement ayant accès au vrai serveur de décision :
 
70
 
71
  ```bash
72
+ python scripts/check_answer_contract.py --url http://127.0.0.1:8080 --output selection-live-2.28.json
73
+ python scripts/check_reviews.py --url http://127.0.0.1:8080 --output reviews-live-2.28.json
74
  ```
75
 
76
+ Le premier isole dialogue, besoin, faits et portée. Le second utilise **73
77
+ réponses fixes** : les 49 antérieures plus 24 exemples et contre-exemples
78
+ FR/EN sur preuve, intention, identité et causalité. Mesurer séparément fausses
79
+ acceptations et faux rejets. Les étiquettes sont des jugements d’auteur, pas
80
+ des productions prétendument générées. Aucun seuil n’est abaissé dans 2.28.
81
+
82
+ ## Comparer les narrateurs à contexte identique
83
+
84
+ Utiliser des serveurs de validation privés, avec la même version de llama.cpp
85
+ que l’image livrée. Ne pas permuter le modèle d’un Space qui accueille des joueurs.
86
+ Conserver Kev, la quantification, le contexte, le matériel et les paramètres
87
+ d’échantillonnage ; tester successivement Qwen3-8B avec et sans raisonnement,
88
+ puis Qwen3-14B si la mémoire disponible permet son chargement. Un 14B qui ne
89
+ charge pas, dépasse le délai ou oblige à dégrader le contexte n’est pas un gain.
90
+
91
+ Exemple de démarrage du narrateur sur une machine de validation disposant de
92
+ `llama-server` et du modèle, sans autre narrateur sur ce port :
93
+
94
+ ```bash
95
+ llama-server -hf Qwen/Qwen3-8B-GGUF:Q4_K_M --host 127.0.0.1 --port 8081 --no-webui --threads 4 --threads-batch 4 --n-gpu-layers 99 -c 12288 -b 512 -ub 256 -np 1 --jinja --reasoning-format deepseek --reasoning-budget 512
96
+ ```
97
+
98
+ Le serveur Kev `/v1/systemone` doit aussi être prêt sur 8080. Dans un autre terminal :
99
+
100
+ ```bash
101
+ python scripts/benchmark_narrator.py --label qwen3-8b-thinking --reasoning-budget 512 --output benchmark-8b-thinking.json
102
+ python scripts/benchmark_narrator.py --label qwen3-8b-direct --reasoning-budget 0 --output benchmark-8b-direct.json
103
+ ```
104
 
105
+ Pour le 14B, arrêter le narrateur de validation, relancer la même commande avec
106
+ `Qwen/Qwen3-14B-GGUF:Q4_K_M`, puis :
107
 
108
  ```bash
109
+ python scripts/benchmark_narrator.py --label qwen3-14b-thinking --reasoning-budget 512 --output benchmark-14b-thinking.json
 
110
  ```
111
 
112
+ Les onze demandes reçoivent les mêmes faits publics choisis par l’auteur et les
113
+ mêmes états Ink. Cela isole la formulation ; ce n’est pas une mesure du routage.
114
+ Comparer `cases_sha256` et chaque `context_sha256`. Le serveur démarre avec
115
+ 512 tokens de raisonnement ; le cas direct le désactive par requête. L’outil
116
+ ne modifie aucun réglage du serveur. Il enregistre le modèle annoncé, les
117
+ réponses finales, les rejets, les délais et la consommation ; pas le raisonnement
118
+ interne. Son délai de génération expérimental est 25 s pour observer les écarts ;
119
+ la production plafonne la génération à 10 s et le tour à 25 s. Compter donc
120
+ aussi les réponses qui dépassent les 10 s de production.
121
+
122
+ Répéter chaque configuration trois fois, en conservant les sorties séparées,
123
+ puis relire les textes sans regarder le nom du modèle. Choisir selon pertinence,
124
+ cohérence, respect des limites et délai, pas selon la seule acceptation par Kev.
125
+ Rejouer ensuite les 147 tours sur le moteur complet avec la configuration retenue.
126
+
127
+ ## Critères de livraison validée en production
128
+
129
+ - Aucun tour vide, aucune attente sans issue tant que l’application répond.
130
+ - Aucune transition involontaire, aucun indice non acquis divulgué.
131
+ - Aucun rappel d’une tâche terminée comme restant à effectuer.
132
+ - Questions connues entièrement traitées ; réponses partielles comptées à part.
133
+ - Réponses naturelles valides acceptées ; inventions des contre-exemples rejetées.
134
+ - Reprise après coupure sans renvoi automatique ni double exécution.
135
+ - Latences et mémoire mesurées sur le matériel cible, y compris à froid.
136
+
137
+ La 2.28 conserve Qwen3-8B par défaut. Un changement de modèle doit être fondé
138
+ sur ces résultats. L’absence de serveur d’inférence dans l’environnement de
139
+ livraison est enregistrée dans `benchmark-unavailable.json` : ce fichier
140
+ n’est pas un benchmark réalisé.
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -24,7 +24,7 @@ tags:
24
 
25
  Un ami disparu, un cargo qui part à minuit et une enquête à mener à votre façon. Livre-jeu original en français et en anglais, quatre chapitres et cinq fins.
26
 
27
- **Version 2.27 : besoin séparé du sujet, réponses factuelles par état, repli partiel explicite et contrat réutilisable pour les packs.** Voir [RELEASE-2.27.md](RELEASE-2.27.md), [AUTHORING.md](AUTHORING.md) et [QA.md](QA.md). Les preuves locales sont dans `evaluation-reports/2.27/VALIDATION.txt` ; les nouveaux classements Kev/Qwen restent à mesurer après déploiement.
28
 
29
  ## Déployer sur le Space GPU actuel
30
 
@@ -75,7 +75,7 @@ Un contrôle distinct compare ensuite la réponse aux découvertes encore caché
75
 
76
  La pertinence utilise une seule question NOUL ciblée avec la demande réelle, la réponse et un historique court. Le classement amont du type d’échange ne dicte plus ce qui constitue une réponse pertinente. Le seuil existant de 0,80 est conservé ; aucun second avis ne renverse un résultat négatif. La qualité des nouveaux prompts reste à mesurer avec les modèles déployés.
77
 
78
- Une seule génération est autorisée par conversation. Un fragment direct déjà valide peut être conservé après retrait d’un ajout accessoire et revérification complète, dans le même budget ; il n’y a pas de seconde génération de réparation. Le repli est préparé avant les appels puis ajusté au dialogue résolu. Une carte factuelle pertinente mais partielle peut être conservée après son contrôle de portée et servir en cas de panne, avec une limite explicite. Une carte rejetée comme différente ne peut pas revenir par cette voie. Le budget par défaut est de **35 secondes**, partagé par le routage et la conversation, attentes comprises. La variable existante `CONVERSATION_TIMEOUT_SECONDS` permet une surcharge ; aucune configuration supplémentaire n’est nécessaire. Une panne du routage reçoit aussi le repli préparé, sans sélectionner d’action. Ink achève une transition autorisée de façon atomique ; une liaison facultative expirée laisse le passage écrit intact. Les erreurs du moteur Ink restent explicites. Les appels rejetés ou interrompus restent tracés.
79
 
80
  L'engagement et la méthode reçoivent le dernier échange même si le premier classement semblait suffisant. Les diagnostics distinguent `route_uses_history` et `checks_use_history`. La suggestion reste une référence, jamais une autorisation. Le fichier `decisions/narrator-actions.json` de chaque aventure décrit en FR/EN la portée des tentatives disponibles, sans leurs résultats cachés. Une réponse ne doit ni inventer leur échec ni les accomplir.
81
 
 
24
 
25
  Un ami disparu, un cargo qui part à minuit et une enquête à mener à votre façon. Livre-jeu original en français et en anglais, quatre chapitres et cinq fins.
26
 
27
+ **Version 2.28 : sélection sans exclusion prématurée, faits et limites explicites, réponses composables et repli borné.** Voir [RELEASE-2.28.md](RELEASE-2.28.md), [AUTHORING.md](AUTHORING.md) et [QA.md](QA.md). Résultats locaux : `evaluation-reports/2.28/VALIDATION.txt`. La comparaison réelle des narrateurs reste à exécuter sur un serveur de validation.
28
 
29
  ## Déployer sur le Space GPU actuel
30
 
 
75
 
76
  La pertinence utilise une seule question NOUL ciblée avec la demande réelle, la réponse et un historique court. Le classement amont du type d’échange ne dicte plus ce qui constitue une réponse pertinente. Le seuil existant de 0,80 est conservé ; aucun second avis ne renverse un résultat négatif. La qualité des nouveaux prompts reste à mesurer avec les modèles déployés.
77
 
78
+ Une seule génération est autorisée par conversation. Un fragment direct déjà valide peut être conservé après retrait d’un ajout accessoire et revérification complète, dans le même budget ; il n’y a pas de seconde génération de réparation. Le repli est préparé avant les appels puis ajusté au dialogue résolu. Une carte factuelle pertinente mais partielle peut être conservée après son contrôle de portée et servir en cas de panne, avec une limite explicite. Une carte rejetée comme différente ne peut pas revenir par cette voie. Le budget par défaut est de **25 secondes**, partagé par le routage et la conversation, attentes comprises. La variable existante `CONVERSATION_TIMEOUT_SECONDS` permet une surcharge ; la génération dispose aussi de son propre plafond `NARRATOR_TIMEOUT_SECONDS=10`. Retirer les anciennes surcharges si ces nouveaux défauts sont souhaités. Une panne du routage reçoit aussi le repli préparé, sans sélectionner d’action. Ink achève une transition autorisée de façon atomique ; une liaison facultative expirée laisse le passage écrit intact. Les erreurs du moteur Ink restent explicites. Les appels rejetés ou interrompus restent tracés.
79
 
80
  L'engagement et la méthode reçoivent le dernier échange même si le premier classement semblait suffisant. Les diagnostics distinguent `route_uses_history` et `checks_use_history`. La suggestion reste une référence, jamais une autorisation. Le fichier `decisions/narrator-actions.json` de chaque aventure décrit en FR/EN la portée des tentatives disponibles, sans leurs résultats cachés. Une réponse ne doit ni inventer leur échec ni les accomplir.
81
 
RELEASE-2.28.md ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Double Fond 2.28 — dialogue, preuves et réponse de dernier recours
2
+
3
+ Cette livraison corrige les mécanismes mis en cause par l’audit 2.27. Elle
4
+ n’annonce pas la disparition démontrée de tous les défauts des modèles.
5
+
6
+ ## Changements
7
+
8
+ - Le besoin et le sujet estimés ordonnent les candidats sans supprimer les
9
+ faits publics admissibles. Une piste à faible marge reste une hypothèse ;
10
+ son texte doit passer le contrôle de portée avant publication.
11
+ - Une question sur une personne absente peut recevoir son identité publique.
12
+ Une demande explicite de contact est distinguée séparément.
13
+ - La recherche peut poursuivre après un premier candidat rejeté et composer
14
+ deux ou trois réponses écrites, avec contrôle du texte complet. Un fragment
15
+ généré valide peut être conservé seulement après une nouvelle relecture de
16
+ sa capacité à répondre à la demande entière.
17
+ - Un dossier compact fournit au narrateur les faits prioritaires, la demande,
18
+ les limites de preuve et le rappel partiel disponible. Les 45 faits des
19
+ trois packs et leurs 60 versions sont typés : état, identité, observation,
20
+ témoignage, intention, mécanisme ou enjeu.
21
+ - Une réponse partielle vérifiée est mémorisée immédiatement, avant de tenter
22
+ un complément. En cas de panne, rejet ou délai : rappel partiel avec limite
23
+ explicite, sinon réplique contextualisée du pack. Une conversation ne lance
24
+ qu’une génération et n’exécute aucune conséquence narrative par sa prose.
25
+ - Budget partagé du tour : 25 s ; plafond de génération : 10 s. Ink et la
26
+ publication atomique restent protégés. Une coupure complète du serveur ou
27
+ du réseau utilise le contexte déjà reçu côté navigateur, puis une reprise
28
+ en lecture ; elle ne peut garantir une réponse distante nouvelle.
29
+ - Les audits réutilisent une session par récit et libèrent uniquement leurs
30
+ propres sessions. `DELETE /api/session` refuse une session occupée.
31
+ - Quatrième pack autonome dans `examples/quiet-archive`, guide d’écriture mis
32
+ à jour, 147 tours de recette, 73 réponses de calibration et outil de
33
+ comparaison sur onze contextes identiques.
34
+
35
+ ## Déploiement
36
+
37
+ Remplacer les fichiers applicatifs du dépôt par le contenu de l’archive et
38
+ reconstruire le Space avec le Dockerfile fourni. Le catalogue public conserve
39
+ les trois récits. Aucune migration de base de données. Les sessions en mémoire
40
+ ne survivent pas à un redémarrage, comme auparavant.
41
+
42
+ Défauts conservés : Kev-4B Q4_K_M + Qwen3-8B Q4_K_M, profil `a10`, contexte
43
+ narrateur 12288 et raisonnement 512 dans l’image GPU. Le profil ne change pas
44
+ le matériel Hugging Face. Retirer les anciennes surcharges de délai si l’on
45
+ souhaite utiliser les nouveaux défauts ; variables possibles :
46
+
47
+ ```text
48
+ CONVERSATION_TIMEOUT_SECONDS=25
49
+ NARRATOR_TIMEOUT_SECONDS=10
50
+ ```
51
+
52
+ Les seuils du vérificateur sont inchangés. Les noms, phrases des audits et
53
+ règles propres aux histoires restent dans les packs et les tests. Aucun
54
+ changement automatique de modèle ni déploiement de cette archive n’a été effectué.
55
+
56
+ ## Validation et limite actuelle
57
+
58
+ Voir `evaluation-reports/2.28/VALIDATION.txt` pour les commandes et résultats.
59
+ Les tests locaux utilisent Ink réel et des erreurs/verdicts d’inférence contrôlés.
60
+ Le benchmark réel n’a pas pu démarrer : aucun serveur d’inférence local accessible.
61
+ Les performances, les faux rejets et les réponses spontanées de la 2.28 sont
62
+ à mesurer sur le matériel cible avec la recette décrite dans `QA.md`.
63
+
64
+ Le moteur assure une issue contrôlée aux défaillances testées. Cela ne prouve
65
+ pas qu’un repli répond parfaitement à toute question libre. Ne déclarer le
66
+ moteur validé en production qu’après lecture des réponses réelles et passage
67
+ des critères de `QA.md`.
RELEASE-MANIFEST.sha256 ADDED
@@ -0,0 +1,511 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 291c0f7a4e3cc8cf55d2d45661dccfc07d5e703dd9b3151bf9095bbebbc48adc .dockerignore
2
+ c81346aff175a0dac534552ac2f6c63419dbf23c2b8bb2d3eaf3218698ce5fb0 .gitignore
3
+ 2338021dc599e27190860e0eb1f6150e3a6044b582b6a47be37e9886e2f8f073 A10.md
4
+ 086ec50368aadd38ac57c0735a03d72ca26d418b9b4cb60073e3b7f615a696e4 AUTHORING.md
5
+ a6e2c0b0702be0bfdc079171db7351b7c649493dfdb61ab41e276d048c142fe4 Dockerfile
6
+ 85fa699ad5c22759895d3899e47f04bda30fc583c28555fee98295da96eaba2d Dockerfile.a10
7
+ d70a052ee138f7f470b678abc9cb6d9e47fb6b84080b60a94ed8b6a0d98eb61f Dockerfile.cpu
8
+ 3e52d6ee9e32d4e2d0a774fd262e3ab647be7668cb9313d29d7b50d9a9b0d9ec MODELS.md
9
+ 2b4503e15a12e4ed20a22203e2db72973cfb0e5d90e5636f071500720c3a8c29 QA.md
10
+ c02bfa0e15da795079ae400d1f0470fa03dcc0cc92b45b40024cf67633cfd296 README.md
11
+ 7e183c822aed8affdc83c08ab59f5796ec4c3be1b2c496d6a9eee3dd02b2914f RELEASE-2.15.md
12
+ d61488ff9f28d87c5ab285211bff4e69362e72d1f3d8d3a5aaa8bef983ae911a RELEASE-2.16.md
13
+ c2e2b501f71d1b7667a779dba5c987472390afe8d93049bab1f246eb99ad04df RELEASE-2.17.md
14
+ fc084b31d46d0fcbf233ed2b5a31371fa5b639192c37721f1abf02e44c303b3f RELEASE-2.18.md
15
+ 4dd8f5b1bb3c149b87b7e5b86908912ae0276d09bcef4c78358f7f2e5ffe3544 RELEASE-2.19.md
16
+ 4742c62dd7da5a6ecaba47fe169287e007bf9c0f85b4929505c1936bf22ac04f RELEASE-2.20.md
17
+ 255cec93bcc13871766fc85844b5cda1ddd0f617c6ed66c1b03daffd88bed842 RELEASE-2.21.md
18
+ 3ff27676fb2f7eb87dbff888c44688739a973da9aa3f95a831f133a2973c127b RELEASE-2.22.md
19
+ 8192cdbfc015964483be26efeb6bc87ca43630618021fb46a290352fd7d38de9 RELEASE-2.23.md
20
+ ef1f9f38d6c962ebe4871d8d96c8df35119f55db55919a0eb84108d798d155b6 RELEASE-2.24.md
21
+ 704a95100d6b93e276084bf1d0fbd2d8d6dc78e683db959c7376e07c6110db69 RELEASE-2.25.md
22
+ 34e42fb9e4bfdf75dc9210a05dbf853f2c3e2fc5621e37c44dc1fd283dd9b87a RELEASE-2.26.md
23
+ 7a41d4e14618e9acbe6e4428529195361cf4a428703d0eb375788222cc74d35e RELEASE-2.27.md
24
+ bf0034ddc0d35eb26ac23f8c03e4cd5b70133e0afc2cd8167a5d02b0c70fdde4 RELEASE-2.28.md
25
+ a2c6a742fa2b1cf507b5fa1c424a0477e5dc8dc18404da8f906e149959fc8eb8 ROUTING.md
26
+ 8092e3b14ff584e7007e9b5c5026d0bba1c2567c0f3f3dd765715083337e72bc answer_contract.py
27
+ eaa5d08216af1e77872039c1ca00d318e4a1cb414990dedf82389849ceec8a01 answer_dossier.py
28
+ 3891a3e59c84786e18edbdc48834039e512fb42290cd974ac6c4f600d15672ec answer_focus.py
29
+ 79a29b44fdc2cc834c65d7aefaf4efaa76259b352dcc5346a24bf99a12272864 app.py
30
+ 5326d5b8d57424368619640feb26b07df1c036a796c2bc20b572b7b3033eff57 chance.py
31
+ 5479de63d56c8bfb2847a09d6bc5a515fb3091e1498c2d1bec372edae1ce4221 character_play.py
32
+ d4fe02faf1b9cd5296b452c4c4559d2df98f13c2cc7223cbba3576ea4c38c8f8 config/narrators.json
33
+ e4d18290266dff4582a6d01eb849070e6d056ab757a634b7741926b293819a25 decision.py
34
+ 8121409579066f9e7844e32c8432c241cc33ea212fed6906b0959abe8197ca20 dialogue_contract.py
35
+ c7530607ed734589efc01f1a67def6028f69aedcdc6ad36b0b3029dc9d0b7662 docs/history/AUTHORING-through-2.26.md
36
+ 686e28b248adf0c44423261d98ea3c3dd3668eeb7301e38417391e46740e75fa docs/history/QA-through-2.26.md
37
+ 314ae9b808335558b009ab1041725c5d9097ebd17b26a70ec6a7545be9298777 engine/bridge.cjs
38
+ 06da9461fdc3b764746f914fa0d72560516000b786b600f01eee733018a07977 engine/compile.cjs
39
+ eec300dcdbea52aec45c98217f5fd2b06d7fcf6ea9914d084b543b131b45d721 engine/pack.cjs
40
+ c9204c3a31b2bf03bba0c7ffc06e396b416fc3008d9a17b733a33bf6761c3e49 evaluation-reports/2.13/01-initial.json
41
+ e175b9b5257a4b68faf4ea6ee0c951ff19cff29e4662c175682c2c46a0d6729c evaluation-reports/2.13/02-refinement.json
42
+ 3a0eead4bf469afcd96eacc1f373a79dbc386ac22be191e2f0da22e9b02225a2 evaluation-reports/2.13/03-expanded-speech.json
43
+ cf0c00070c802b2e9800c2c4531e362e28b98b911794007ead0cb7162e006c0e evaluation-reports/2.13/04-final.json
44
+ 0ba04676007541711dd4ea97436982b19e2a24f57765e2fc1395353c17bb28d7 evaluation-reports/2.13/QA-archive.md
45
+ 1f03c1c5edc99ffb485fca6a10d779fe3fbaa62dd1e1cf3c648c80b89cf48db7 evaluation-reports/2.13/README.md
46
+ 44b1016cba73225dc821163c687c62ffaed1db13e15bd149bbcb06691491113a evaluation-reports/2.13/cases.json
47
+ d9304cd39a0591c3a8b5ffaea169e8823ac6d516a14659bf8143e01265cddcca evaluation-reports/2.13/model.json
48
+ 06fbb24445fc2e31dc888ac4b630462fc879c0690c7870fd5ac222d97f7e7faf evaluation-reports/2.13/unit-tests.log
49
+ 5d068d72cab1fc73fd6754295dc2cf8d6b313f8090cc496f632f30be60817904 evaluation-reports/2.13/validation.json
50
+ 70c32f5db786f19eb76d9ee044956fa69fe17010ecb1b79879e33dad452c50fe evaluation-reports/2.14/QA-archive.md
51
+ 46ec1d14ab3ca69b3347858ebc12168444b3c0ad83d749c8ca6a526b5d2aead9 evaluation-reports/2.14/cases.json
52
+ aa16dfb9669f2bccb3a13b54fd12e5c5b62a25df33a15e12d83b8dd4c76b6e43 evaluation-reports/2.14/disclosure-probe.json
53
+ df959695ef34c73de8a7dc6d400a49e2922e7dc53359b66ecb397d2dee1ec9e1 evaluation-reports/2.14/disclosure-real.json
54
+ b84183552026e3e93091e1df44d4f3e6681bacc5d0328ca80215accb1b066676 evaluation-reports/2.14/engagement-probe.json
55
+ c76bc008d72a7593c8ce229483bbdf60872390523ab1320066b9261ed3366eb9 evaluation-reports/2.14/narrator-real.json
56
+ b4f29fe320c722fa2c95563396922a0e7957d082d9fbacffda0b3e67cfcb309d evaluation-reports/2.14/routing-final.json
57
+ 7730dca0e206e75efb9c036a291ebace5526be6b39692a5388992f88a615304a evaluation-reports/2.14/routing-first.json
58
+ fba623664d90ec48d3e19f1de6cae92653fa2bb7cd72050c5c427a6bc989964a evaluation-reports/2.14/routing-release.json
59
+ dd0a5b6b64a96f57e5c4c55048408563aaddb5fc6a2f66622729d7edaed809cb evaluation-reports/2.14/unit-tests.log
60
+ 31a0a354092087a8767a30aea4db80b1e7aa5ea09d2bca13b89117212f616499 evaluation-reports/2.14/verification.json
61
+ aa565ea85bdc24562761842f3681a102ce2533284c2b6ab65c01720d2b8d3b13 evaluation-reports/2.15/QA-original.md
62
+ 2bea40dcfdbc238b58d7bebc4ab5055b915879f9db0c8d715db9ad0f6e25bb53 evaluation-reports/2.15/unit-tests.log
63
+ b8977974e617c5ed4d23645c96ef4a3c97576fe03d12aa47f2f350bf216d7fdc evaluation-reports/2.15/verification.json
64
+ f964e170e20ab1d2c86c7bb17122ad6330adda2277fa3cfc7b89043a030b0157 evaluation-reports/2.16/test_dom.log
65
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.16/test_library_ui.log
66
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.16/test_story_ui.log
67
+ 2d0ced3027a0a493f4a8b9ac373a7779ca1184ab47c3c902db56f3dcf23f7629 evaluation-reports/2.16/unit-tests.log
68
+ 86b12346aa5fc09382b8f47e0a564550033e126471a996c31535c57a3e6173da evaluation-reports/2.16/verification.json
69
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.17/dom.log
70
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.17/ink.log
71
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.17/library-ui.log
72
+ a1f5397bcaf349a2e5cd7602110a74e028e9cc833d2af23da3282c2d9bc7451f evaluation-reports/2.17/local-server.log
73
+ e3e1faa16ce3c22f0024a3559058374e2817e18261b55f6f6159f4463437ba99 evaluation-reports/2.17/new-contracts.log
74
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.17/settings-ui.log
75
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.17/story-ui.log
76
+ 1b423e77a291bebb5571c24310e39eabf09b29a2714df154b1435a7759b9fe39 evaluation-reports/2.17/summary.json
77
+ 9204009f172fe9a2301976d666d7460b7bdc07d8e84e4526d163bb060312151b evaluation-reports/2.17/unit.log
78
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.17/western.log
79
+ 204327f1a8c0dd60bfa3950ff75b2fe9c6a6758b608ae84a301be2b5014d72d9 evaluation-reports/2.18/baseline-2.17.txt
80
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.18/dom.log
81
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.18/ink.log
82
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.18/library-ui.log
83
+ d64031852906f8134cf2713501c3c5910160b32401f8b55cd518f5d32bebd3cc evaluation-reports/2.18/live-fixtures.log
84
+ ced65193855c5b246f3dea40dcd7d396954f0a3b42e3cf1b1373de1dbb5ec5c0 evaluation-reports/2.18/run_settings_local.py
85
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.18/settings-ui.log
86
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.18/story-ui.log
87
+ c7ec6e79255fc65d518a8f2f35b68a9d4c6c01da08efccaf0718699ccf206f2d evaluation-reports/2.18/summary.json
88
+ efa477cce0ce82f7ae8f45c6421a0d8368edc4681c6391e1a4ab6a5bb74c9a03 evaluation-reports/2.18/syntax.log
89
+ a4116d63bb7dcb6dc7dea0a09133b8b73063377296b8df2ac44e7f8953868fe7 evaluation-reports/2.18/unit-v218-final.log
90
+ 0a094f0663090e7adc29709f037c022c73528f678c87c84a628aafee517805d8 evaluation-reports/2.18/unit.log
91
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.18/western.log
92
+ aef910b18f44acb7ae53ca703cda3be335c19edac47c7a69cd4273766fa494a5 evaluation-reports/2.20/VALIDATION.txt
93
+ 2d0742f7c1a803ea997cc8c9440da401cc103443e805cdc1a03e0a538f3c5a3d evaluation-reports/2.20/changed-files.txt
94
+ 38fed5fb145022c032cc5c5e04e788007aa24b43a00c7080ef086c69c78c3526 evaluation-reports/2.20/frontend.txt
95
+ bc23c5b0d929270a1651978456d51aea43a5cea131b3e9f25147cc52c3b216eb evaluation-reports/2.20/ink.txt
96
+ d7fc305634d054aef6c7375efedf7e0294a11d861d5a07c2ad31becde15d8375 evaluation-reports/2.20/kev-authored-responses.json
97
+ 3cf9852a16cdb70cd94de6f9fe1d406b6dfb2d36925035d23177bc0bfff1d5ff evaluation-reports/2.20/kev-authored-temporal.json
98
+ e22d0e0062d6f434f95c813ef001e6f5e5a3595e3c34895e3b72fd7d8af26b38 evaluation-reports/2.20/kev-distance-cases.json
99
+ 73bc77374d1afd9ddae5567433b9909aa5c0f32ed1dcb8711a4a08636418f6d8 evaluation-reports/2.20/kev-guard-routing.json
100
+ f71475c7d742ea2695cf90c3b9ab29c6c0af2942fbe9b7ba22ce8069d3430a71 evaluation-reports/2.20/kev-relevance-final.json
101
+ 7e0ff17800b5ee6566caa977d7cf01af68478f6f986f483cf0644ac59172c751 evaluation-reports/2.20/kev-relevance-noul.json
102
+ 3d951e0aeefadc3b1480dc247859d0b60394875b1841ad1213d30743dc8ecc4a evaluation-reports/2.20/kev-selection-before-description-fix.json
103
+ dd8f887914b921b2071b9584ba9e85a005330f1f6cb5740f451bc64410f1e909 evaluation-reports/2.20/kev-temporal-portrayal.json
104
+ d2d3d3d27420a4ab861031c4e477f1c1029523a2fd09cab3b2870b6580730e18 evaluation-reports/2.20/qwen-prompt-tokens.json
105
+ d088a64e267289d6d4d5d52948e2b3595fd758a759302179c3753a10f7b51cb5 evaluation-reports/2.20/source-sha256.json
106
+ f5f1d4ffe1cf0722eba3bf070b7c770928d527515030d63a9a2b2a7857a7c9cd evaluation-reports/2.20/unit-batch-1.log
107
+ 9367909fb9d51cbe94b04755f2746d7246ff62f4bf49f7ffe93b56afcd1ab3d4 evaluation-reports/2.20/unit-batch-2.log
108
+ 0007ce68fb5189e8ef27921bd0bffc176c72b86f2e87069b414a8f6bebb05fd4 evaluation-reports/2.20/unit-batch-3.log
109
+ e0c6ed2294b3ce73fce307da6f3be4309666768c9060a56ed325260e8ebd3890 evaluation-reports/2.20/unit-batch-4.log
110
+ 185692c58ff58c74ceebd24f99c03d2196de7145b8f72248cc261a7bee0b35ab evaluation-reports/2.20/unit-final-boundaries.log
111
+ 01cead1a5b51e1d257ca60b9ee172d6d702beeb8329268a02f9c8f748d5abb28 evaluation-reports/2.20/unit-final-packs.log
112
+ da778828008c4b6252819fabf5985b7484f58dd8c22da7cfdd19f47d34e74956 evaluation-reports/2.20/unit-results.json
113
+ d7526a80fb078ddd10c8935b4149587faa48d556c4301cbb56c66bef9d04311c evaluation-reports/2.21/VALIDATION.txt
114
+ 77cded0aaa4dbbceea1505226f861e5f5fd91fc090b839a8375265415c2fe5d8 evaluation-reports/2.21/compile.log
115
+ d7702bcd350c96dcad36795ff90c97c07e76a73ec126d8e259e5c3ec990592a6 evaluation-reports/2.21/dialogue-tests.log
116
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.21/dom.log
117
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.21/ink.log
118
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.21/library-ui.log
119
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.21/packs.log
120
+ 9b351d29c9c08f6cef17b22655c9f83e144c6b0a2f8d912553731cae084cf12c evaluation-reports/2.21/recovery-examples.json
121
+ e1ff4964e260c7575d2c9ef9c3b7f07ae4c016d0f65c83bebb77b7da48ddf5bd evaluation-reports/2.21/source-changes.json
122
+ dac96d6ac995a87898aea1f51c7d2be35f066c5b37afdb81301945442705a3a5 evaluation-reports/2.21/source-sha256.json
123
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.21/story-ui.log
124
+ de6fbec48c1cc31f967c98c447de6953a9827dec030968828efaddb2bf440b43 evaluation-reports/2.21/unit-tests.log
125
+ 9ec56ae77e6731f78a72c1df9c7781f65d9a4890d70ed18a5ca7e2e4d97f973e evaluation-reports/2.21/verification.json
126
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.21/western.log
127
+ 8bf8dd342e6d767ac6c9ac8a42afab7e0790c2adf1467a7cc502af66f3740fea evaluation-reports/2.22/VALIDATION.txt
128
+ 76f4b7159e539156a1aa521cffa29fdb7046d40d15dbd2abd4f5cece6ce64ee2 evaluation-reports/2.22/baseline-2.21.json
129
+ 8d3fe008c273282f389b48d6255531c0fa09fd31a97d0f724c794a05dad2d848 evaluation-reports/2.22/compile.log
130
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.22/dom.log
131
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.22/ink-paths.log
132
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.22/library-ui.log
133
+ c73599c01c3467cd281026c17fc03b876da758e743d5a914305523f93bcf8a8a evaluation-reports/2.22/prompt-final.log
134
+ 8832bb73e21204854aaafef7beb39110443503319372be8699df96caf6b02ede evaluation-reports/2.22/python.log
135
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.22/settings-ui.log
136
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.22/story-ui.log
137
+ c70e095da2663aa564a6a47c385b878d347180f881ce33f9c1540c139dca1338 evaluation-reports/2.22/syntax.log
138
+ fa8b724b6e78576c979d2df5f3e0d45c4dd5a1bb3be8b3432b4a2b56f28dd014 evaluation-reports/2.22/targeted.log
139
+ 6ccce7df3dc17440ea9cd0e0cd2c16fca63b648aae9cc4579424114536f62e7e evaluation-reports/2.22/validation.json
140
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.22/western.log
141
+ e0286a40102fabb1817229c3e4c2b14430a1a35e64ff897c86431abe6cbab2c9 evaluation-reports/2.23/BASELINE_DIFF.json
142
+ bf0981b9686f53c51e6b084720b840300ba51b01989470e72e8a7985f54062f9 evaluation-reports/2.23/FILES.sha256
143
+ 9871609a6bf8fc1564bd6eaf6571e6067d9b4d3f149ae8efe4f021931dacaf5a evaluation-reports/2.23/VALIDATION.txt
144
+ eef7506d4baf53d831ad80b2da8b53c7a97ef66bbea9078129bbdf2f2d4b10e2 evaluation-reports/2.23/compile.log
145
+ 8dd586f25f0bcc29ffeba29960b5eac8a509dc3acbf7371309538e22af24b83c evaluation-reports/2.23/dom.log
146
+ 21404bdd7fdba7b646beba8e56ed837ecb362c1d0e5fa401bbcacc2e06adfca4 evaluation-reports/2.23/final-prompt-timeout.log
147
+ 9583d90a057341f94e190575baea4a486e2af75070b86de9128159dd31c94f6f evaluation-reports/2.23/ink-paths.log
148
+ 8e41be0a373d91e63b14be5596243543665a95d4b8bd3d79358b3584c7ed0006 evaluation-reports/2.23/library-ui.log
149
+ 6fb25c7471ab8c772ee561172c67a51056ce9e79f19184c90358a18a6bfb2f5b evaluation-reports/2.23/packs-ui.log
150
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.23/packs.log
151
+ e8d1c4a56a050e1c40525095f6f47d2b61f9a4ae50c94308bea237a5beafe9b8 evaluation-reports/2.23/prompt-final.log
152
+ aa3a90cf5bceb6bd38d631797c6680db347fa2aece7517a0674f6fe735c81c80 evaluation-reports/2.23/python-tests.log
153
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.23/settings-ui.log
154
+ 3c036ebfc57cb2d164f9f892a9c70a5a084100eb42c66dbf0ee9754dac4f30aa evaluation-reports/2.23/syntax.log
155
+ c003aae27202a2cad19ff91e79141e8fc35963ffc6405df9dacd059519146de3 evaluation-reports/2.23/targeted.log
156
+ a1b33d7e40addab9f24bfbe7e7013e76fa1543cfcbc6b5c8d4082dff7b9dba7b evaluation-reports/2.23/western.log
157
+ 5cb9bc6853ec684df6ca501a866635fad5dcbb5d385179a7d4dfdc80fad90689 evaluation-reports/2.24/BASELINE_DIFF.json
158
+ 7257ca4efeeb3c5ba7f730157360616273fa1fc2b3af6ad79e9242a796cfffec evaluation-reports/2.24/VALIDATION.txt
159
+ 54b1451c6b9ef24a20bb10abd1505606374d704e225dd929d55262e8fa663232 evaluation-reports/2.24/compile.log
160
+ 0af5962bfddf34c46e6ed28c497840acafa39057b1fbd981328b84946a8f8b1e evaluation-reports/2.24/deployed-health.json
161
+ 1becaf879cb0dc23aee86d0ea5d8824d1d14736b36a5d689e33be9a5bbe22f1c evaluation-reports/2.24/dom.log
162
+ 5581a1bf59673b2b0fd452f1b9fe0cec43b3d79fbb93974f60dc71d35214132f evaluation-reports/2.24/expectation-migrations.json
163
+ b623fbf0a59cd818607a4b0a03a31c2b1977374cbbc8fce638eca7146c4ba9f2 evaluation-reports/2.24/generalization.log
164
+ a41ac18df0cc9d00078c98ac4774bc924426f45d0473bcb17e6a25c4c3c3f6bb evaluation-reports/2.24/ink-paths.log
165
+ bf2171c11a409ebe7a8324fa824abca1b1b63ed27ceb7bbbeaca64c525161a9a evaluation-reports/2.24/library-ui.log
166
+ 9d5ebf68ea056b4932cc896aa5b0787e50e9972ccf0d3f17361fe9b855cc8cd3 evaluation-reports/2.24/packs-ui.log
167
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.24/packs.log
168
+ cd74f5de3dcb59c60f272f5bd892981981098cf9ce3af05f7bd909b2abde24eb evaluation-reports/2.24/python-release.log
169
+ eb1f89e1cef93446fab695d425246ea9254869c02212583e8a96d56eb483d5e8 evaluation-reports/2.24/recovery-compat.log
170
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.24/settings-ui.log
171
+ bb8ece34b24503c302f56f8408aeb05f09f979804e22d90f590a25a6fa3b0abd evaluation-reports/2.24/syntax.log
172
+ a782a3b1584ad647810279a36936404b6d819cea49d7f96dd36108e0497476c5 evaluation-reports/2.24/targeted.log
173
+ 89ca3f7e4b55424c089a507fb75b98f44f19c2957a68cb74f9ef1746b2a75deb evaluation-reports/2.24/validation.json
174
+ e574433f9d0022d905e949d0bc30f59757fe3f73ab9af99795815c43d1929960 evaluation-reports/2.24/western.log
175
+ d8e538249e47b548217d2480ff969f16e229c17be9b813bf1733dff355b7b335 evaluation-reports/2.25/BASELINE_DIFF.json
176
+ ad301f203abe9d25dded2399a4e53680c061cec8563df265ab740370d54b54fb evaluation-reports/2.25/VALIDATION.txt
177
+ ac7169eb21202ee7fbcd7dc61543ae5ddc1cf99bdb58583dc53c197c912cb9af evaluation-reports/2.25/corpus-validation.json
178
+ 218b458b84e1a70c40d12fccc0d31c4e22944538bb624ece8610963e40b6ea62 evaluation-reports/2.25/deployed-health-before-release.json
179
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.25/dom.log
180
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.25/ink-paths.log
181
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.25/library-ui.log
182
+ 5a2d77fd15fdd9c135781b90164b13d31ff33a244e68f5a83da13cb76c627773 evaluation-reports/2.25/new-regressions.log
183
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.25/packs-ui.log
184
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.25/packs.log
185
+ ad28daa8c5dbe203dbaf148c07d0c38ab446d9220b544e2783fa01c3de9dbdfb evaluation-reports/2.25/python-first-full.log
186
+ 64629bdf1de8790add105d5c2fa4deefd3ccd2e05d6cb20c18e75696ae3fa76d evaluation-reports/2.25/python-release.log
187
+ 1b1437430dc88e827663cb0cecdb7e9bcd33c5895639259a012723172d2e987b evaluation-reports/2.25/recovery-refusal-regressions.log
188
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.25/settings-ui.log
189
+ 390ce3aaef1960c723c218abc8bf38aa9942063836368a970e10c335541a8f3b evaluation-reports/2.25/validation.json
190
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.25/western.log
191
+ eaaf6b1cfb230f42faa07a1ebe2a398c49deed8ebefb396ea997f333714f9c73 evaluation-reports/2.26/BASELINE_DIFF.json
192
+ 419cd767afe28a6e7346623867e02a1e83445c288791800f83b4c071acf51598 evaluation-reports/2.26/VALIDATION.txt
193
+ 19005ef014858fe8f62241ea95cfcd5cf9d2fb2cd64353d448dbabca86c4e8ee evaluation-reports/2.26/compile.log
194
+ e404821a36a38c5052f7dfeea510134b2158c2430c76d19ce301290b71ea9227 evaluation-reports/2.26/corpus-validation.json
195
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.26/dom.log
196
+ 7c3844884777d3d8cb454d4cab6a34dc8341efdc3456696b58ade5b2f221ee45 evaluation-reports/2.26/incomplete-first-full.log
197
+ 13d810c9b34d674acabd05ddaf0d0027c206a0ee6472c17017aba96afdf59ce4 evaluation-reports/2.26/initial-targeted.log
198
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.26/ink-paths.log
199
+ 09ddae02b2464246a382b1bd608b5b8941c65ded2375bc338942543d209725cf evaluation-reports/2.26/interrupted-development-full.log
200
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.26/library-ui.log
201
+ 8db872701716724fa68f86d5d1c7d9e343d9dbb5957ceb75286e688a3ed40b36 evaluation-reports/2.26/network-ui.log
202
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.26/packs-ui.log
203
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.26/packs.log
204
+ b22ec1f1234099ebca81bb43fa19d8cbf7aa82917615e2e8b9339160324d3ee4 evaluation-reports/2.26/pre-release-python.log
205
+ d960481b54e5be85b7060be14786fc8da7bf37fed91445311009456f8050b1b3 evaluation-reports/2.26/python-release.log
206
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.26/settings-ui.log
207
+ d93d8917679cd58529cd6a206a222315f765855c4bf33e84c2b5175827232522 evaluation-reports/2.26/targeted-development.log
208
+ 72587c31031ce5af7c1d063b0db0d87e83df88a741e9b8920883d702f77a6275 evaluation-reports/2.26/targeted-recheck.log
209
+ 899e486eb2ef0ceee68dc2cd5409fc13d316bc95f1892ed3d6a56e54ec8fe176 evaluation-reports/2.26/validation.json
210
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.26/western.log
211
+ 93e5b5e63ec19b78ae07d513fd2f00c4d922fb11ec6548e2a9ae6bd411f7aeff evaluation-reports/2.27/BASELINE_DIFF.json
212
+ aa8f710bec62dfbf8dc7321aec46b97f4372f68852cf9aa6a37bc4e7ab6cf2ba evaluation-reports/2.27/VALIDATION.txt
213
+ 6c9b87427e229e880da6914d0bb0c63211922fee2cec75929ed5417417c961a4 evaluation-reports/2.27/adapted-fixtures.log
214
+ 03163b12405e9538c969f59b35e14f1936d9533cf3bc711a404a9f5110a8a6b1 evaluation-reports/2.27/browser.log
215
+ 91fc82b0f695f0c81019831a8340eda63d69b122ce2cb0b6d43526e2b42cc61e evaluation-reports/2.27/contract-fixtures.json
216
+ 329da6a1c1ae4cf39b5f5f636e489e84af71afd06dcf4e627efa43c5f42578e5 evaluation-reports/2.27/corpus-validation.json
217
+ 6ff6f5e93bb991ef4a27e3526cec3ee351f5e5e847c8f89efefc3f2ac0198e79 evaluation-reports/2.27/dom.log
218
+ 920f6ea7863b1d12f4777a2e89b39541fc5be78f9e1b55c6336e6fe260ce47c7 evaluation-reports/2.27/focused-development.log
219
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.27/ink-paths.log
220
+ 54347b82c3ec83940f0c2d02fbbd6f24f1fd825b7b9135b6dc99014e8db9abb5 evaluation-reports/2.27/library-ui.log
221
+ 8db872701716724fa68f86d5d1c7d9e343d9dbb5957ceb75286e688a3ed40b36 evaluation-reports/2.27/network-ui.log
222
+ a65483e1cc434c6df45bfc9c8a668f7be854f25cf648b6daeac1a8782ea9a8ac evaluation-reports/2.27/new-pack.log
223
+ 36027e8ed863701446ece27150628dcd5687042ae4e2bbf0540377f7b8d06f57 evaluation-reports/2.27/packs.log
224
+ d4cf5c536b381ccccf23d0654f5870f8777aad194ac4010e449aa402cdfdd24e evaluation-reports/2.27/python-development.log
225
+ 4758c404220e6f2c5fa5566b27cd74cab1dccf9437c97f3718d32706fdeb5710 evaluation-reports/2.27/python-tests.log
226
+ b67efc1711a92b21d246d1b4466814840ec5ac2186e77dade7f90ef4e7051152 evaluation-reports/2.27/settings-ui.log
227
+ 04dcf96f68939c47b45d13d6ed63c6c935d5b09b85c38ad18cc72c663bd9f287 evaluation-reports/2.27/story-ui.log
228
+ 3e1761c0acbd68b51a8934242a34483b721414ccfaa8a12c7731d87ea8e696ab evaluation-reports/2.27/validation.json
229
+ eb4f5048e9b73ebd4476c5b6c523d7d42c8225e2479e67b659ea9e22af49b5d3 evaluation-reports/2.27/western-paths.log
230
+ 603d32281a0538713f4b19490033895380053be5a43b43b21a37c30d21fe8b4c evaluation-reports/2.28/VALIDATION.txt
231
+ e953519db3db2f8053dd47ba5b002227a9514d9941704e582fd2cf1310602107 evaluation-reports/2.28/benchmark-unavailable.json
232
+ 91fc82b0f695f0c81019831a8340eda63d69b122ce2cb0b6d43526e2b42cc61e evaluation-reports/2.28/contract-fixtures.json
233
+ 875acc3e64a31e2d144c3ea034b3d878667e464a6428a7f646fd3ad0993a6806 evaluation-reports/2.28/fourth-pack.log
234
+ f749e745dca26bc5660fb4789dcc1020545060d9c86de4d89053336babd0234d evaluation-reports/2.28/pool.log
235
+ d0a4ff98832106c7e017b61c1b29c44a7d5db599f9a9515a53359743b3777cf5 evaluation-reports/2.28/review-fixtures.json
236
+ f30df161c867d44bac59d0bbceb037e80d059b5570690ee058c6e1656b4d0225 evaluation-reports/2.28/story.log
237
+ e9df850ede23089e59e0ee1afb00902aed17a2c2e96dfc707e9c1a3c4d7526e8 evaluation-reports/2.28/ui-results.txt
238
+ df9dcb8a130f2f3753b5447aac51973464569341e2e6b0a3a4a9984224c93ff0 evaluation-reports/2.28/unit-verified.log
239
+ 7d716bf03d6acfa25ffe49c7efe0ffbf56e5121764b9137459fd9b0fea3786c7 evaluation/README.md
240
+ 3dabd3d3e981c3010d6cc264f930a41ba45c4e65f1546cd8501a4565bf0ec19e evaluation/dom.log
241
+ d20ef67e0a6f45001e97dc61fcae002ad6a9ce230dd4660a8f86d898fdef1e79 evaluation/model.json
242
+ 4095b388935ef7fbf775ea839270ae9b47bb847fe2e09e8f56c3e345edcbb2ea evaluation/narrator-1.7b.json
243
+ 60d5e4f853074368c2aad4dd8696073319a657338ccc35cfb389ff0d4b088342 evaluation/narrator-4b.json
244
+ 11670ada485543aaff3f99cb7e101544b2e008c4a3905bee68c3a83a53a22dba evaluation/reviews.json
245
+ 93808b0313c05f51a458b3e665de02f7e57d3b2a25e5c4c6952ba3b448d922e6 evaluation/routing.json
246
+ 3edb64920b261d74d30ee36375995658b2556838fc71394534b1634d5bacc977 evaluation/story.log
247
+ 00d326c3b7c92c5a92111a264865c2cc33c577c93ee940bd1e4a3b2a93233c2e evaluation/unit.log
248
+ 3cc491209be3088259fc312ffe0cc90d4de3ceff43416b078f0e1390014b9714 evaluation/v210-dom.log
249
+ 6435d03f3cf9f76e03223749c1e82a7748f945b68706710d13206401db648e95 evaluation/v210-ink.log
250
+ 1667413144b63996ae013302ded78cb4a4c9c23be9ea25c2de4d5347dedaaaa8 evaluation/v210-narrator-canon.json
251
+ b09383e8c9035fc069e8744f2b0f3964927919e12bc3b51e129f60f47da9e874 evaluation/v210-review-consistent.json
252
+ d5a3eddafa876ba930b44b6e3ce4561f604d288ecbdd9c196b00a83a4aa90282 evaluation/v210-review-contradiction.json
253
+ fad42fd54507b7325be75d64280cde251f08b8fdc3ce80633501a46b7d0bb764 evaluation/v210-review-disclosure.json
254
+ 7bee2dd5332eb9e6e1be26963574bed3c50e6fbba68d258f624137e6c941b1fd evaluation/v210-routing-final.json
255
+ 56d9ea9f4060d2b498d9f7f06e61f4c759970a045397677852abbc69037e0809 evaluation/v210-routing-initial.json
256
+ eb7b972ef8f6af391173fa1ff14d968e1185ec553667c9277984f64ad9c55b61 evaluation/v210-routing-intermediate.json
257
+ b6e6c94f3412ba68fe26ccc424d5822bc7566d2b090964906c9636e0bdf53073 evaluation/v210-unit.log
258
+ 6a73de150f5f2f7f7338320afdc5e306c916b552516c672c2c74a4dac4d0f6c9 evaluation/v211-dom-final.log
259
+ 9c3899ed9f4e5ecb482e7f4e56e0440295dcb2ce23993b4f95f72c3c7b836a78 evaluation/v211-ink.log
260
+ 5f7d337f0029f3b0c7f98bc9eff57d1420411e6a4effbf233411ad74bf490916 evaluation/v211-packs.log
261
+ e6a7c8eaaabc55bce3a28fa183d37408737a80845b22c1b9bf5a3eacc9082fc9 evaluation/v211-ui-packs.log
262
+ fbf1e19994e342404b3c13d6916be5db20e0fdbf33a79791960b614c6af20c85 evaluation/v211-unit-final.log
263
+ d2e3b65e8dd998a87677b96354e29d0fe7592aa7c636066f4c1650ba203dd88f evaluation/v27-quality.json
264
+ cde9803586030837ec020f2b96393b3e4f2450b9c20545172bdbc2db0a5ebdcf evaluation/v27-screenshots-fixed.json
265
+ 8c119ee7189141e625d12e8ce19a61691e9e5ad7908698259e399486d91f86d0 evaluation/v27-screenshots.json
266
+ bba61171caef081621c0bdae3be876781f479f259f24dab15f7a981589c16620 evaluation/v27-taxi-regression.json
267
+ 0d151ed71c24f760478511a0943338beee50be89fe2f62c5d76c401e9a850f3f evaluation/v27-unit.log
268
+ f356fc6d2f4e4d945d5f9eb41aa473afdcdb3730a845ad894d495466ae323467 evaluation/v28-live-space-v27.json
269
+ a8d8b1e681f71d588659163617cf7ab6bc828893249f62f9aee8c6c909d10996 evaluation/v28-local-pipeline-initial.json
270
+ 05dc3a29145d2234aede5970b3d33308ef55aa03fdd7967ddf912481d9e51482 evaluation/v28-local-pipeline.json
271
+ 2070e17530f55b82a1c2e55385c3e7aa12b549c40060665318f9466ecc791e34 evaluation/v28-routing.json
272
+ 18ce30eb90587f3122783c737f78f12eb27940accb33ad7b8ad1ad18c5e60a9c evaluation/v28-unit.log
273
+ 5f381a9db8c1eb234e46690cdebccc0bd7f03c60fe4b1c10639482fb46c01002 evaluation/v29-canonical-reference.json
274
+ 0dce6731421a2f8cbe6b5185dbcbb0b679e84e2403f494925b7e5696eaab61d4 evaluation/v29-dom.log
275
+ f3a23da16663a0587433735193e5fd4cf12f65686bed1aaf4fb71deec7972a42 evaluation/v29-intermediate-failure.json
276
+ c56d2f690560b6970744615b2adb05391b86ab3abaf638dc7336c14b5171c7d6 evaluation/v29-local-pipeline.json
277
+ 8cb83928d5aefc87ab083b0cb2b804ca0454b4b458883117b9b9c9f62230543b evaluation/v29-routing-initial.json
278
+ 515f1c8b8ca10de5838d585badf837ca5b50389cf4ba4e9e257f0c0d572519a9 evaluation/v29-taxi-final.json
279
+ 7df9482d7eec6e305d20c39fd76c752722efe3e168bb10cec50b490f35469e0f evaluation/v29-unit.log
280
+ d4ddfdf7793db0d6d254251e1dade6df895eec1c898c8199405b1531e9ecfa01 examples/quiet-archive/README.md
281
+ a51cd9eb55ed638ee136f0db206bae645b14a7049b7948ea7a307ff39d18bc4d examples/quiet-archive/compiled/public.js
282
+ 45441710c4ab65668e107892250457132c3bbef8599394ba71c9aab9f8a0bc29 examples/quiet-archive/compiled/story.en.json
283
+ 9188a01ad0bda7b6b5618b09b97d5a447dfa15124ec683bc3bd41601733f57fb examples/quiet-archive/compiled/story.fr.json
284
+ aeb921a9ec666bc274e5522de9f4158afc02143a2e7630993e099ec2766aa5de examples/quiet-archive/decisions/choices.json
285
+ 7bcf458e3b1ff8b4d93da32c0c7e1f4a97112fe9fc45be0e3f3e6d6f1c5818b6 examples/quiet-archive/decisions/narrator-actions.json
286
+ 55f92dfe3cc68bd32ec7b39b3274ccb3eb62df685b182fa5b84f5a016a7d274d examples/quiet-archive/manifest.json
287
+ ef54045de095cbda5ea31bcb2cd2b4b0f76981b2342e5e7496cd83719019f27f examples/quiet-archive/mechanics/challenges.json
288
+ 585d598be8d57a6c0cdddee08c0f7f85f3a433d27d8dee101c533bee722c33e1 examples/quiet-archive/narration/dialogue.json
289
+ 04083557ddaac9e17052079ea04098bfc3aba5b935c9ce21c981aeb950d405f4 examples/quiet-archive/narration/responses.json
290
+ 7ec9c4d66303970347e6b8d81636a1e1a8c6ae25c052a34c2bf96b43ceac1ed4 examples/quiet-archive/narration/voice.json
291
+ 0b087870bb3720c64daa05807364129d4c83a12c01251f7a09c48c37c69ab10e examples/quiet-archive/presentation/cover.svg
292
+ ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356 examples/quiet-archive/presentation/messages.en.json
293
+ eea830efb80cdb4e76eaa38f5c24c7613444aa071f2ef38b77f858f70155a19a examples/quiet-archive/presentation/ui.json
294
+ 71f47b6c90746e9f3428f1fcb5822ea1db201d94c523847ad00d37e726f43296 examples/quiet-archive/tests/answer_contract.json
295
+ 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 examples/quiet-archive/tests/authored_responses.json
296
+ 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 examples/quiet-archive/tests/conversation_cases.json
297
+ 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 examples/quiet-archive/tests/intent_cases.json
298
+ 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 examples/quiet-archive/tests/narrator-cases.json
299
+ 37517e5f3dc66819f61f5a7bb8ace1921282415f10551d2defa5c3eb0985b570 examples/quiet-archive/tests/response_selection.json
300
+ aaaebec1009f65279970b8a3e3bf80d35eccc9700aab2a350a713e53452c7dae examples/quiet-archive/text/story.en.json
301
+ 1967588bef04011825c5d9073ad2fab5d44d8c0b6fee12a39a2f91005b496688 examples/quiet-archive/text/story.ink
302
+ 0f2dc00c1d310056b9de7fa2f89b3c01676df5daa9c082d05521615ed67af67d examples/quiet-archive/world/canon.json
303
+ 0f1a28c1a12ae3835942235fef6af9200169543f606b65b66d2c35eb39140282 examples/quiet-archive/world/characters.json
304
+ 4939ab26ad2a0740946bce25eea9e15424ea676dc148780a5e8e85fdb51cc85d examples/quiet-archive/world/notebook.json
305
+ e654dcf1c64230247e11177d6551e7fdeaf68feef02b10880583092f08d24774 examples/quiet-archive/world/scenes.en.json
306
+ bd649488d3ed27590bb4a490c2a42729c054f6fe568e0e6ae3b278354cc1288f examples/quiet-archive/world/scenes.fr.json
307
+ 040e957a77e3e19432e265cb549d5c3b4ca6f3551e24d22b81785ffd1bc2b67b licenses/inkjs-LICENSE.txt
308
+ 07a8cc7cb31bece5c512cdff8824b9efa8072aa6a892262aa3d9d03cea7f7b9f locales/messages.en.json
309
+ dc939a54c763c1bf5ea22017df13039d9972e21d1bb83e3517308d24aa537241 locales/ui-runtime.js
310
+ 8fc1e730af1738028c81e333b35a209f257a4e76d9f6bf1f0b77aeb166b08b7f locales/ui.en.json
311
+ 0d231a8b4089e28ccfecff9bba34500acfbc10fac1368f44e663abbda5d5a970 localization.py
312
+ d49daa9664cbfc853ead28e3752bb419fa03b7ff17935b1ebbcdf4778b4e15dd model_config.py
313
+ ffc4fc9b7bbc5ae96453883d2bc680bf59bb9a36fab0b3c293e7405c112ed525 model_warmup.py
314
+ 3732ab9a75ee03cd7da3a1ed69492a4ba0f25e7d62b27d09d9c76c2bb45401ba narration.py
315
+ 99b408b5482bfc7b756bc4b60f0acb928ae1f65f27f213706111079c0b707c5b narrative_contract.py
316
+ db1e9bee2608d7dc1009c70cf0a7207f3b8969be2722ed98b004ff901365b381 narrator_runtime.py
317
+ 536a2075105b7ccf2b0b49b006f1c6a1de44753687155f790f5fad99603ab873 notebook.py
318
+ 4aabccd4a569ca54b995b13ad0a4a3af76025227e969b45cc311e8c01d067130 pack_responses.py
319
+ 3d0b795a8060298a5df6a7079a464845806d7c3376b426c66dcd047e8adfea83 package-lock.json
320
+ 55aa13826c146c27954fe448c6b6b6986f30ee2d38d4929880450cc9fe282d82 package.json
321
+ 983bf8ac1c86a5d6f7e0970e416430de621649d945915beb5eb721ebbceddc70 prompts/narrator/conversation.en.txt
322
+ edc9caa43883ef26587a50988e4df5ef46c8d7f5e05e68bef132e06a1b4bf89b prompts/narrator/conversation.fr.txt
323
+ e1477962c719bff18dee98a1a65f7fa0792d0afad99716480c695a652f962ff4 prompts/narrator/transition.en.txt
324
+ 97e6d48dad7c69e07b8b3d684755c635e6468918a1cce4a228f7d9fbee186010 prompts/narrator/transition.fr.txt
325
+ 57fc367655c28eb0a8579f86ce2945289382480eb9fa818fa121ebf7822548bb prompts/narrator/voice.en.txt
326
+ 856c1e9c5772030b37ed1f0e9f09a115b39b2ff796470cd1f69e699d94b4a63b prompts/narrator/voice.fr.txt
327
+ d29ff99ef92e3a3b6437dfa0da3c498fb822e32f082d64211b54ea3c59a9ce8a reply_contract.py
328
+ 4d960ec64598a2699971d4ca5b2e4c358b0e0923df911b7f4c448187dd9fc4b5 reply_review.py
329
+ 860ab73ec874e98df3218a1ab7820c2cefc7a1ecdf276a82722a90ba28c6f640 requirements-dev.txt
330
+ 8f7de12fc7f320e0932d2c553a5646b4bbad3d5f36ac24cecd073529073d3e80 requirements.txt
331
+ 5b555e7932fd2ee6603684db46e6a117086e32a1cf3cd529927fff9547f808d3 routing_catalogue.py
332
+ b5d8d8e76b796a2310f6be7b14ccb2521a269ff5d416a44fbf0ad42c7a5ec9d6 scene_context.py
333
+ 6f9db7dbc80d8c9fc00070e7f8b22606a7b06107e85600084e5e387611e6a0d3 scripts/benchmark_narrator.py
334
+ 40bb2033ca7127441206042009d7baa2464b880f47c9163e76b1157f671ca2ec scripts/check_answer_contract.py
335
+ c67f8b5a82d1fd4939aaa37506074019a1bc87062700e5ec329ecf50b269a801 scripts/check_conversations.py
336
+ 153b856d7ff63c53ed965ef1fe83ae467c8761a1980f03154212820a1a9041fd scripts/check_fourth_pack.py
337
+ 8a9c1289c9ff937b132ca06ac789d7291c14a5cafb2a1aba576a86cb5ec743a4 scripts/check_model.py
338
+ 5d08a74f81a0493c9fe0d958f03717edc89b2211fd06eff38ee736b4052d2bb2 scripts/check_narrator.py
339
+ 49313f2cabe8f7f716fe940643b73bb11ff4428984b3b866e64ce4abb00f75af scripts/check_pack_responses.py
340
+ 634a949352b80e1837e192ca286322c54ecb89827e7afbe272d174646da1d21a scripts/check_relevance.py
341
+ 7d1684b55a1b440247e98ff54a34b214f618d9ef3cbad639b0ef57eea4eb0fcb scripts/check_reviews.py
342
+ 137666d49bc6d5280639181575dae478222ce1c46fe51ee1c2a9c1ff3ee22768 scripts/new_story.py
343
+ 2ae0f66e63aecd8f8c6d1a2f879108123c60bd519309f689bc13f57833e97e18 scripts/session_pool.py
344
+ 1b5e7e90caf8cba2432a1f187758466a50f2359ec7ac31bef84e295a4801598a scripts/validate_stories.py
345
+ 8ec195e04e4871f640864ffa3f71ee152024cd18047d9b19e3e6984c5dc54d8e static/app.js
346
+ a3c1f2dcfdb8541d3c170416bcad2f0b9b56c94080a2e32c3c467f352c719cc7 static/i18n.js
347
+ e8432122b3faa5627c64c6548e6c00dfb9e25c8834fa2754bcb5b2a97bc5d469 static/index.html
348
+ c04fca30a0de1ff071a3bbf201f76420d2e098b7140698eef9ee6dc2c845f026 static/style.css
349
+ c0dec310de3d8cd445a1738e00cac0ee6b7b7bd19f7c6f260332d4e6f8dccebb stories/README.md
350
+ 4631a574765e8b77143843b35e94326344b3853ec7cffa1f22f6f8d91a8c172f stories/last-departure/STORY_DESIGN.md
351
+ e1d2fc7d44b07a01ff5264d63209c3b145b7450e5dd55d14436a71500941f845 stories/last-departure/compiled/public.js
352
+ 7e898fdddc95855d41be0c10a2b73201610b32bb58e568811f3721d3ea69473f stories/last-departure/compiled/story.en.json
353
+ 13276b54499e40ea92e1a6839399cbe66a7c222307e37a8a954db63ff622c111 stories/last-departure/compiled/story.fr.json
354
+ 7061dd6a300e7edf44529c9e6f67378128f0c9f0e5fa40dc9c81250524b717a4 stories/last-departure/decisions/choices.json
355
+ 4fa12830cb1160d45322f87ca5fb19b4d7b5edebc861b609edf2d4b43313b0e6 stories/last-departure/decisions/narrator-actions.json
356
+ 96df29c890a1d35375778cca3d8853f1a1102f0d9fc01d6b70ab656f5ecb301c stories/last-departure/manifest.json
357
+ 42aa8aed63d679be8e17994da6e78e16ce482a5713007ac05f30f655707eb4e0 stories/last-departure/mechanics/challenges.json
358
+ 42d02cb8666db6aa951a6e1e46ece511b00aaeee0468869533e84cdeadd1fe20 stories/last-departure/narration/dialogue.json
359
+ 575dbec16bf036ae001cd5fc07fc5aa051273c59616e52d109dd41ca66eace75 stories/last-departure/narration/responses.json
360
+ 209e1f13185aafa9c796eb26938d76df37e946c9a5afb45fd82f65f98fbce135 stories/last-departure/narration/voice.json
361
+ ce1ec7a17ed0f2906ae083f327c667342ab8039bbb3ce47fd5cf9551a19f60da stories/last-departure/presentation/cover.svg
362
+ 3cf126008d8cc574c4e64adca602f12e85dc25eb8251788c4417e94383307fa3 stories/last-departure/presentation/messages.en.json
363
+ b3b1127f797bc13ab32955e37be1afa94202e69d6f3d43ffb982a8180719cb0a stories/last-departure/presentation/ui.json
364
+ 2b3574f8e7209fb58833ff6b1d22779a9ba093e82d60f21a7f1538a8275c6d75 stories/last-departure/tests/answer_contract.json
365
+ a8d1153edc8f9680d38fd84b07d202bb5e1844e9fa0b7dc33810f52f7d864a7e stories/last-departure/tests/authored_responses.json
366
+ c0e085ed8cd3cebcf43977732cf4c73fb9f6122338c30c040154bbd5e3ade471 stories/last-departure/tests/capture_conversations.json
367
+ ff605f0b57cde991222ad1cd62a6189bb0bc0bc1faf0a43f9315ebaea5e44b4e stories/last-departure/tests/conversation_cases.json
368
+ d4d0f2987520a1fcd086fc23666ac06b34080300b46283a5646d40c3cb95987c stories/last-departure/tests/intent_cases.json
369
+ 21c274ac6d13fa59764c6f08b71698457c84e9e2372b32d6d388c7dbaa2a3743 stories/last-departure/tests/intent_confirmation.json
370
+ bbb85c1d4fba0e1bca99941c57ad755adba60ba05d89feeb85ff837a2a60d584 stories/last-departure/tests/intent_holdout.json
371
+ 4dbadc1b4537a365d9695cdf3111399d5c68b23ce60626c3797d95278adc9feb stories/last-departure/tests/intent_screenshots.json
372
+ 845d5abae65f8b006a387d899ca9c42a4354bd51c192be3556d9233d18085b26 stories/last-departure/tests/intent_v28.json
373
+ e3e4c58093890b16ae0b04bfb3b01d1d8aeed4c603f1058bc55a0a3592e5f148 stories/last-departure/tests/narrator-cases.json
374
+ 81d171cd8a31b69088cafdaf716153deea015d628ef1569cf830ba9f3018e893 stories/last-departure/tests/response_selection.json
375
+ 42e72e34368d9fbb8aee919aee44cd24d7e1ae823c09a8a8bae25ae5015c6c44 stories/last-departure/tests/v29_route_cases.json
376
+ bf61c93927f0f6fc627564aa3fde922de3aa7592464faecec1316ca38d376d7f stories/last-departure/text/story.en.json
377
+ 0de6aec9bc676b777922615a82fe5d4a519e3bc62922e98a48fe58dd7c9711b3 stories/last-departure/text/story.ink
378
+ bb9b4fd28797fa57bd126a305a6434898c0ea63bb66b460b23f90b902ddc05f0 stories/last-departure/world/canon.json
379
+ 6c836c2775d763cc94481df061f8def876b43e50dbaa431fd0f8bb795dcc2db0 stories/last-departure/world/characters.json
380
+ a76461d62bc645b87e338dab2c96da87ba30972bd6c13ba80a23f9278a90eabb stories/last-departure/world/notebook.json
381
+ 0cb0dbe8a42a0bc42ec60a033bac271cbc89b7c61dd194a2a441212ce93debe1 stories/last-departure/world/scenes.en.json
382
+ 8a057e393b5a5a9d12f527ab2b7e3e230a5a6530ad61670cfb25db855f42e718 stories/last-departure/world/scenes.fr.json
383
+ 7a315a5d9d25e5a14bb665280e060598553cc3c2ca27fb465a00c5a812f27b35 stories/red-creek/STORY_DESIGN.md
384
+ 2123a49c6c9431b865d3381080204e8d5f627a3c8748f266070f5fe846c400bf stories/red-creek/compiled/public.js
385
+ 797055daa0f42ddad03c0f19dc3c09a33eb07f2ea1dbe4a3944a273535e67eed stories/red-creek/compiled/story.en.json
386
+ b21c77034ef7c4564f3ad7ef99c019d7288ad5da8c8d8ee017b9af8c5628e7af stories/red-creek/compiled/story.fr.json
387
+ 1a223db44ed7ad97c8656ae0b6ffd6295cc196112751fe2841f72a7a2c7b8ef6 stories/red-creek/decisions/choices.json
388
+ eee970080753fd4e1848539915a8eb118e74c1051f137ef85f4e3b2d4e207ab0 stories/red-creek/decisions/narrator-actions.json
389
+ 5f535974bb12d67d8f53edffb19be9f8312cacce63ed0d054269ba73e40886e1 stories/red-creek/manifest.json
390
+ d86f179d08205e5aa31b951c7dd827bda4ddbdbb2f8b8e63992766ed8f01db28 stories/red-creek/mechanics/challenges.json
391
+ fbbb38ef04aeebcaa36f1e6e81bd1a1d85e00e14177156e0e9c7d617e140e292 stories/red-creek/narration/dialogue.json
392
+ 04b4f9d9471d2e3e03ebf2bc810138bf4b669c795723a67bdb73d552d23b3803 stories/red-creek/narration/responses.json
393
+ b84b3ae844a645949729fdc95f8c681d2d59fbb2401ddff72e4b384f97a8ee75 stories/red-creek/narration/voice.json
394
+ eba96b52e71f23e0e19a68886cd48666c0bf3710b22acd2ae3782648e195e083 stories/red-creek/presentation/cover.svg
395
+ ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356 stories/red-creek/presentation/messages.en.json
396
+ 8d48cea49c32502cef7bf8f4256ea551d4bd20ddcab0534a38ce0e505985b782 stories/red-creek/presentation/ui.json
397
+ 32970c431fd67900fa856ab09d84a2b982a6cf86ad986257f79cee6c5c980e89 stories/red-creek/tests/answer_contract.json
398
+ a7f5c1f8e3c3246311f83445d59acbc970eca5fd0b0de6df0c835f1215e4011b stories/red-creek/tests/authored_responses.json
399
+ e14f4937694715c81628a8b9bd1fc7b3518f3a5886251329f6899561538b1be0 stories/red-creek/tests/conversation_cases.json
400
+ 711aa42c9bbe3a07454e4fd9222dd122e87d99dadc08d17f252364b818175833 stories/red-creek/tests/intent_cases.json
401
+ db0915b0c1359a7d9c17e8584b8088c078f2616299826bb32a20342c73198729 stories/red-creek/tests/narrator-cases.json
402
+ 71e5310b1bb20624705c133c994729cec540c9a29c905ab7c5d45b62c1d7be0b stories/red-creek/tests/response_selection.json
403
+ f02e5d1ae8e17bf451e03624821444795d577aa34fbc0a5067d8891e59888fa6 stories/red-creek/text/story.en.json
404
+ 99780e598b767c79aa32c4781bd95f69f1945db801be32b46421eaed29607128 stories/red-creek/text/story.ink
405
+ 2c1e11d140d0257630049c64d98b9cb5867c97cba5cc8fd9d8c32b34424c5133 stories/red-creek/world/canon.json
406
+ 63a284d447a5ab9707ff7653e3ae7e17edb09911e8b97de8af5b074611867e7e stories/red-creek/world/characters.json
407
+ 5363f285dd11ee65c0dc79ceb40b8523b7071fdf82bbe64b1fbab81b79f6cf76 stories/red-creek/world/notebook.json
408
+ 6ba70a8f18f80a8655db07479f26ab3b741375b815edbc5974eaffd45a301ebe stories/red-creek/world/scenes.en.json
409
+ 6c4a65025a0a750b76ffb4460bd36f8194b590212b8ae132ed89b41706f1f8cb stories/red-creek/world/scenes.fr.json
410
+ e485fb496c2d4edf312d16364d50aa3adb4a991f46ae2d0d8631ba927be712ef stories/the-last-light/STORY_DESIGN.md
411
+ 393691b2ee41aba7a1f0969ec4cc16bc4d12fed52844d0697ca6f75f47cfd1d5 stories/the-last-light/compiled/public.js
412
+ b38b8d5fcfabed11c393a6395ac1a259074e54447aaf8009181da743827b8d5e stories/the-last-light/compiled/story.en.json
413
+ 3c1e67ff98b59910c9bf0944c60cb09f7bf3b7c9d6b0b872db85a32902240665 stories/the-last-light/compiled/story.fr.json
414
+ 867aaa7b914639df41c17534e5991311c0ea60fd2240377ffb3bbc620cd9c800 stories/the-last-light/decisions/choices.json
415
+ 8817eba4f70172be0ff6f02b92a874ab8a743246c890fd0c33fe03d7ce311ead stories/the-last-light/decisions/narrator-actions.json
416
+ d5909b19d676bd8310876ca009b1723a7ed163d3814d30ff6280841cf4bfc87a stories/the-last-light/manifest.json
417
+ 42aa8aed63d679be8e17994da6e78e16ce482a5713007ac05f30f655707eb4e0 stories/the-last-light/mechanics/challenges.json
418
+ db6315e0521f01705627500d1c3e28666e9a7ab97e0f0752e7efcfc548445e28 stories/the-last-light/narration/dialogue.json
419
+ dab9c69a675c57726a1fba0f2a475f6e849b8f4638260b33a550af3623fd513a stories/the-last-light/narration/responses.json
420
+ 3f04f71e12d004b0d495a4c0595b6347c68c28dcced631dbb3a27ecdd90eabe5 stories/the-last-light/narration/voice.json
421
+ efb02be48128df361bc95fbedc5f4130cf0e48f4a83ee356867819ea449dedd2 stories/the-last-light/presentation/cover.svg
422
+ ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356 stories/the-last-light/presentation/messages.en.json
423
+ 15227b4f4e40842fde1390355091d3cf2dcf2027c1cfff735eeb772e99554707 stories/the-last-light/presentation/ui.json
424
+ 71fb32105cfc9c39c91daa0fb7e97164aeae9e68347749baaa3dae43f3d64576 stories/the-last-light/tests/answer_contract.json
425
+ b35e9bbb0b633e4558368ef3102359d269a94bff34083f94f7777a75b7005e6a stories/the-last-light/tests/authored_responses.json
426
+ 238044fa919e6934b7a3c4de7918de0f4f5a74887c873a8e7c801887983e0b2d stories/the-last-light/tests/conversation_cases.json
427
+ f4f709ca16070e086d1a5cb9e7fa0e5cf85517ff4b343f1571417c19a61404a7 stories/the-last-light/tests/intent_cases.json
428
+ 9a35cd4be12ab18721bd5af2b8b0cfc0ab48b00e5accf9f2df2b4f1da0ea3aed stories/the-last-light/tests/narrator-cases.json
429
+ 4d32731d390e0fba6534f00d7c5025600d62969ff7124ba41b0cbc53f063e7b9 stories/the-last-light/tests/response_selection.json
430
+ 40da723f096b8ff0b21d3e10fd2714bcd86a78437b53c2f23b377dc5dfc9e11f stories/the-last-light/text/story.en.json
431
+ 3e1d88342153d935ca05e6387a2720beb0354f4fe87d8890024e92780a643125 stories/the-last-light/text/story.ink
432
+ 8f1abd7f843452601a80bcd286e725993a71af3128a6cbde331607cb9e491f96 stories/the-last-light/world/canon.json
433
+ 811937efec5b6b23f94f0358f2a51c15832e85efa08f75a2d015871db744dfcd stories/the-last-light/world/characters.json
434
+ 66cacdf22f6893816d66c66c9087ab3b5c7bc37120232efa0c5f4712c51c1b24 stories/the-last-light/world/notebook.json
435
+ cc6aabbdd951ecead9b5370f5b07f2bb9cf42711e64f905d770192e2a228f736 stories/the-last-light/world/scenes.en.json
436
+ a531eb1510b5a9e9d807fabb8526c10462ec03087af788b3e2ede0718b2c6876 stories/the-last-light/world/scenes.fr.json
437
+ 264a6e86430081eb3cfb348b9dbd49debc52bfe7bbf25fec29e9926f90cec94e story_contract.py
438
+ 0f17039dcafe867c3583e11e615d4daa48ccb7fbd3e870df7f563b3ea4c756f7 story_knowledge.py
439
+ 363c680ee3ae2622050e1ee32aa321ff34ba1ec14509bcb0ccb26ea9dd08af36 story_pack.py
440
+ ba2c0f70fe83ceae920ca214182a45d8861d8af832fbeeae559e20044be8c0ad tests/fixtures/answer_contract_v227.json
441
+ 2e1971f77e171347752389f699d7ae5117c5976e8ac453b0bca77053c5617b05 tests/fixtures/authored_responses_smoke_v220.json
442
+ eec6098107da24812ba7e286ec8d8917d544cbf0e38e85f9d6611dd5767d5062 tests/fixtures/authored_temporal_v220.json
443
+ e65fdeaeafaaf8f6743de1459403ef91e87af8db15fcba007b4d2ccc262d2daf tests/fixtures/conversations_v228.json
444
+ 706bd0418baac02725052eaaa12f7ac4c11508d3dc3d0394688fad166a06fde6 tests/fixtures/dialogue_reviews_v221.json
445
+ 5846f16f465d2f841001d9cd4bb00c1d57329803e00f7c03096545bbd922c0fc tests/fixtures/dialogue_reviews_v222.json
446
+ 1e13c0de18863ce46ce92f0fe31b9c22f72e9339b0f4f3ec6d6581b37f35e07a tests/fixtures/dialogue_reviews_v223.json
447
+ 32098e5df90128498f3232650aee0fa87118c4b9681f5bf1e15bc2b22b1cc004 tests/fixtures/dialogue_reviews_v224.json
448
+ 8d603b983608c4a521779efe399972459738c40500c865f88248e07102334d11 tests/fixtures/dialogue_reviews_v225.json
449
+ 8d603b983608c4a521779efe399972459738c40500c865f88248e07102334d11 tests/fixtures/dialogue_reviews_v226.json
450
+ e37c9576c532632a9529160137708713527833a2d6dcd5a9c3e003df5fc13a01 tests/fixtures/dialogue_reviews_v228.json
451
+ 59c7dbc4ab9b60050afa2ef3c97957f0736f5249348e06124fc679e01e457a90 tests/fixtures/dialogue_v221.json
452
+ c1a393a57dfb12538b23b9263c798c5e1ba7c7cfe11353a941091a0625cd78d1 tests/fixtures/dialogue_v222.json
453
+ cd232daf4881234d99e78778b20da233d4bf989f36049f0446b8bdfb8d705c92 tests/fixtures/dialogue_v223.json
454
+ f01f571ff021fa6ede637041428cbd98b63569ebf70e4cd9d18866e317df62a5 tests/fixtures/dialogue_v224.json
455
+ 40b2a400c2c186d400507fdbf47e5987f3b0d08cb7c20e9ea4ea76570a2f7395 tests/fixtures/dialogue_v225.json
456
+ 40b2a400c2c186d400507fdbf47e5987f3b0d08cb7c20e9ea4ea76570a2f7395 tests/fixtures/dialogue_v226.json
457
+ 4bae0eb58fa2ad24d2112abce52297739049949d9e47f0fc8022e9bee64a8139 tests/fixtures/guard_contact_v220.json
458
+ c9388d34f19a254cf0622e0f5f6656a715d8275e04a157b1cef21b8e11ddb835 tests/fixtures/holdout_v226.json
459
+ cfe3bcea0a16bb2fd906cd2b32180a86746438aa97aa302687f04216dc755d75 tests/fixtures/live_cases.json
460
+ 84256eb3dd6aa40a6dccff49678325e3dee73cec24aea43b9aeb805462ea2d91 tests/fixtures/live_cases_v218.json
461
+ fc01c7287f59f3fe689fe63591453cd3d23883896be393bd99de08bcd68248cb tests/fixtures/live_cases_v219.json
462
+ 729753b1cc1421ddf0ca846981ee02b58b3913e71a57e50b3cb7ecbf5f8c6cfa tests/fixtures/live_cases_v220.json
463
+ b2ca4aefaca63ebb608f1031c869567269a93f180c6d758c4ffce592b8a22fea tests/fixtures/live_cases_v222.json
464
+ 715ded380d741bc2ba4d49b37962bd0335c3033b93921c262b4bdca1bf5e6aa1 tests/fixtures/live_cases_v223.json
465
+ 98545893a1a66fef11d43442604fc6e65691eafa78de4e5155789320dd77b4b8 tests/fixtures/live_cases_v224.json
466
+ 1f7824e72ee7b5e5340072994ea3a511e351b86e47e8f44db0cb44b37b0b81e5 tests/fixtures/live_cases_v225.json
467
+ 1f7824e72ee7b5e5340072994ea3a511e351b86e47e8f44db0cb44b37b0b81e5 tests/fixtures/live_cases_v226.json
468
+ 99be0a87751fbc3cdc4ef839a8ba107bd54c3e65b0414720efc768ed971f1cbc tests/fixtures/narrator_v228.json
469
+ 60a9d14cedbb3cabdf3547ce669e68255e49a9d2c741684024f7713d6ea4de70 tests/fixtures/observed_v226.json
470
+ b95db594546f3800cd78f3724ceb87e58d779b25d7f2a66f41fb9f947c72b365 tests/fixtures/probes_v226.json
471
+ e6f9661fb4ac8ff19765e79631fed68cc5b203b1745305058db2c5f50906eecf tests/fixtures/regressions_v227.json
472
+ 5efba06f6e11c2d7a439de79ae3f540bdc49e6fc96a903f9cc7f87ceee800956 tests/fixtures/relevance_v220.json
473
+ ce673810f552874411573c7e84445dce98e8c4dce01afdb90a841d3cccec0355 tests/fixtures/review_cases.json
474
+ 2b82dc799c3788587556b1126c358d1828f3fd239451b4abfc4d5913b9531c53 tests/fixtures/review_cases_v216.json
475
+ 68f9795acbeed289d62ffff3c33db390e9cd4e09fc040217ef70bd2ee09517ea tests/fixtures/review_cases_v218.json
476
+ 9d0d27fb0719583e60758ce4380fe343c8e86e9ae698e19c0fccf2137c591797 tests/fixtures/review_cases_v219.json
477
+ 196eb68319f608fd5754cd07148611c46050f5cdec811a3635f389d294409b73 tests/fixtures/review_cases_v220.json
478
+ b638d42c62dc86141cd2f7fc205aa318a4fed5b86f9556b10c825c41a3de8225 tests/fixtures/routing_context_cases.json
479
+ 284f512e961444063c86817c98f106feb87fd643ecc945949db64eb15a6bd65d tests/test_app.py
480
+ fa0b12b77622d46d392bcaf9b7bc7719b6a8d3c61c48910704584cf516975f81 tests/test_browser.cjs
481
+ 8df4b506cc5377527f6406e02f141d59ccd0797b55a494e4cec0b21d1cff09e1 tests/test_canon.py
482
+ 708895bd396431f74a5eb4bb13ef2e506ac3f8d6843c4f0a8fa55b07a49a020c tests/test_dom.cjs
483
+ 94290c79fadca594f760326abc52848880899736d601aa77021d818ce5ce991b tests/test_library_ui.cjs
484
+ cc3bc42a60fb83de03ee7f03dc39e7c1e4a31531950c2e75faf2ade1a1f04096 tests/test_live_regressions.py
485
+ 847fa4a739c737a777211df21d3082a56e07fbb44e270cf7e4f43c7025eefe7d tests/test_models.py
486
+ 95e5463a4e26ba841a2dc83b6c6f9a91cf27aa66eddfbe5f71258b0fb474ced1 tests/test_multi_story.py
487
+ d3d1131633fba4da9e12a91543957227bb0385d97bfaa31788305d562fbafbfc tests/test_narration.py
488
+ 8f1fc732ff72f08e171d1c60e75230fe6e3f99902e22f9672ed8cbbcad3bfb3c tests/test_network_ui.cjs
489
+ 1859909ea5f89f84262efd99cac0a2e2ae3d259d30d5ae118b92cb6fd6b6b66e tests/test_pack_generalization.py
490
+ 6029385edd1090a7d51d4225ac1e79747911134e1b2c4f3a46bf82d44f37a6e5 tests/test_quality.py
491
+ 648b5dbe1becc5c176f8dacbfb2a8a8621379b3b3e139a7a4ecf99891993c8f8 tests/test_response_selection.py
492
+ a7d13ef7dcb0185cfe5536d76c2142f83f23910416f8903d71526a4b04286e98 tests/test_settings_ui.cjs
493
+ a30c6997a5ea7a0bb79091e23df8cc9099b3a2a2affd424bed540f80dfce3663 tests/test_story.cjs
494
+ 3d64f19d493481d4959955da1bbcb9c6852d8f94b3a6205847f393567c0ed7e6 tests/test_story_packs.py
495
+ af7cf15c2dfdb7f589abad5668d087cc856cbb39bfdb80976679495da54c5357 tests/test_story_ui.cjs
496
+ 8a898f613740c7cae344e9f41b55c496ebb746521beed401ddde3916c6bae073 tests/test_streaming.py
497
+ 2613afa3e1ec779f3256e1daeb7e2576775b74b23a9c52e68d1f0b61afdb2b8e tests/test_v215_regressions.py
498
+ 260a7005af910439dab91ba144114f342460e42395f4631cbe0c97161bac0d17 tests/test_v216_regressions.py
499
+ 77a2520db2f9703ffa9f1ff9e9477e8c8284f02d578042c07fcf6ebc41db4c3b tests/test_v217.py
500
+ 9fcf2f4ad8aaf80b83c31c9da4d79c4e95c12cdc4c7ee7a275a81d612a0e4672 tests/test_v218.py
501
+ d22f93e4c3a9cd354aba7f802f43120051dc23bba17ba97ba6d7f1e006a2b975 tests/test_v219.py
502
+ 483d001aee229456d03abbccac2ad43573a4d8f2c58129c098362565f77fc203 tests/test_v220.py
503
+ 0a9d26ee46eb4b53d83dd5f351702a0452053d479066df16a7e58cd669af97da tests/test_v221.py
504
+ 8ee8ce6fa3f5acb270442d7609231cee195437b11f8326d4e026e7cfd1265831 tests/test_v222.py
505
+ f253fcd3ce111d7acba003eb67a2956e29c57b32f8d1a8cbb36abd0dd3f70fb4 tests/test_v223.py
506
+ 1dc20760482071f0a425d025c0e9009c7e2b542a24a59890fb93f37c77a08e35 tests/test_v224.py
507
+ 905b8b5453a2b4deb5f7a51cbd1289d354b0300b361f268ee686317c1315265e tests/test_v225.py
508
+ e4e24e81dae709cb49954472083c6ba36f6ceb1192fce6eae1085fe8e51a3814 tests/test_v226.py
509
+ 5f3977cf1c7579309c2c5050c04c680513da7ed3b72c3383b36566acf46c3059 tests/test_v227.py
510
+ 61f7a5e226a232679526175781e4d48c44dd2db7e3995b6b758c8e9fc6a376c1 tests/test_v228.py
511
+ d486ce1dccd346ff686a3daccbaf948764597ce7b35171cdc7ade41892dfd3fb tests/test_western.cjs
answer_contract.py CHANGED
@@ -58,6 +58,7 @@ async def select_need(frame, intent, invoke):
58
  margin = probs[winner] - max(v for k, v in probs.items() if k != winner)
59
  return {'status': 'ready' if margin >= REVIEW_MARGIN else 'uncertain',
60
  'need': winner if margin >= REVIEW_MARGIN else None,
 
61
  'choice': winner, 'probabilities': probs, 'margin': margin,
62
  **usage(raw), 'latency_ms': elapsed}
63
 
@@ -67,3 +68,10 @@ def needs_match(frame, needs):
67
  # contract even when classification fails, in which case it cannot narrow.
68
  need = need_for(frame)
69
  return need is None or need in needs
 
 
 
 
 
 
 
 
58
  margin = probs[winner] - max(v for k, v in probs.items() if k != winner)
59
  return {'status': 'ready' if margin >= REVIEW_MARGIN else 'uncertain',
60
  'need': winner if margin >= REVIEW_MARGIN else None,
61
+ 'hypotheses': sorted(probs, key=probs.get, reverse=True)[:3],
62
  'choice': winner, 'probabilities': probs, 'margin': margin,
63
  **usage(raw), 'latency_ms': elapsed}
64
 
 
68
  # contract even when classification fails, in which case it cannot narrow.
69
  need = need_for(frame)
70
  return need is None or need in needs
71
+
72
+
73
+ def need_priority(frame, needs):
74
+ """An ordering hint, never an eligibility or disclosure decision."""
75
+ contract = frame.get('answer_contract', {})
76
+ hypotheses = contract.get('hypotheses') or [contract.get('choice') or need_for(frame)]
77
+ return next((i for i, need in enumerate(hypotheses) if need in needs), len(hypotheses))
answer_dossier.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """A bounded, read-only brief built from public state and inspected candidates.
2
+
3
+ The full eligible catalogue remains available to retrieval. Only the final
4
+ generation brief is compacted, after the non-destructive authored search.
5
+ """
6
+ from reply_contract import sources_for
7
+ from pack_responses import authored_reply
8
+
9
+
10
+ def build_dossier(frame, intent, selection=None):
11
+ from scene_context import recent_exchanges
12
+ selection=selection or {}
13
+ sources=sources_for(frame)
14
+ focus=frame.get('answer_focus',{})
15
+ refs=[]
16
+ prepared=authored_reply(frame,frame.get('_prepared_factual_recovery'))
17
+ if prepared:
18
+ refs.extend(ref for part in prepared['parts'] for ref in part['source_ids'])
19
+ refs.extend(focus.get('source_ids',[]))
20
+ refs.extend(focus.get('candidate_source_ids',[]))
21
+ # A question ABOUT an absent person still has their public identity sources.
22
+ from scene_context import scene_contract
23
+ identities=scene_contract(frame)['character_profiles']
24
+ for person in frame.get('dialogue_plan',{}).get('subject_ids',[]):
25
+ refs.extend('fact:'+key for key in identities.get(person,{}).get('fact_ids',[]))
26
+ refs=list(dict.fromkeys(ref for ref in refs if ref in sources))[:8]
27
+ return {'request':intent, 'previous_exchange':recent_exchanges(frame)[-1:],
28
+ 'need_hypotheses':frame.get('answer_contract',{}).get('hypotheses',[]),
29
+ 'evidence':{ref:sources[ref] for ref in refs},
30
+ 'prepared_answer':prepared['text'] if prepared else None,
31
+ 'prepared_coverage':'partial' if prepared else 'none',
32
+ 'scope_findings':[{k:c[k] for k in ('candidate_id','choice')} for c in selection.get('scope_checks',[])],
33
+ 'requirements':[
34
+ 'Answer every substantive question, separating a premise, a refusal and an expression of anxiety from the requested information.',
35
+ 'Use the explicit epistemic kind and limits of the evidence. An observation is not a motive; an intention is not an accomplished event.',
36
+ 'A prepared partial answer supplies a starting point, not proof that the whole request is answered. Fill a gap only from authorized evidence.',
37
+ 'Keep uncertainty specific to the requested fact. Missing evidence cannot prove an invented cause, denial, promise or outcome.',
38
+ 'Write short sourced units. Keep independent assertions in separate answer parts so a rejected addition cannot erase every useful answer.',
39
+ ]}
40
+
41
+
42
+ def generation_catalogue(frame, sources):
43
+ dossier=frame.get('answer_dossier')
44
+ if not dossier or not dossier.get('evidence'):return sources
45
+ refs=set(dossier['evidence'])
46
+ speaker=frame.get('dialogue_plan',{}).get('speaker','narrator')
47
+ refs.add('portrayal:'+speaker)
48
+ refs.update(ref for ref,source in sources.items()
49
+ if source['kind'] in {'current_passage','current_scene','uncertainty','possible_attempt'})
50
+ return {ref:source for ref,source in sources.items() if ref in refs}
answer_focus.py CHANGED
@@ -14,10 +14,9 @@ BATCH_SIZE = 18 # reserve one choice for "other"; System One supports 20
14
 
15
 
16
  def candidates(frame):
17
- from answer_contract import need_for
18
  from pack_responses import response_data, available_recalls
19
  from story_pack import pack_for
20
- need=need_for(frame)
21
  data=response_data(pack_for(frame))
22
  modern=data.get('schema_version')==2 and 'answer_contract' in frame
23
  cards={r['focus_source']:r for r in available_recalls(frame)} if modern else {}
@@ -26,16 +25,13 @@ def candidates(frame):
26
  for ref, source in sources_for(frame).items():
27
  if source['kind'] not in FACT_KINDS or source['text'] in seen:
28
  continue
29
- if modern and need not in (None,'mixed','other'):
30
- if need=='orientation':continue
31
- if source['kind'] not in {'fact','risk_before_attempt'}:continue
32
- # Only authored capabilities, not incidental mentions or duplicate
33
- # notebook paraphrases, compete for a precise factual question.
34
- capabilities=cards.get(ref,{}).get('needs',data['evidence'].get(ref,{}).get('needs',[]))
35
- if need not in capabilities:continue
36
  seen.add(source['text'])
37
  result[ref] = source
38
- return result
 
39
 
40
 
41
  def focus_payload(frame, intent, sources):
@@ -64,12 +60,12 @@ async def select_focus(frame, intent, invoke):
64
  from dialogue_contract import conversation_brief, SOCIAL
65
  from answer_contract import need_for, NONFACTUAL
66
  brief = conversation_brief(frame,intent)
67
- if brief['act'] in SOCIAL and brief['speaker_source'] and ('answer_contract' not in frame or need_for(frame) in NONFACTUAL|{None}):
68
  refs = [brief['speaker_source']] + (brief['current_material'] or {}).get('source_ids', [])
69
  return {'source_ids':list(dict.fromkeys(refs)), 'checks':[], 'input_tokens':0,
70
  'output_tokens':0,'latency_ms':0,'status':'dialogue_material'}
71
  entries = list(candidates(frame).items())
72
- result = {'source_ids': [], 'checks': [], 'input_tokens': 0,
73
  'output_tokens': 0, 'latency_ms': 0, 'status': 'ready'}
74
  for offset in range(0, len(entries), BATCH_SIZE):
75
  batch = dict(entries[offset:offset+BATCH_SIZE])
@@ -85,6 +81,9 @@ async def select_focus(frame, intent, invoke):
85
  raise ValueError('Invalid evidence selection')
86
  margin = probs[winner] - max(v for k, v in probs.items() if k != winner)
87
  result['checks'].append({'choice': winner, 'probabilities': probs, 'margin': margin})
 
 
 
88
  if winner != 'other' and margin >= REVIEW_MARGIN:
89
  result['source_ids'].append(winner)
90
  return result
 
14
 
15
 
16
  def candidates(frame):
17
+ from answer_contract import need_priority
18
  from pack_responses import response_data, available_recalls
19
  from story_pack import pack_for
 
20
  data=response_data(pack_for(frame))
21
  modern=data.get('schema_version')==2 and 'answer_contract' in frame
22
  cards={r['focus_source']:r for r in available_recalls(frame)} if modern else {}
 
25
  for ref, source in sources_for(frame).items():
26
  if source['kind'] not in FACT_KINDS or source['text'] in seen:
27
  continue
28
+ # A portrayal licenses expression, not retrieval of factual answers.
29
+ # The social fast path below handles it separately.
30
+ if source['kind']=='character_portrayal':continue
 
 
 
 
31
  seen.add(source['text'])
32
  result[ref] = source
33
+ return dict(sorted(result.items(), key=lambda item: need_priority(frame,
34
+ cards.get(item[0],{}).get('needs',data['evidence'].get(item[0],{}).get('needs',[]))))) if modern else result
35
 
36
 
37
  def focus_payload(frame, intent, sources):
 
60
  from dialogue_contract import conversation_brief, SOCIAL
61
  from answer_contract import need_for, NONFACTUAL
62
  brief = conversation_brief(frame,intent)
63
+ if not frame.get('dialogue_requires_answer') and brief['act'] in SOCIAL and brief['speaker_source'] and ('answer_contract' not in frame or need_for(frame) in NONFACTUAL|{None}):
64
  refs = [brief['speaker_source']] + (brief['current_material'] or {}).get('source_ids', [])
65
  return {'source_ids':list(dict.fromkeys(refs)), 'checks':[], 'input_tokens':0,
66
  'output_tokens':0,'latency_ms':0,'status':'dialogue_material'}
67
  entries = list(candidates(frame).items())
68
+ result = {'source_ids': [], 'candidate_source_ids': [], 'checks': [], 'input_tokens': 0,
69
  'output_tokens': 0, 'latency_ms': 0, 'status': 'ready'}
70
  for offset in range(0, len(entries), BATCH_SIZE):
71
  batch = dict(entries[offset:offset+BATCH_SIZE])
 
81
  raise ValueError('Invalid evidence selection')
82
  margin = probs[winner] - max(v for k, v in probs.items() if k != winner)
83
  result['checks'].append({'choice': winner, 'probabilities': probs, 'margin': margin})
84
+ # Keep alternatives even when the winner narrowly misses the threshold.
85
+ # These are candidates ONLY; scope/disclosure gates still own publishing.
86
+ result['candidate_source_ids'].extend(sorted(batch, key=probs.get, reverse=True)[:2])
87
  if winner != 'other' and margin >= REVIEW_MARGIN:
88
  result['source_ids'].append(winner)
89
  return result
app.py CHANGED
@@ -47,9 +47,12 @@ SESSION_TTL = 3600
47
  MAX_SESSIONS = 128
48
  MAX_UNDO = 40
49
  MAX_JOURNAL = 200
50
- CONVERSATION_TIMEOUT_SECONDS = float(os.getenv('CONVERSATION_TIMEOUT_SECONDS', '35'))
51
  if not math.isfinite(CONVERSATION_TIMEOUT_SECONDS) or CONVERSATION_TIMEOUT_SECONDS <= 0:
52
  raise ValueError('CONVERSATION_TIMEOUT_SECONDS must be positive and finite')
 
 
 
53
  active_turn = ContextVar("active_turn", default=None)
54
  sessions = {}
55
  session_gate = asyncio.Lock()
@@ -240,7 +243,7 @@ async def health(x_session: str | None = Header(default=None), narrator_id: str
240
  if selected not in NARRATORS:raise HTTPException(422,'Unknown narrator')
241
  info=narrators.public(selected)
242
  reasoning=reasoning_settings() if NARRATORS[selected]['thinking'] else {'enabled':False,'budget':0}
243
- return {'story_id':ACTIVE.id,'version':'2.27.0','profile':MODEL_PROFILE,
244
  'model_status':model_status,'model':MODEL,'narrator_status':info['status'],
245
  'narrator_model':info['model'],'narrator':info,'reasoning':reasoning,
246
  'status_elapsed_ms':{'decision':round((time.monotonic()-model_changed_at['decision'])*1000),'narrator':info['elapsed_ms']}}
@@ -410,7 +413,7 @@ async def reading_turn(session, text):
410
  async def diagnostic(x_session: str | None = Header(default=None)):
411
  session = get_session(x_session)
412
  async with session.lock:
413
- return {'version':'2.27.0', 'story_id':session.frame.get('story_id',ACTIVE.id), 'models':{'decision':MODEL,'narrator':NARRATORS[session.narrator_id]['repo']},
414
  'attempt':session.last_attempt,'metrics':session.metrics,
415
  'current_scene':session.frame['meta']['scene'],'revision':session.revision,
416
  'trace':trace_snapshot(session), 'reasoning':reasoning_settings() if NARRATORS[session.narrator_id]['thinking'] else {'enabled':False,'budget':0}}
@@ -475,6 +478,17 @@ async def current(x_session: str | None = Header(default=None)):
475
  return public(session)
476
 
477
 
 
 
 
 
 
 
 
 
 
 
 
478
  @asynccontextmanager
479
  async def model_slot():
480
  """Both resident models share one inference queue on the two CPU cores."""
@@ -741,7 +755,8 @@ async def try_authored_response(session, current, text, focus=None):
741
  try:
742
  if focus is None:
743
  candidate, selection = await select_recovery(current,text,decision_call,stage='response_selection',
744
- focus=session.metrics.get('answer_focus'))
 
745
  else:
746
  candidate, selection = await select_focused_response(current,text,focus,
747
  session.metrics.get('response_selection'),decision_call)
@@ -750,7 +765,9 @@ async def try_authored_response(session, current, text, focus=None):
750
  'input_tokens':None,'output_tokens':None,'latency_ms':None}
751
  return None
752
  if selection is not None:session.metrics['response_selection' if focus is None else 'recovery_selection']=selection
753
- if selection and selection.get('partial_candidate_id'):
 
 
754
  row=next((r for r in resolvable_replies(current) if r['id']==selection['partial_candidate_id']),None)
755
  if row is not None:
756
  current['_prepared_factual_recovery']=render_reply(current,row,partial=True)
@@ -879,12 +896,19 @@ async def converse(session, current, text, decision):
879
  # replies first. Whole-question coverage still rejects mixed/false premises.
880
  covered = await try_covered_dialogue(session,current,text) if need in NONFACTUAL|{None} else None
881
  if covered is not None:return covered
 
882
  await prepare_answer_focus(current,text,decision)
883
  authored = await try_authored_response(session,current,text)
884
  if authored is not None:return authored
 
 
 
885
  # One generation. A rejected line goes to the prepared pack reply; repeated
886
  # repairs were consuming tokens without answering the original question.
887
- reply, metric = await narrate(current,text,decision)
 
 
 
888
  session.metrics['narrator'].append(metric)
889
  if not reply:
890
  return await recover_conversation(session,current,text,decision,'narrator_unavailable_or_invalid')
 
47
  MAX_SESSIONS = 128
48
  MAX_UNDO = 40
49
  MAX_JOURNAL = 200
50
+ CONVERSATION_TIMEOUT_SECONDS = float(os.getenv('CONVERSATION_TIMEOUT_SECONDS', '25'))
51
  if not math.isfinite(CONVERSATION_TIMEOUT_SECONDS) or CONVERSATION_TIMEOUT_SECONDS <= 0:
52
  raise ValueError('CONVERSATION_TIMEOUT_SECONDS must be positive and finite')
53
+ NARRATOR_TIMEOUT_SECONDS = float(os.getenv('NARRATOR_TIMEOUT_SECONDS', '10'))
54
+ if not math.isfinite(NARRATOR_TIMEOUT_SECONDS) or NARRATOR_TIMEOUT_SECONDS<=0:
55
+ raise ValueError('NARRATOR_TIMEOUT_SECONDS must be positive and finite')
56
  active_turn = ContextVar("active_turn", default=None)
57
  sessions = {}
58
  session_gate = asyncio.Lock()
 
243
  if selected not in NARRATORS:raise HTTPException(422,'Unknown narrator')
244
  info=narrators.public(selected)
245
  reasoning=reasoning_settings() if NARRATORS[selected]['thinking'] else {'enabled':False,'budget':0}
246
+ return {'story_id':ACTIVE.id,'version':'2.28.0','profile':MODEL_PROFILE,
247
  'model_status':model_status,'model':MODEL,'narrator_status':info['status'],
248
  'narrator_model':info['model'],'narrator':info,'reasoning':reasoning,
249
  'status_elapsed_ms':{'decision':round((time.monotonic()-model_changed_at['decision'])*1000),'narrator':info['elapsed_ms']}}
 
413
  async def diagnostic(x_session: str | None = Header(default=None)):
414
  session = get_session(x_session)
415
  async with session.lock:
416
+ return {'version':'2.28.0', 'story_id':session.frame.get('story_id',ACTIVE.id), 'models':{'decision':MODEL,'narrator':NARRATORS[session.narrator_id]['repo']},
417
  'attempt':session.last_attempt,'metrics':session.metrics,
418
  'current_scene':session.frame['meta']['scene'],'revision':session.revision,
419
  'trace':trace_snapshot(session), 'reasoning':reasoning_settings() if NARRATORS[session.narrator_id]['thinking'] else {'enabled':False,'budget':0}}
 
478
  return public(session)
479
 
480
 
481
+ @app.delete('/api/session')
482
+ async def release_session(x_session: str | None = Header(default=None)):
483
+ """Release only the session whose bearer token the caller possesses."""
484
+ async with session_gate:
485
+ session=get_session(x_session)
486
+ if session.lock.locked():
487
+ raise HTTPException(409, 'Cette partie a encore une réponse en cours.')
488
+ sessions.pop(x_session,None)
489
+ return {'released':True}
490
+
491
+
492
  @asynccontextmanager
493
  async def model_slot():
494
  """Both resident models share one inference queue on the two CPU cores."""
 
755
  try:
756
  if focus is None:
757
  candidate, selection = await select_recovery(current,text,decision_call,stage='response_selection',
758
+ focus=session.metrics.get('answer_focus'),
759
+ on_partial=lambda reply:current.update(_prepared_factual_recovery=reply))
760
  else:
761
  candidate, selection = await select_focused_response(current,text,focus,
762
  session.metrics.get('response_selection'),decision_call)
 
765
  'input_tokens':None,'output_tokens':None,'latency_ms':None}
766
  return None
767
  if selection is not None:session.metrics['response_selection' if focus is None else 'recovery_selection']=selection
768
+ if selection and selection.get('prepared_reply'):
769
+ current['_prepared_factual_recovery']=selection['prepared_reply']
770
+ elif selection and selection.get('partial_candidate_id'):
771
  row=next((r for r in resolvable_replies(current) if r['id']==selection['partial_candidate_id']),None)
772
  if row is not None:
773
  current['_prepared_factual_recovery']=render_reply(current,row,partial=True)
 
896
  # replies first. Whole-question coverage still rejects mixed/false premises.
897
  covered = await try_covered_dialogue(session,current,text) if need in NONFACTUAL|{None} else None
898
  if covered is not None:return covered
899
+ current['dialogue_requires_answer']=True
900
  await prepare_answer_focus(current,text,decision)
901
  authored = await try_authored_response(session,current,text)
902
  if authored is not None:return authored
903
+ from answer_dossier import build_dossier
904
+ current['answer_dossier']=build_dossier(current,text,session.metrics.get('response_selection'))
905
+ session.metrics['answer_dossier']=current['answer_dossier']
906
  # One generation. A rejected line goes to the prepared pack reply; repeated
907
  # repairs were consuming tokens without answering the original question.
908
+ try:
909
+ reply, metric = await asyncio.wait_for(narrate(current,text,decision),NARRATOR_TIMEOUT_SECONDS)
910
+ except TimeoutError:
911
+ return await recover_conversation(session,current,text,decision,'narrator_deadline')
912
  session.metrics['narrator'].append(metric)
913
  if not reply:
914
  return await recover_conversation(session,current,text,decision,'narrator_unavailable_or_invalid')
dialogue_contract.py CHANGED
@@ -154,7 +154,36 @@ async def select_dialogue(frame, intent, invoke):
154
  result['recipient'] = ('reachable' if addressee in reachable else
155
  'unspecified' if addressee == 'unspecified' else 'unavailable')
156
  if result['recipient'] == 'unavailable':
157
- result.update(speaker='narrator', act='unavailable')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158
  else:
159
  from scene_context import scene_contract
160
  if addressee in scene_contract(frame)['character_portrayals']:
@@ -207,6 +236,7 @@ def conversation_brief(frame, intent):
207
  'participant_roles': context.get('participant_roles', []),
208
  'stance':frame.get('dialogue_plan',{}).get('stance','neutral'),
209
  'recipient':frame.get('dialogue_plan',{}).get('recipient','unspecified'),
 
210
  'current_material': None if beat is None else {
211
  'id': beat['id'], 'source_ids': beat['source_ids'],
212
  'concern': beat['concern'][lang], 'context': beat['context'][lang]},
 
154
  result['recipient'] = ('reachable' if addressee in reachable else
155
  'unspecified' if addressee == 'unspecified' else 'unavailable')
156
  if result['recipient'] == 'unavailable':
157
+ # A name selected as addressee can actually be the subject of an
158
+ # identity/location question. Never turn that guess into a contact wall.
159
+ identity = payload['state']['known_identities'].get(addressee, {})
160
+ contact = {'state': {'latest_request':intent,
161
+ 'person':identity.get('name', 'an unlisted person')},
162
+ 'questions': {'contact_intent': {'type':'choice',
163
+ 'instructions':'Read the grammatical relationship, not availability. '
164
+ 'Does the reader request THIS person to speak, or ask ABOUT this person? '
165
+ 'A role, identity or whereabouts question about somebody can be answered by the narrator. '
166
+ 'A direct address, request to contact them or hear their personal reply is contact.',
167
+ 'criteria':{'contact':'This person is explicitly asked to speak or be contacted.',
168
+ 'about':'This person is the subject of a question, not its requested speaker.',
169
+ 'unclear':'The requested speaker cannot be resolved.'}}}}
170
+ raw_contact, elapsed = await invoke(contact, 'contact_intent')
171
+ for key,value in usage(raw_contact).items():result[key] += value
172
+ result['latency_ms'] += elapsed
173
+ answer=raw_contact['answers']['contact_intent']
174
+ probs=distribution(answer,list(contact['questions']['contact_intent']['criteria']))
175
+ winner=answer.get('choice')
176
+ if winner not in probs or probs[winner]!=max(probs.values()):
177
+ raise ValueError('Invalid contact intent')
178
+ margin=probs[winner]-max(v for k,v in probs.items() if k!=winner)
179
+ result['checks']['contact_intent']={'choice':winner,'probabilities':probs,'margin':margin}
180
+ result['speaker']='narrator'
181
+ if winner=='contact' and margin>=REVIEW_MARGIN:
182
+ result.update(act='unavailable', contact_confirmed=True)
183
+ else:
184
+ result.update(subject_ids=[addressee] if addressee in payload['state']['known_identities'] else [],
185
+ addressee='unspecified', recipient='unspecified', contact_confirmed=False)
186
+ if winner=='about' and margin>=REVIEW_MARGIN:result['act']='information'
187
  else:
188
  from scene_context import scene_contract
189
  if addressee in scene_contract(frame)['character_portrayals']:
 
236
  'participant_roles': context.get('participant_roles', []),
237
  'stance':frame.get('dialogue_plan',{}).get('stance','neutral'),
238
  'recipient':frame.get('dialogue_plan',{}).get('recipient','unspecified'),
239
+ 'subject_ids':frame.get('dialogue_plan',{}).get('subject_ids',[]),
240
  'current_material': None if beat is None else {
241
  'id': beat['id'], 'source_ids': beat['source_ids'],
242
  'concern': beat['concern'][lang], 'context': beat['context'][lang]},
evaluation-reports/2.27/adapted-fixtures.log ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.127 seconds
2
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.130 seconds
3
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.200 seconds
4
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.184 seconds
5
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.188 seconds
6
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.192 seconds
7
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.185 seconds
8
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.185 seconds
9
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.174 seconds
10
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.178 seconds
11
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.181 seconds
12
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.128 seconds
13
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.214 seconds
14
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.200 seconds
15
+ .
16
+ ----------------------------------------------------------------------
17
+ Ran 9 tests in 3.743s
18
+
19
+ OK
evaluation-reports/2.27/focused-development.log ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Executing <Task pending name='Task-8' coro=<Api.test_optional_cleanup_does_not_bypass_factual_review() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:222> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.176 seconds
2
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.206 seconds
3
+ .Executing <Task pending name='Task-22' coro=<Api.test_partial_fact_survives_provider_failure_and_does_not_claim_completeness() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:198> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.180 seconds
4
+ Narrator conversation failed (ReadTimeout)
5
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.169 seconds
6
+ Executing <Task pending name='Task-22' coro=<Api.test_partial_fact_survives_provider_failure_and_does_not_claim_completeness() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:198> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.206 seconds
7
+ Narrator conversation failed (ReadTimeout)
8
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.153 seconds
9
+ .Executing <Task pending name='Task-39' coro=<Api.test_partial_recovery_survives_deadline_and_unknown_need_survives_error() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:232> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.163 seconds
10
+ Conversation failed: RuntimeError
11
+ .Executing <Task pending name='Task-56' coro=<Api.test_rejected_card_is_not_reintroduced_as_factual_fallback() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:211> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.179 seconds
12
+ Narrator conversation failed (ReadTimeout)
13
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.150 seconds
14
+ .Executing <Task pending name='Task-70' coro=<Api.test_verified_fact_cards_answer_audit_questions_and_localize_without_generation() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:182> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.177 seconds
15
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.108 seconds
16
+ Executing <Task pending name='Task-70' coro=<Api.test_verified_fact_cards_answer_audit_questions_and_localize_without_generation() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:182> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.161 seconds
17
+ .......Executing <Task finished name='Task-97' coro=<Selection.test_fact_cards_cover_observations_and_optics_without_topic_substitution() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:61> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.437 seconds
18
+ ......
19
+ ----------------------------------------------------------------------
20
+ Ran 17 tests in 6.550s
21
+
22
+ OK
evaluation-reports/2.27/python-development.log ADDED
@@ -0,0 +1,415 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.173 seconds
2
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.161 seconds
3
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
4
+ F...Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.231 seconds
5
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.201 seconds
6
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.219 seconds
7
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.238 seconds
8
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.218 seconds
9
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.242 seconds
10
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.212 seconds
11
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.220 seconds
12
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.225 seconds
13
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.207 seconds
14
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.200 seconds
15
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.206 seconds
16
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.203 seconds
17
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.197 seconds
18
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.209 seconds
19
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.198 seconds
20
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.180 seconds
21
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.201 seconds
22
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.180 seconds
23
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.180 seconds
24
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.186 seconds
25
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.195 seconds
26
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.190 seconds
27
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.201 seconds
28
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.179 seconds
29
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.180 seconds
30
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.178 seconds
31
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.177 seconds
32
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.183 seconds
33
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.190 seconds
34
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.233 seconds
35
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.187 seconds
36
+ F....Narrator conversation failed (ValueError)
37
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.165 seconds
38
+ F...Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.203 seconds
39
+ .Narrator conversation failed (ValueError)
40
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
41
+ Narrator conversation failed (ValueError)
42
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
43
+ Narrator conversation failed (ValueError)
44
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.142 seconds
45
+ FExecuting <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
46
+ ..Decision failed (ReadTimeout)
47
+ Routing failed: HTTPException
48
+ .Decision failed (ReadTimeout)
49
+ Routing failed: HTTPException
50
+ Decision failed (ReadTimeout)
51
+ Routing failed: HTTPException
52
+ Decision failed (ReadTimeout)
53
+ Routing failed: HTTPException
54
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.185 seconds
55
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.188 seconds
56
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.120 seconds
57
+ FDecision failed (HTTPException)
58
+ Routing failed: HTTPException
59
+ .Narrator transition failed (RuntimeError)
60
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.185 seconds
61
+ F.....Narrator conversation failed (ReadTimeout)
62
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.136 seconds
63
+ .Narrator conversation failed (ValueError)
64
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.146 seconds
65
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.219 seconds
66
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.221 seconds
67
+ ....Executing <Task pending name='Task-1280' coro=<MultiStory.test_interleaved_sessions_catalogue_context_undo_restart() running at /workspace/scratch/8ee563f2817f/project/tests/test_multi_story.py:39> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181, <1 more>, WorkerThread.stop()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.230 seconds
68
+ .....................................Executing <Task finished name='Task-1496' coro=<ReferenceContext.test_confident_first_route_does_not_strip_history_from_later_checks() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:40> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.922 seconds
69
+ .Executing <Task finished name='Task-1501' coro=<ReferenceContext.test_context_reaches_score_for_a_variant_too() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:80> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.153 seconds
70
+ .Executing <Task finished name='Task-1506' coro=<ReferenceContext.test_explicit_new_request_is_not_replaced_by_previous_suggestion() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:71> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.106 seconds
71
+ .Executing <Task finished name='Task-1511' coro=<ReferenceContext.test_refusal_is_not_consent_to_a_previous_suggestion() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:61> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.151 seconds
72
+ .....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.161 seconds
73
+ .Narrator conversation failed (ValueError)
74
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.169 seconds
75
+ .Narrator conversation failed (ValueError)
76
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.159 seconds
77
+ F.........................Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.248 seconds
78
+ .Decision failed (ReadTimeout)
79
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.207 seconds
80
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.142 seconds
81
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.144 seconds
82
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.211 seconds
83
+ .Executing <Task finished name='Task-1801' coro=<DecisionContracts.test_conditional_stakes_reach_factual_and_execution_checks() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v218.py:105> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.226 seconds
84
+ .Executing <Task finished name='Task-1806' coro=<DecisionContracts.test_focus_batches_all_public_candidates_without_cross_batch_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v218.py:80> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.108 seconds
85
+ .............Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.101 seconds
86
+ .Narrator conversation failed (ReadTimeout)
87
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.136 seconds
88
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.119 seconds
89
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.185 seconds
90
+ ...............Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> wait_for=<Future pending cb=[Task.task_wakeup()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:448> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.108 seconds
91
+ .Decision failed (ReadTimeout)
92
+ .Narrator conversation failed (ReadTimeout)
93
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.137 seconds
94
+ .Narrator conversation failed (ReadTimeout)
95
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.154 seconds
96
+ Decision failed (ReadTimeout)
97
+ Decision failed (ReadTimeout)
98
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.176 seconds
99
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.202 seconds
100
+ Narrator conversation failed (KeyError)
101
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
102
+ Narrator conversation failed (ReadTimeout)
103
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.144 seconds
104
+ Decision failed (ReadTimeout)
105
+ Decision failed (ReadTimeout)
106
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.195 seconds
107
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.211 seconds
108
+ Narrator conversation failed (KeyError)
109
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.139 seconds
110
+ Narrator conversation failed (ReadTimeout)
111
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.112 seconds
112
+ Decision failed (ReadTimeout)
113
+ Decision failed (ReadTimeout)
114
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.134 seconds
115
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.144 seconds
116
+ Narrator conversation failed (KeyError)
117
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.118 seconds
118
+ Narrator conversation failed (ReadTimeout)
119
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.109 seconds
120
+ Decision failed (ReadTimeout)
121
+ Decision failed (ReadTimeout)
122
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.126 seconds
123
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
124
+ Narrator conversation failed (KeyError)
125
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.121 seconds
126
+ Narrator conversation failed (ReadTimeout)
127
+ Decision failed (ReadTimeout)
128
+ Decision failed (ReadTimeout)
129
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.101 seconds
130
+ Narrator conversation failed (KeyError)
131
+ Narrator conversation failed (ReadTimeout)
132
+ Decision failed (ReadTimeout)
133
+ Decision failed (ReadTimeout)
134
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.111 seconds
135
+ Narrator conversation failed (KeyError)
136
+ .......Executing <Task finished name='Task-2020' coro=<Decisions.test_portrayal_cannot_override_failed_factual_check() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:134> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.149 seconds
137
+ .Executing <Task finished name='Task-2025' coro=<Decisions.test_refusal_never_offers_clean_next_to_response_selector() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:121> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.173 seconds
138
+ .Executing <Task finished name='Task-2030' coro=<Decisions.test_uncertain_speaker_never_becomes_an_arbitrary_character() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:107> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.191 seconds
139
+ ..Narrator conversation failed (ReadTimeout)
140
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.119 seconds
141
+ ..Executing <Task finished name='Task-2077' coro=<DialogueChoices.test_bare_agreement_is_not_a_repeated_refusal() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:142> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.174 seconds
142
+ .Executing <Task finished name='Task-2082' coro=<DialogueChoices.test_refusal_rows_are_ineligible_without_current_decline() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:149> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.593 seconds
143
+ .Executing <Task finished name='Task-2087' coro=<IndependentReviews.test_focused_social_relevance_cannot_override_a_false_fact() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:198> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.245 seconds
144
+ .Executing <Task finished name='Task-2092' coro=<IndependentReviews.test_one_invented_sentence_rejects_an_otherwise_correct_part() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:177> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.130 seconds
145
+ .Executing <Task finished name='Task-2097' coro=<IndependentReviews.test_swapped_speaker_is_rejected_despite_positive_fact_and_style_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:189> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.428 seconds
146
+ .....Executing <Task finished name='Task-2102' coro=<Routes.test_all_six_explicit_discoveries_keep_the_authored_path() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:74> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 1.362 seconds
147
+ ...Executing <Task finished name='Task-2117' coro=<Routes.test_weak_or_ambiguous_scope_never_opens_a_discovery() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:67> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.147 seconds
148
+ .Executing <Task pending name='Task-2128' coro=<BudgetAndRecovery.test_contextual_guard_greeting_needs_no_qwen_or_clarification() running at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:229> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.285 seconds
149
+ ...Decision failed (ReadTimeout)
150
+ Routing failed: HTTPException
151
+ ......Executing <Task finished name='Task-2217' coro=<DialogueIdentity.test_clear_greeting_does_not_require_a_named_character() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:47> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.277 seconds
152
+ .Executing <Task finished name='Task-2222' coro=<DialogueIdentity.test_jo_radio_cannot_be_marked_unavailable_independently() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:30> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.478 seconds
153
+ .Executing <Task finished name='Task-2227' coro=<DialogueIdentity.test_known_absent_and_unknown_people_never_substitute_a_present_person() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:40> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.111 seconds
154
+ .....Executing <Task finished name='Task-2241' coro=<Grounding.test_disclosure_veto_survives_positive_fact_and_portrayal_verdicts() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:134> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.202 seconds
155
+ .Executing <Task finished name='Task-2246' coro=<Grounding.test_focused_relevance_runs_once_even_with_uncertain_speech_act() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:142> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.237 seconds
156
+ ..Executing <Task pending name='Task-2261' coro=<Api.test_all_three_emotional_answers_can_skip_generation_with_scope_approval() running at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:197> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.150 seconds
157
+ Executing <Task pending name='Task-2261' coro=<Api.test_all_three_emotional_answers_can_skip_generation_with_scope_approval() running at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:197> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.157 seconds
158
+ .Narrator conversation failed (ReadTimeout)
159
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.159 seconds
160
+ ....Executing <Task finished name='Task-2302' coro=<MeaningAndCoverage.test_close_retrieval_still_requires_independent_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:96> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.107 seconds
161
+ .Executing <Task finished name='Task-2307' coro=<MeaningAndCoverage.test_real_iris_fine_label_ambiguity_gets_independent_family_check() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:73> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.154 seconds
162
+ .Executing <Task finished name='Task-2312' coro=<MeaningAndCoverage.test_role_veto_cannot_be_overruled_by_positive_factual_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:128> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.109 seconds
163
+ ..........Executing <Task finished name='Task-2322' coro=<Addressee.test_live_second_turn_ambiguity_uses_names_without_generated_history() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:72> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.110 seconds
164
+ ........Executing <Task finished name='Task-2400' coro=<DiscoveryCandidate.test_live_english_weak_discovery_reaches_specialized_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:26> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.122 seconds
165
+ .Executing <Task finished name='Task-2405' coro=<DiscoveryCandidate.test_refined_near_tie_is_not_permission_without_discovery_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:44> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.107 seconds
166
+ ..Executing <Task pending name='Task-2433' coro=<Api.test_fact_selection_precedes_prose_and_jo_never_needs_qwen() running at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:102> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.503 seconds
167
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.121 seconds
168
+ Executing <Task pending name='Task-2433' coro=<Api.test_fact_selection_precedes_prose_and_jo_never_needs_qwen() running at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:102> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.495 seconds
169
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.118 seconds
170
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> wait_for=<Future pending cb=[Task.task_wakeup()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:448> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.106 seconds
171
+ ...Routing failed: RuntimeError
172
+ Conversation failed: RuntimeError
173
+ Conversation failed: RuntimeError
174
+ Conversation failed: RuntimeError
175
+ Conversation failed: RuntimeError
176
+ Conversation failed: RuntimeError
177
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.144 seconds
178
+ .Executing <Task finished name='Task-2530' coro=<Discovery.test_direct_questions_skip_generic_engagement_but_keep_scope_veto() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:23> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.603 seconds
179
+ .Executing <Task finished name='Task-2535' coro=<Discovery.test_physical_action_still_requires_commitment() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:36> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.110 seconds
180
+ ..Executing <Task finished name='Task-2544' coro=<Facts.test_focused_roles_exclude_orientation_but_scope_still_can_reject() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:47> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.159 seconds
181
+ ...
182
+ ======================================================================
183
+ FAIL: test_copied_passage_selects_scene_but_answer_with_lead_stays_reply (test_app.Application.test_copied_passage_selects_scene_but_answer_with_lead_stays_reply)
184
+ ----------------------------------------------------------------------
185
+ Traceback (most recent call last):
186
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
187
+ return self._loop.run_until_complete(task)
188
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
189
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
190
+ return future.result()
191
+ ^^^^^^^^^^^^^^^
192
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 184, in test_copied_passage_selects_scene_but_answer_with_lead_stays_reply
193
+ self.assertEqual(result.status_code,200);self.assertEqual(result.json()['page']['preferred_view'],'reply')
194
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
195
+ AssertionError: 'scene' != 'reply'
196
+ - scene
197
+ + reply
198
+
199
+
200
+ ======================================================================
201
+ FAIL: test_julia_hands_questions_and_reflections_to_narrator (test_app.Application.test_julia_hands_questions_and_reflections_to_narrator)
202
+ ----------------------------------------------------------------------
203
+ Traceback (most recent call last):
204
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
205
+ return self._loop.run_until_complete(task)
206
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
207
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
208
+ return future.result()
209
+ ^^^^^^^^^^^^^^^
210
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 288, in test_julia_hands_questions_and_reflections_to_narrator
211
+ self.assertEqual([stage for stage,_ in self.captured],['routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review']+['routing','routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review']*3)
212
+ AssertionError: Lists differ: ['rou[28 chars]swer_need', 'answer_focus', 'recovery', 'conve[501 chars]iew'] != ['rou[28 chars]swer_focus', 'recovery', 'conversation', 'revi[441 chars]iew']
213
+
214
+ First differing element 2:
215
+ 'answer_need'
216
+ 'answer_focus'
217
+
218
+ First list contains 4 additional elements.
219
+ First extra element 43:
220
+ 'review'
221
+
222
+ Diff is 726 characters long. Set self.maxDiff to None to see it.
223
+
224
+ ======================================================================
225
+ FAIL: test_natural_acceptance_goes_directly_through_julia_using_conversation (test_app.Application.test_natural_acceptance_goes_directly_through_julia_using_conversation)
226
+ ----------------------------------------------------------------------
227
+ Traceback (most recent call last):
228
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
229
+ return self._loop.run_until_complete(task)
230
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
231
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
232
+ return future.result()
233
+ ^^^^^^^^^^^^^^^
234
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 346, in test_natural_acceptance_goes_directly_through_julia_using_conversation
235
+ self.assertEqual([s for s,_ in self.captured],['routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review','routing','engagement','method_check'])
236
+ AssertionError: Lists differ: ['rou[28 chars]swer_need', 'answer_focus', 'recovery', 'conve[45 chars]eck'] != ['rou[28 chars]swer_focus', 'recovery', 'conversation', 'revi[80 chars]eck']
237
+
238
+ First differing element 2:
239
+ 'answer_need'
240
+ 'answer_focus'
241
+
242
+ Second list contains 4 additional elements.
243
+ First extra element 9:
244
+ 'review'
245
+
246
+ ['routing',
247
+ 'dialogue_frame',
248
+ - 'answer_need',
249
+ 'answer_focus',
250
+ 'recovery',
251
+ 'conversation',
252
+ + 'review',
253
+ + 'review',
254
+ + 'review',
255
+ + 'review',
256
+ + 'review',
257
+ 'routing',
258
+ 'engagement',
259
+ 'method_check']
260
+
261
+ ======================================================================
262
+ FAIL: test_refusals_and_acknowledgement_do_not_execute_suggestion (test_app.Application.test_refusals_and_acknowledgement_do_not_execute_suggestion)
263
+ ----------------------------------------------------------------------
264
+ Traceback (most recent call last):
265
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
266
+ return self._loop.run_until_complete(task)
267
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
268
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
269
+ return future.result()
270
+ ^^^^^^^^^^^^^^^
271
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 442, in test_refusals_and_acknowledgement_do_not_execute_suggestion
272
+ self.assertEqual(self.session.turn,0);self.assertEqual([s for s,_ in self.captured],['routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review']+['routing','routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review']*2)
273
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
274
+ AssertionError: Lists differ: ['rou[28 chars]swer_need', 'answer_focus', 'recovery', 'conve[202 chars]ion'] != ['rou[28 chars]swer_focus', 'recovery', 'conversation', 'revi[307 chars]iew']
275
+
276
+ First differing element 2:
277
+ 'answer_need'
278
+ 'answer_focus'
279
+
280
+ Second list contains 12 additional elements.
281
+ First extra element 20:
282
+ 'review'
283
+
284
+ ['routing',
285
+ 'dialogue_frame',
286
+ - 'answer_need',
287
+ 'answer_focus',
288
+ 'recovery',
289
+ 'conversation',
290
+ + 'review',
291
+ + 'review',
292
+ + 'review',
293
+ + 'review',
294
+ + 'review',
295
+ 'routing',
296
+ 'routing',
297
+ 'dialogue_frame',
298
+ - 'answer_need',
299
+ 'answer_focus',
300
+ 'recovery',
301
+ 'conversation',
302
+ + 'review',
303
+ + 'review',
304
+ + 'review',
305
+ + 'review',
306
+ + 'review',
307
+ 'routing',
308
+ 'routing',
309
+ 'dialogue_frame',
310
+ - 'answer_need',
311
+ 'answer_focus',
312
+ 'recovery',
313
+ - 'conversation']
314
+ ? ^
315
+
316
+ + 'conversation',
317
+ ? ^
318
+
319
+ + 'review',
320
+ + 'review',
321
+ + 'review',
322
+ + 'review',
323
+ + 'review']
324
+
325
+ ======================================================================
326
+ FAIL: test_scene_reference_changes_tab_without_changing_ink_and_localizes (test_app.Application.test_scene_reference_changes_tab_without_changing_ink_and_localizes)
327
+ ----------------------------------------------------------------------
328
+ Traceback (most recent call last):
329
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
330
+ return self._loop.run_until_complete(task)
331
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
332
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
333
+ return future.result()
334
+ ^^^^^^^^^^^^^^^
335
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 164, in test_scene_reference_changes_tab_without_changing_ink_and_localizes
336
+ self.assertEqual([s for s,_ in self.captured],['routing','dialogue_frame','answer_focus','recovery','conversation','review'])
337
+ AssertionError: Lists differ: ['rou[28 chars]swer_need', 'answer_focus', 'recovery', 'conve[14 chars]iew'] != ['rou[28 chars]swer_focus', 'recovery', 'conversation', 'review']
338
+
339
+ First differing element 2:
340
+ 'answer_need'
341
+ 'answer_focus'
342
+
343
+ First list contains 1 additional elements.
344
+ First extra element 6:
345
+ 'review'
346
+
347
+ ['routing',
348
+ 'dialogue_frame',
349
+ - 'answer_need',
350
+ 'answer_focus',
351
+ 'recovery',
352
+ 'conversation',
353
+ 'review']
354
+
355
+ ======================================================================
356
+ FAIL: test_unmatched_action_gets_in_scene_clarification (test_app.Application.test_unmatched_action_gets_in_scene_clarification)
357
+ ----------------------------------------------------------------------
358
+ Traceback (most recent call last):
359
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
360
+ return self._loop.run_until_complete(task)
361
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
362
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
363
+ return future.result()
364
+ ^^^^^^^^^^^^^^^
365
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_app.py", line 368, in test_unmatched_action_gets_in_scene_clarification
366
+ self.assertEqual([s for s,_ in self.captured],['routing','dialogue_frame','answer_focus','recovery','conversation','review','review','review','review','review'])
367
+ AssertionError: Lists differ: ['rou[28 chars]swer_need', 'answer_focus', 'recovery', 'conve[54 chars]iew'] != ['rou[28 chars]swer_focus', 'recovery', 'conversation', 'revi[39 chars]iew']
368
+
369
+ First differing element 2:
370
+ 'answer_need'
371
+ 'answer_focus'
372
+
373
+ First list contains 1 additional elements.
374
+ First extra element 10:
375
+ 'review'
376
+
377
+ ['routing',
378
+ 'dialogue_frame',
379
+ - 'answer_need',
380
+ 'answer_focus',
381
+ 'recovery',
382
+ 'conversation',
383
+ 'review',
384
+ 'review',
385
+ 'review',
386
+ 'review',
387
+ 'review']
388
+
389
+ ======================================================================
390
+ FAIL: test_validated_answer_can_survive_bad_decoration_without_second_generation (test_v216_regressions.ApplicationRecovery.test_validated_answer_can_survive_bad_decoration_without_second_generation)
391
+ ----------------------------------------------------------------------
392
+ Traceback (most recent call last):
393
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py", line 118, in run
394
+ return self._loop.run_until_complete(task)
395
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
396
+ File "/opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py", line 691, in run_until_complete
397
+ return future.result()
398
+ ^^^^^^^^^^^^^^^
399
+ File "/workspace/scratch/8ee563f2817f/project/tests/test_v216_regressions.py", line 181, in test_validated_answer_can_survive_bad_decoration_without_second_generation
400
+ self.assertEqual(r.json()['page']['paragraphs'],['Le trajet prend dix minutes en taxi.'])
401
+ AssertionError: Lists differ: ['Le Méridien est annoncé au quai 9, pour un d[138 chars]i ?'] != ['Le trajet prend dix minutes en taxi.']
402
+
403
+ First differing element 0:
404
+ 'Le Méridien est annoncé au quai 9, pour un d[137 chars]ci ?'
405
+ 'Le trajet prend dix minutes en taxi.'
406
+
407
+ + ['Le trajet prend dix minutes en taxi.']
408
+ - ['Le Méridien est annoncé au quai 9, pour un départ à minuit. Les indices que '
409
+ - 'vous avez recueillis vous accompagnent dans la recherche de Nilo. Que '
410
+ - 'souhaitez-vous demander ou tenter ici ?']
411
+
412
+ ----------------------------------------------------------------------
413
+ Ran 248 tests in 203.726s
414
+
415
+ FAILED (failures=7)
evaluation-reports/2.28/VALIDATION.txt ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ DOUBLE FOND 2.28.0 — VALIDATION DE LIVRAISON
2
+
3
+ EXÉCUTÉ LOCALEMENT
4
+ - python -m unittest discover -s tests -p 'test_*.py'
5
+ 278 tests, 225.298 s, OK. Voir unit-verified.log.
6
+ - python -m unittest test_v228.Pool -v
7
+ 3 tests, 2.390 s, OK. Deux sont aussi dans la suite complète ; le cas
8
+ HTTP 410 ajouté après son lancement est supplémentaire. 279 tests distincts
9
+ validés au total. Voir pool.log.
10
+ - node engine/compile.cjs --all : trois packs installés compilés.
11
+ - scripts/validate_stories.py : trois packs valides.
12
+ - node tests/test_story.cjs : 220 parcours, 2502 transitions, 5 fins, 29 scènes.
13
+ - Cinq suites d’interface/Western : OK. Voir ui-results.txt.
14
+ - scripts/check_fourth_pack.py : quiet-archive compilé, validé, huit cas FR/EN,
15
+ vrais états Ink, verdicts contrôlés. Exemple temporaire retiré avant archive.
16
+ - scripts/check_answer_contract.py --validate-only : 24 fixtures sur Ink réel.
17
+ - scripts/check_reviews.py --validate-only : 73 réponses fixes structurellement
18
+ valides, dont 35 acceptations et 38 rejets attendus par l’auteur.
19
+ - Onze contextes de benchmark : références publiques vérifiées par les tests.
20
+ - Compilation syntaxique Python et node --check static/app.js : OK.
21
+
22
+ NON MESURÉ DANS CETTE LIVRAISON
23
+ - Compréhension réelle de Kev et qualité spontanée de Qwen sous moteur 2.28.
24
+ - Faux rejets/acceptations réels du nouveau corpus de calibration.
25
+ - Comparatif réel 8B avec/sans raisonnement et 14B.
26
+ - Latences, mémoire et comportement à froid sur le GPU de production.
27
+ - Mise en page dans Chromium réel.
28
+
29
+ La tentative de benchmark local n’a atteint aucun serveur (ConnectError,
30
+ cases vide). Voir benchmark-unavailable.json. Ce n’est pas une mesure de modèle.
31
+ Le corpus live de 147 tours est livré, pas présenté comme exécuté en 2.28.
32
+ Les verdicts contrôlés et les pannes injectées prouvent les branches du moteur,
33
+ ni l’intelligence des modèles ni la pertinence parfaite de tout repli.
34
+
35
+ PÉRIMÈTRE
36
+ Production inchangée pendant ces travaux. Qwen3-8B reste le défaut GPU.
37
+ Recette et comparaison reproductibles : QA.md. Contrat : AUTHORING.md.
38
+ Historique des rapports antérieurs conservé avec son numéro de version.
evaluation-reports/2.28/benchmark-unavailable.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "complete": false,
3
+ "label": "environment-check",
4
+ "reasoning_budget": 512,
5
+ "grounding": "Author-specified public facts, same real Ink snapshots. No real routing evaluation in this experiment.",
6
+ "semantic_quality_validated": false,
7
+ "cases_sha256": "99be0a87751fbc3cdc4ef839a8ba107bd54c3e65b0414720efc768ed971f1cbc",
8
+ "cases": [],
9
+ "error_type": "ConnectError",
10
+ "error": "All connection attempts failed"
11
+ }
evaluation-reports/2.28/contract-fixtures.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "mode": "fixture_validation",
3
+ "cases": 24,
4
+ "semantic_quality_validated": false
5
+ }
evaluation-reports/2.28/fourth-pack.log ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ Compiled quiet-archive
2
+ Validated quiet-archive
3
+ {"pack": "quiet-archive", "cases": 8, "real_ink": true, "controlled_decisions": true, "semantic_quality_validated": false}
evaluation-reports/2.28/pool.log ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ test_benchmark_snapshots_are_public_and_reproducible (test_v228.Pool.test_benchmark_snapshots_are_public_and_reproducible) ... ok
2
+ test_expired_session_is_recreated_without_replaying_an_action (test_v228.Pool.test_expired_session_is_recreated_without_replaying_an_action) ... ok
3
+ test_hundreds_of_cases_use_three_sessions_and_release_only_them (test_v228.Pool.test_hundreds_of_cases_use_three_sessions_and_release_only_them) ... ok
4
+
5
+ ----------------------------------------------------------------------
6
+ Ran 3 tests in 2.390s
7
+
8
+ OK
evaluation-reports/2.28/review-fixtures.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "mode": "fixture_validation",
3
+ "cases": 73,
4
+ "semantic_quality_validated": false
5
+ }
evaluation-reports/2.28/story.log ADDED
@@ -0,0 +1 @@
 
 
1
+ {"completedPaths":220,"explicitEndings":5,"transitions":2502,"scenes":29,"actions":45,"maxSteps":22}
evaluation-reports/2.28/ui-results.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Executed successfully (exit 0):
2
+ node tests/test_dom.cjs — 94 unique IDs; queue/progress/elapsed/read-while-waiting/journal/undo/guided-start/safe text
3
+ node tests/test_story_ui.cjs — three story presentations, FR/EN metadata
4
+ node tests/test_library_ui.cjs — three choices, selected story, FR/EN, isolated drafts, session resume
5
+ node tests/test_network_ui.cjs — six interruptions/resynchronizations; one POST, bounded wait, drafts, cached context, usable controls
6
+ node tests/test_western.cjs — six bilingual paths, four endings, duel preparation/injury, money and release conditions
7
+ DOM simulations, not Chromium layout verification.
evaluation-reports/2.28/unit-verified.log ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.230 seconds
2
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.160 seconds
3
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.244 seconds
4
+ ....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.243 seconds
5
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.293 seconds
6
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.378 seconds
7
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.273 seconds
8
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.332 seconds
9
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.301 seconds
10
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.294 seconds
11
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.318 seconds
12
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.306 seconds
13
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.311 seconds
14
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.379 seconds
15
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.277 seconds
16
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.284 seconds
17
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.222 seconds
18
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.229 seconds
19
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.234 seconds
20
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.232 seconds
21
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.223 seconds
22
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.228 seconds
23
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.227 seconds
24
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.241 seconds
25
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.225 seconds
26
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.227 seconds
27
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.264 seconds
28
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.236 seconds
29
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.231 seconds
30
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.256 seconds
31
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.314 seconds
32
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.212 seconds
33
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.220 seconds
34
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.235 seconds
35
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.218 seconds
36
+ .....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.223 seconds
37
+ ....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.243 seconds
38
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.241 seconds
39
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.221 seconds
40
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.174 seconds
41
+ ..Decision failed (ReadTimeout)
42
+ Routing failed: HTTPException
43
+ .Decision failed (ReadTimeout)
44
+ Routing failed: HTTPException
45
+ Decision failed (ReadTimeout)
46
+ Routing failed: HTTPException
47
+ Decision failed (ReadTimeout)
48
+ Routing failed: HTTPException
49
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.213 seconds
50
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.236 seconds
51
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.155 seconds
52
+ .Decision failed (HTTPException)
53
+ Routing failed: HTTPException
54
+ .Narrator transition failed (RuntimeError)
55
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.252 seconds
56
+ ......Narrator conversation failed (ReadTimeout)
57
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.171 seconds
58
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.228 seconds
59
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.276 seconds
60
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.241 seconds
61
+ ....Executing <Task pending name='Task-1300' coro=<MultiStory.test_interleaved_sessions_catalogue_context_undo_restart() running at /workspace/scratch/8ee563f2817f/project/tests/test_multi_story.py:39> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181, <1 more>, WorkerThread.stop()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.265 seconds
62
+ .....................................Executing <Task finished name='Task-1514' coro=<ReferenceContext.test_confident_first_route_does_not_strip_history_from_later_checks() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:40> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.865 seconds
63
+ .Executing <Task finished name='Task-1519' coro=<ReferenceContext.test_context_reaches_score_for_a_variant_too() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:80> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.161 seconds
64
+ .Executing <Task finished name='Task-1524' coro=<ReferenceContext.test_explicit_new_request_is_not_replaced_by_previous_suggestion() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:71> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.120 seconds
65
+ .Executing <Task finished name='Task-1529' coro=<ReferenceContext.test_refusal_is_not_consent_to_a_previous_suggestion() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v215_regressions.py:61> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.157 seconds
66
+ .....Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.187 seconds
67
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.278 seconds
68
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.254 seconds
69
+ .........Executing <Task finished name='Task-1581' coro=<ReviewDecisions.test_confirmation_can_reject_and_boolean_output_is_invalid() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v216_regressions.py:128> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.114 seconds
70
+ .................Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.265 seconds
71
+ .Decision failed (ReadTimeout)
72
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.217 seconds
73
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.177 seconds
74
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.198 seconds
75
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.307 seconds
76
+ .Executing <Task finished name='Task-1814' coro=<DecisionContracts.test_conditional_stakes_reach_factual_and_execution_checks() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v218.py:105> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.231 seconds
77
+ .Executing <Task finished name='Task-1819' coro=<DecisionContracts.test_focus_batches_all_public_candidates_without_cross_batch_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v218.py:80> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.109 seconds
78
+ .............Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.148 seconds
79
+ .Narrator conversation failed (ReadTimeout)
80
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.190 seconds
81
+ .Executing <Task finished name='Task-1857' coro=<RecoverySelection.test_other_and_uncertainty_never_force_a_reply() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v219.py:93> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.108 seconds
82
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.120 seconds
83
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.258 seconds
84
+ .......Executing <Task finished name='Task-1893' coro=<Selection.test_larger_packs_compare_finalists_without_cross_batch_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v220.py:93> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.103 seconds
85
+ .Executing <Task finished name='Task-1898' coro=<Selection.test_scope_can_reject_the_winning_topic() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v220.py:81> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.123 seconds
86
+ .......Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> wait_for=<Future pending cb=[Task.task_wakeup()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:448> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.141 seconds
87
+ .Decision failed (ReadTimeout)
88
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.113 seconds
89
+ .Narrator conversation failed (ReadTimeout)
90
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.187 seconds
91
+ .Narrator conversation failed (ReadTimeout)
92
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.202 seconds
93
+ Decision failed (ReadTimeout)
94
+ Narrator conversation failed (ValueError)
95
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.217 seconds
96
+ Narrator conversation failed (ValueError)
97
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.211 seconds
98
+ Narrator conversation failed (ValueError)
99
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.231 seconds
100
+ Narrator conversation failed (ReadTimeout)
101
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.200 seconds
102
+ Decision failed (ReadTimeout)
103
+ Narrator conversation failed (ValueError)
104
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.231 seconds
105
+ Narrator conversation failed (ValueError)
106
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.219 seconds
107
+ Narrator conversation failed (ValueError)
108
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.188 seconds
109
+ Narrator conversation failed (ReadTimeout)
110
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.147 seconds
111
+ Decision failed (ReadTimeout)
112
+ Narrator conversation failed (ValueError)
113
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.161 seconds
114
+ Narrator conversation failed (ValueError)
115
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.171 seconds
116
+ Narrator conversation failed (ValueError)
117
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.156 seconds
118
+ Narrator conversation failed (ReadTimeout)
119
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.144 seconds
120
+ Decision failed (ReadTimeout)
121
+ Narrator conversation failed (ValueError)
122
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.149 seconds
123
+ Narrator conversation failed (ValueError)
124
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.173 seconds
125
+ Narrator conversation failed (ValueError)
126
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.163 seconds
127
+ Executing <Task pending name='Task-1968' coro=<Api.test_three_audit_characters_recover_from_generation_review_and_format_failures() running at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:174> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.101 seconds
128
+ Narrator conversation failed (ReadTimeout)
129
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.149 seconds
130
+ Decision failed (ReadTimeout)
131
+ Narrator conversation failed (ValueError)
132
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.117 seconds
133
+ Narrator conversation failed (ValueError)
134
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.131 seconds
135
+ Executing <Task pending name='Task-1968' coro=<Api.test_three_audit_characters_recover_from_generation_review_and_format_failures() running at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:174> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.126 seconds
136
+ Narrator conversation failed (ValueError)
137
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.173 seconds
138
+ Executing <Task pending name='Task-1968' coro=<Api.test_three_audit_characters_recover_from_generation_review_and_format_failures() running at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:174> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.108 seconds
139
+ Narrator conversation failed (ReadTimeout)
140
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.105 seconds
141
+ Decision failed (ReadTimeout)
142
+ Narrator conversation failed (ValueError)
143
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.130 seconds
144
+ Narrator conversation failed (ValueError)
145
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.156 seconds
146
+ Executing <Task pending name='Task-1968' coro=<Api.test_three_audit_characters_recover_from_generation_review_and_format_failures() running at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:174> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.102 seconds
147
+ Narrator conversation failed (ValueError)
148
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.132 seconds
149
+ .......Executing <Task finished name='Task-2039' coro=<Decisions.test_portrayal_cannot_override_failed_factual_check() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:134> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.133 seconds
150
+ .Executing <Task finished name='Task-2044' coro=<Decisions.test_refusal_never_offers_clean_next_to_response_selector() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:121> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.177 seconds
151
+ .Executing <Task finished name='Task-2049' coro=<Decisions.test_uncertain_speaker_never_becomes_an_arbitrary_character() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v221.py:107> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.165 seconds
152
+ ..Narrator conversation failed (ReadTimeout)
153
+ ..Executing <Task finished name='Task-2097' coro=<DialogueChoices.test_bare_agreement_is_not_a_repeated_refusal() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:142> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.147 seconds
154
+ .Executing <Task finished name='Task-2102' coro=<DialogueChoices.test_refusal_rows_are_ineligible_without_current_decline() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:149> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.461 seconds
155
+ .Executing <Task finished name='Task-2107' coro=<IndependentReviews.test_focused_social_relevance_cannot_override_a_false_fact() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:198> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.159 seconds
156
+ ..Executing <Task finished name='Task-2117' coro=<IndependentReviews.test_swapped_speaker_is_rejected_despite_positive_fact_and_style_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:189> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.335 seconds
157
+ .....Executing <Task finished name='Task-2122' coro=<Routes.test_all_six_explicit_discoveries_keep_the_authored_path() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:74> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 1.253 seconds
158
+ ...Executing <Task finished name='Task-2137' coro=<Routes.test_weak_or_ambiguous_scope_never_opens_a_discovery() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v222.py:67> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.160 seconds
159
+ .Executing <Task pending name='Task-2148' coro=<BudgetAndRecovery.test_contextual_guard_greeting_needs_no_qwen_or_clarification() running at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:229> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.286 seconds
160
+ ...Decision failed (ReadTimeout)
161
+ Routing failed: HTTPException
162
+ ......Executing <Task finished name='Task-2236' coro=<DialogueIdentity.test_clear_greeting_does_not_require_a_named_character() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:47> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.326 seconds
163
+ .Executing <Task finished name='Task-2241' coro=<DialogueIdentity.test_jo_radio_cannot_be_marked_unavailable_independently() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:30> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.544 seconds
164
+ .Executing <Task finished name='Task-2246' coro=<DialogueIdentity.test_known_absent_and_unknown_people_never_substitute_a_present_person() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:40> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.141 seconds
165
+ .....Executing <Task finished name='Task-2260' coro=<Grounding.test_disclosure_veto_survives_positive_fact_and_portrayal_verdicts() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:134> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.210 seconds
166
+ .Executing <Task finished name='Task-2265' coro=<Grounding.test_focused_relevance_runs_once_even_with_uncertain_speech_act() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v223.py:142> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.244 seconds
167
+ ..Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.100 seconds
168
+ Executing <Task pending name='Task-2280' coro=<Api.test_all_three_emotional_answers_can_skip_generation_with_scope_approval() running at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:197> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.143 seconds
169
+ Executing <Task pending name='Task-2280' coro=<Api.test_all_three_emotional_answers_can_skip_generation_with_scope_approval() running at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:197> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.150 seconds
170
+ .Narrator conversation failed (ReadTimeout)
171
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.190 seconds
172
+ ....Executing <Task finished name='Task-2321' coro=<MeaningAndCoverage.test_close_retrieval_still_requires_independent_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:96> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.109 seconds
173
+ .Executing <Task finished name='Task-2326' coro=<MeaningAndCoverage.test_real_iris_fine_label_ambiguity_gets_independent_family_check() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:73> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.161 seconds
174
+ .Executing <Task finished name='Task-2331' coro=<MeaningAndCoverage.test_role_veto_cannot_be_overruled_by_positive_factual_scores() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v224.py:128> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.112 seconds
175
+ ..........Executing <Task finished name='Task-2341' coro=<Addressee.test_live_second_turn_ambiguity_uses_names_without_generated_history() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:72> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.105 seconds
176
+ ...Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.102 seconds
177
+ .....Executing <Task finished name='Task-2420' coro=<DiscoveryCandidate.test_live_english_weak_discovery_reaches_specialized_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:26> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.105 seconds
178
+ .Executing <Task finished name='Task-2425' coro=<DiscoveryCandidate.test_refined_near_tie_is_not_permission_without_discovery_scope() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v225.py:44> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.114 seconds
179
+ ..Executing <Task pending name='Task-2454' coro=<Api.test_fact_selection_precedes_prose_and_jo_never_needs_qwen() running at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:102> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.468 seconds
180
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.123 seconds
181
+ Executing <Task pending name='Task-2454' coro=<Api.test_fact_selection_precedes_prose_and_jo_never_needs_qwen() running at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:102> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.460 seconds
182
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.112 seconds
183
+ .Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> wait_for=<Future pending cb=[Task.task_wakeup()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:448> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.101 seconds
184
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> wait_for=<Future pending cb=[Task.task_wakeup()] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:448> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.140 seconds
185
+ ...Routing failed: RuntimeError
186
+ Conversation failed: RuntimeError
187
+ Conversation failed: RuntimeError
188
+ Conversation failed: RuntimeError
189
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.103 seconds
190
+ Conversation failed: RuntimeError
191
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.151 seconds
192
+ Conversation failed: RuntimeError
193
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.211 seconds
194
+ .Executing <Task finished name='Task-2550' coro=<Discovery.test_direct_questions_skip_generic_engagement_but_keep_scope_veto() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:23> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.603 seconds
195
+ .Executing <Task finished name='Task-2555' coro=<Discovery.test_physical_action_still_requires_commitment() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:36> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.104 seconds
196
+ ..Executing <Task finished name='Task-2564' coro=<Facts.test_focused_roles_exclude_orientation_but_scope_still_can_reject() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v226.py:47> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.169 seconds
197
+ ...Executing <Task pending name='Task-2583' coro=<Api.test_optional_cleanup_does_not_bypass_factual_review() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:223> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.184 seconds
198
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.209 seconds
199
+ .Executing <Task pending name='Task-2597' coro=<Api.test_partial_fact_survives_provider_failure_and_does_not_claim_completeness() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:199> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.190 seconds
200
+ Narrator conversation failed (ReadTimeout)
201
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.205 seconds
202
+ Executing <Task pending name='Task-2597' coro=<Api.test_partial_fact_survives_provider_failure_and_does_not_claim_completeness() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:199> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.221 seconds
203
+ Narrator conversation failed (ReadTimeout)
204
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.187 seconds
205
+ .Executing <Task pending name='Task-2614' coro=<Api.test_partial_recovery_survives_deadline_and_unknown_need_survives_error() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:233> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.178 seconds
206
+ Conversation failed: RuntimeError
207
+ .Executing <Task pending name='Task-2631' coro=<Api.test_rejected_card_is_not_reintroduced_as_factual_fallback() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:212> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.217 seconds
208
+ Narrator conversation failed (ReadTimeout)
209
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.230 seconds
210
+ .Executing <Task pending name='Task-2645' coro=<Api.test_verified_fact_cards_answer_audit_questions_and_localize_without_generation() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:183> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.251 seconds
211
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.133 seconds
212
+ Executing <Task pending name='Task-2645' coro=<Api.test_verified_fact_cards_answer_audit_questions_and_localize_without_generation() running at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:183> cb=[_run_until_complete_cb() at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/base_events.py:181] created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.187 seconds
213
+ Executing <Task pending name='starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro' coro=<TaskHandle._run_coro() running at /workspace/scratch/8ee563f2817f/deps/python/anyio/_core/_tasks.py:327> cb=[TaskGroup._spawn.<locals>.task_done() at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:870] created at /workspace/scratch/8ee563f2817f/deps/python/anyio/_backends/_asyncio.py:944> took 0.102 seconds
214
+ .......Executing <Task finished name='Task-2672' coro=<Selection.test_fact_cards_cover_observations_and_optics_without_topic_substitution() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:61> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.507 seconds
215
+ ..Executing <Task finished name='Task-2681' coro=<Selection.test_need_is_independent_of_candidate_facts_and_has_no_effect() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:39> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.122 seconds
216
+ .Executing <Task finished name='Task-2686' coro=<Selection.test_partial_is_not_full_and_different_is_never_prepared() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v227.py:80> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.102 seconds
217
+ ...Executing <Task finished name='Task-2700' coro=<Contact.test_absent_subject_is_not_an_unavailable_interlocutor() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v228.py:122> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.113 seconds
218
+ ...Executing <Task finished name='Task-2705' coro=<Retrieval.test_close_evidence_is_retained_without_being_authorized() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v228.py:46> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.113 seconds
219
+ ....Executing <Task finished name='Task-2724' coro=<Retrieval.test_two_partial_answers_are_checked_together_before_publication() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v228.py:74> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.600 seconds
220
+ .Executing <Task finished name='Task-2729' coro=<Retrieval.test_wrong_orientation_prediction_cannot_remove_known_location() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v228.py:38> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.616 seconds
221
+ ....Executing <Task finished name='Task-2774' coro=<Units.test_independent_answer_units_and_recheck_after_bad_addition() done, defined at /workspace/scratch/8ee563f2817f/project/tests/test_v228.py:137> result=None created at /opt/codex/runtimes/codex-primary-runtime/dependencies/python/lib/python3.12/asyncio/runners.py:100> took 0.294 seconds
222
+ .
223
+ ----------------------------------------------------------------------
224
+ Ran 278 tests in 225.298s
225
+
226
+ OK
examples/quiet-archive/README.md ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Les archives silencieuses / The quiet archive
2
+
3
+ Exemple indépendant pour le contrat 2.28 : une lettre, un registre, un sceau,
4
+ Sora présente et Rune absent. Le contenu du registre est une découverte Ink ;
5
+ le rôle public de Rune est disponible avant celle-ci. Le sceau intact n’atteste
6
+ pas la vérité du contenu. Envoyer la lettre n’atteste pas sa réception.
7
+
8
+ Les cinq faits, six versions temporelles et huit scénarios FR/EN montrent
9
+ comment déclarer identité, témoignage, observation, état et limites de preuve.
10
+ Aucune règle de ce récit n’est ajoutée au moteur Python.
11
+
12
+ Depuis la racine du projet :
13
+
14
+ ```bash
15
+ python scripts/check_fourth_pack.py
16
+ ```
17
+
18
+ Cette commande compile et installe temporairement le pack, valide ses ressources
19
+ et parcourt les vrais états Ink avec des verdicts contrôlés, puis retire sa copie.
20
+ Ne pas l’exécuter en parallèle des autres tests ou d’une application en service.
21
+ Elle ne mesure pas la compréhension d’un modèle.
22
+
23
+ Pour installer durablement cet exemple dans un environnement de validation,
24
+ copier le dossier complet dans `stories/quiet-archive`, compiler puis valider.
25
+ Il apparaîtra alors dans le catalogue, sans modification du contrôleur. Après
26
+ installation, le corpus `tests/answer_contract.json` est utilisable avec
27
+ `scripts/check_answer_contract.py --url ... --cases ... --output ...` pour
28
+ mesurer de vrais verdicts. Les autres corpus vides sont à compléter pour une
29
+ recette éditoriale complète ; cet exemple n’est pas un quatrième jeu publié.
examples/quiet-archive/compiled/public.js ADDED
@@ -0,0 +1 @@
 
 
1
+ window.BookStory = {"id":"quiet-archive","version":"1.0.0","initial_scene":"hall","chapter_labels":["I"],"ui":{"page_title":{"fr":"Les archives silencieuses","en":"The quiet archive"},"description":{"fr":"Un pli, deux indices et une décision.","en":"One letter, two clues and a decision."},"home_label":{"fr":"Les archives silencieuses","en":"The quiet archive"},"brand":{"fr":"Les archives silencieuses","en":"The quiet archive"},"cover_a":{"fr":"Les archives silencieuses","en":"The quiet archive"},"cover_b":{"fr":"Les archives silencieuses","en":"The quiet archive"},"edition":{"fr":"Les archives silencieuses","en":"The quiet archive"},"cover_location":{"fr":"Les archives silencieuses","en":"The quiet archive"},"subtitle":{"fr":"Les archives silencieuses","en":"The quiet archive"},"welcome_a":{"fr":"Les archives silencieuses","en":"The quiet archive"},"welcome_b":{"fr":"Les archives silencieuses","en":"The quiet archive"},"intro_1":{"fr":"Les archives silencieuses","en":"The quiet archive"},"intro_2":{"fr":"Les archives silencieuses","en":"The quiet archive"},"intro_3":{"fr":"Les archives silencieuses","en":"The quiet archive"},"start":{"fr":"Entrer","en":"Enter"},"length":{"fr":"Les archives silencieuses","en":"The quiet archive"},"restart":{"fr":"Recommencer","en":"Restart"},"first_steps":{"fr":"Les archives silencieuses","en":"The quiet archive"},"footer_a":{"fr":"Les archives silencieuses","en":"The quiet archive"},"footer_b":{"fr":"Les archives silencieuses","en":"The quiet archive"},"example_question":{"fr":"Qui est Rune ?","en":"Who is Rune?"},"example_action":{"fr":"J’examine le sceau.","en":"I inspect the seal."},"ending_summary":{"fr":"Les archives silencieuses","en":"The quiet archive"},"ending_summary_one":{"fr":"Les archives silencieuses","en":"The quiet archive"}}};
examples/quiet-archive/compiled/story.en.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"inkVersion":21,"root":[[{"->":"hall"},["done",{"#n":"g-0"}],null],"done",{"hall":["#","^scene: hall","/#","#","^chapter: 1","/#","#","^location: Hill archive","/#","#","^title: The register and the letter","/#","^Sora sorts letters on a table. Rune, the usual courier, is absent. A closed letter awaits your decision: send it or leave it here. You can inspect the register and the seal separately.","\n",{"->":"options"},null],"record":["#","^scene: record","/#","#","^chapter: 1","/#","#","^location: Hill archive","/#","#","^title: A dated entry","/#","ev",true,"/ev",{"VAR=":"record_open","re":true},"^The register bears an entry signed Rune: “Left at dawn.” No destination or reason is recorded.","\n",{"->":"options"},null],"seal":["#","^scene: seal","/#","#","^chapter: 1","/#","#","^location: Hill archive","/#","#","^title: Unbroken wax","/#","ev",true,"/ev",{"VAR=":"seal_checked","re":true},"^The wax seal shows no visible break. You have neither opened the letter nor read its contents.","\n",{"->":"options"},null],"options":[["ev","str","^I consult the register. ","#","^id: open_record","/#","/str",{"VAR?":"record_open"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^I inspect the seal. ","#","^id: check_seal","/#","/str",{"VAR?":"seal_checked"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^I send the letter. ","#","^id: dispatch","/#","/str","/ev",{"*":".^.c-2","flg":4},"ev","str","^I leave the letter here. ","#","^id: leave","/#","/str","/ev",{"*":".^.c-3","flg":4},{"c-0":["\n",{"->":"record"},null],"c-1":["\n",{"->":"seal"},null],"c-2":["\n",{"->":"sent"},null],"c-3":["\n",{"->":"left"},null]}],null],"sent":["#","^scene: sent","/#","#","^chapter: 1","/#","#","^location: Hill archive","/#","#","^title: The letter sent","/#","ev",true,"/ev",{"VAR=":"dispatch_sent","re":true},"#","^ending: sent","/#","^You slide the letter into the dispatch tube. It disappears into the pipe. No acknowledgement of receipt reaches you.","\n","end",null],"left":["#","^scene: left","/#","#","^chapter: 1","/#","#","^location: Hill archive","/#","#","^title: The letter retained","/#","#","^ending: left","/#","^You leave the letter on the table. Sora remains at the archive. The letter has not been sent.","\n","end",null],"global decl":["ev",false,{"VAR=":"record_open"},false,{"VAR=":"seal_checked"},false,{"VAR=":"dispatch_sent"},"/ev","end",null]}],"listDefs":{}}
examples/quiet-archive/compiled/story.fr.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"inkVersion":21,"root":[[{"->":"hall"},["done",{"#n":"g-0"}],null],"done",{"hall":["#","^scene: hall","/#","#","^chapter: 1","/#","#","^location: Archives de la colline","/#","#","^title: Le registre et le pli","/#","^Sora classe les plis sur une table. Rune, le courrier habituel, est absent. Un pli fermé attend votre décision : le transmettre ou le laisser ici. Le registre et le sceau peuvent être examinés séparément.","\n",{"->":"options"},null],"record":["#","^scene: record","/#","#","^chapter: 1","/#","#","^location: Archives de la colline","/#","#","^title: Une ligne datée","/#","ev",true,"/ev",{"VAR=":"record_open","re":true},"^Le registre porte cette ligne signée Rune : « Parti à l’aube. » Aucune destination ni raison n’est inscrite.","\n",{"->":"options"},null],"seal":["#","^scene: seal","/#","#","^chapter: 1","/#","#","^location: Archives de la colline","/#","#","^title: La cire intacte","/#","ev",true,"/ev",{"VAR=":"seal_checked","re":true},"^Le sceau de cire ne présente aucune rupture visible. Vous n’avez pas ouvert le pli ni lu son contenu.","\n",{"->":"options"},null],"options":[["ev","str","^Je consulte le registre. ","#","^id: open_record","/#","/str",{"VAR?":"record_open"},"!","/ev",{"*":".^.c-0","flg":5},"ev","str","^J’examine le sceau. ","#","^id: check_seal","/#","/str",{"VAR?":"seal_checked"},"!","/ev",{"*":".^.c-1","flg":5},"ev","str","^Je transmets le pli. ","#","^id: dispatch","/#","/str","/ev",{"*":".^.c-2","flg":4},"ev","str","^Je laisse le pli ici. ","#","^id: leave","/#","/str","/ev",{"*":".^.c-3","flg":4},{"c-0":["\n",{"->":"record"},null],"c-1":["\n",{"->":"seal"},null],"c-2":["\n",{"->":"sent"},null],"c-3":["\n",{"->":"left"},null]}],null],"sent":["#","^scene: sent","/#","#","^chapter: 1","/#","#","^location: Archives de la colline","/#","#","^title: Le pli transmis","/#","ev",true,"/ev",{"VAR=":"dispatch_sent","re":true},"#","^ending: sent","/#","^Vous glissez le pli dans le tube d’expédition. Il disparaît dans le conduit. Aucun accusé de réception ne vous parvient.","\n","end",null],"left":["#","^scene: left","/#","#","^chapter: 1","/#","#","^location: Archives de la colline","/#","#","^title: Le pli conservé","/#","#","^ending: left","/#","^Vous laissez le pli sur la table. Sora reste auprès des archives. Le pli n’a pas été transmis.","\n","end",null],"global decl":["ev",false,{"VAR=":"record_open"},false,{"VAR=":"seal_checked"},false,{"VAR=":"dispatch_sent"},"/ev","end",null]}],"listDefs":{}}
examples/quiet-archive/decisions/choices.json ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 4,
3
+ "story_id": "quiet-archive",
4
+ "actions": {
5
+ "open_record": {
6
+ "description": "Open and read the archive register.",
7
+ "choice_criteria": {
8
+ "when": "The reader explicitly commits to this physical act: Open and read the archive register.",
9
+ "why": "Open and read the archive register.",
10
+ "not_when": "Questions about facts already read, the letter or emotions."
11
+ }
12
+ },
13
+ "check_seal": {
14
+ "description": "Examine the wax seal without opening the letter.",
15
+ "choice_criteria": {
16
+ "when": "The reader explicitly commits to this physical act: Examine the wax seal without opening the letter.",
17
+ "why": "Examine the wax seal without opening the letter.",
18
+ "not_when": "Questions about what an intact seal proves, after inspection."
19
+ }
20
+ },
21
+ "dispatch": {
22
+ "description": "Send the letter through the dispatch tube.",
23
+ "choice_criteria": {
24
+ "when": "The reader explicitly commits to this physical act: Send the letter through the dispatch tube.",
25
+ "why": "Send the letter through the dispatch tube.",
26
+ "not_when": "Considering dispatch, asking if it will arrive or refusing."
27
+ }
28
+ },
29
+ "leave": {
30
+ "description": "Leave the archive letter on the table.",
31
+ "choice_criteria": {
32
+ "when": "The reader explicitly commits to this physical act: Leave the archive letter on the table.",
33
+ "why": "Leave the archive letter on the table.",
34
+ "not_when": "Hesitation or postponing only an inspection."
35
+ }
36
+ }
37
+ },
38
+ "conversations": [
39
+ {
40
+ "scenes": [
41
+ "hall",
42
+ "record",
43
+ "seal",
44
+ "sent",
45
+ "left"
46
+ ],
47
+ "choice_criteria": {
48
+ "when": "Ask for orientation, public identity, feelings, established facts or their limits without performing a physical act.",
49
+ "why": "Answer from acquired evidence; a mention of the letter is not permission to send it.",
50
+ "not_when": "Explicitly performing an available physical action."
51
+ }
52
+ }
53
+ ]
54
+ }
examples/quiet-archive/decisions/narrator-actions.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "actions": {
4
+ "open_record": {
5
+ "fr": "Consulter le registre sans ouvrir le pli.",
6
+ "en": "Read the register without opening the letter."
7
+ },
8
+ "check_seal": {
9
+ "fr": "Examiner la cire sans lire le contenu du pli.",
10
+ "en": "Examine the wax without reading the letter’s contents."
11
+ },
12
+ "dispatch": {
13
+ "fr": "Transmettre le pli sans anticiper sa réception.",
14
+ "en": "Send the letter without anticipating its receipt."
15
+ },
16
+ "leave": {
17
+ "fr": "Laisser le pli sans le transmettre.",
18
+ "en": "Leave the letter without sending it."
19
+ }
20
+ }
21
+ }
examples/quiet-archive/manifest.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 2,
3
+ "id": "quiet-archive",
4
+ "version": "1.0.0",
5
+ "default_language": "fr",
6
+ "languages": [
7
+ "fr",
8
+ "en"
9
+ ],
10
+ "state_variables": [
11
+ "record_open",
12
+ "seal_checked",
13
+ "dispatch_sent"
14
+ ],
15
+ "untranslated_tokens": [],
16
+ "initial_scene": "hall",
17
+ "chapter_labels": [
18
+ "I"
19
+ ],
20
+ "resources": {
21
+ "story.ink": "text/story.ink",
22
+ "story.json": "compiled/story.fr.json",
23
+ "story.en.json": "compiled/story.en.json",
24
+ "locales/story.en.json": "text/story.en.json",
25
+ "canon.json": "world/canon.json",
26
+ "scene-guides.json": "world/scenes.fr.json",
27
+ "locales/guides.en.json": "world/scenes.en.json",
28
+ "notebook.json": "world/notebook.json",
29
+ "routing.json": "decisions/choices.json",
30
+ "narrator-guidance.json": "decisions/narrator-actions.json",
31
+ "voice.json": "narration/voice.json",
32
+ "ui.json": "presentation/ui.json",
33
+ "cover.svg": "presentation/cover.svg",
34
+ "public.js": "compiled/public.js",
35
+ "locales/messages.en.json": "presentation/messages.en.json",
36
+ "characters.json": "world/characters.json",
37
+ "challenges.json": "mechanics/challenges.json",
38
+ "evaluation/conversation_cases.json": "tests/conversation_cases.json",
39
+ "evaluation/intent_cases.json": "tests/intent_cases.json",
40
+ "evaluation/response_selection.json": "tests/response_selection.json",
41
+ "narrator-cases.json": "tests/narrator-cases.json",
42
+ "responses.json": "narration/responses.json",
43
+ "evaluation/authored_responses.json": "tests/authored_responses.json",
44
+ "dialogue.json": "narration/dialogue.json",
45
+ "evaluation/answer_contract.json": "tests/answer_contract.json"
46
+ }
47
+ }
examples/quiet-archive/mechanics/challenges.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "actions": {}
4
+ }
examples/quiet-archive/narration/dialogue.json ADDED
@@ -0,0 +1,311 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 2,
3
+ "profiles": {
4
+ "sora": {
5
+ "beats": [
6
+ {
7
+ "id": "current",
8
+ "when": {},
9
+ "scenes": [],
10
+ "source_ids": [
11
+ "present",
12
+ "fact:identity_sora"
13
+ ],
14
+ "concern": {
15
+ "fr": "La précision des archives m’importe ; je ne peux pas promettre ce que je n’ai pas constaté.",
16
+ "en": "Accurate records matter to me; I cannot promise what I have not observed."
17
+ },
18
+ "context": {
19
+ "fr": "Vous êtes aux archives. L’état du pli et les constats déjà faits restent votre point de départ.",
20
+ "en": "You are at the archive. The letter’s state and the findings already made remain your starting point."
21
+ }
22
+ },
23
+ {
24
+ "id": "sent",
25
+ "when": {
26
+ "dispatch_sent": true
27
+ },
28
+ "scenes": [],
29
+ "source_ids": [
30
+ "present",
31
+ "fact:dispatch_status"
32
+ ],
33
+ "concern": {
34
+ "fr": "La précision des archives m’importe ; je ne peux pas promettre ce que je n’ai pas constaté.",
35
+ "en": "Accurate records matter to me; I cannot promise what I have not observed."
36
+ },
37
+ "context": {
38
+ "fr": "Le pli est parti par le tube. Aucun accusé de réception n’est arrivé ; son envoi ne prouve pas sa réception.",
39
+ "en": "The letter has left through the tube. No acknowledgement has arrived; sending it does not prove receipt."
40
+ }
41
+ }
42
+ ],
43
+ "delivery": {
44
+ "local": {
45
+ "fr": "{line}",
46
+ "en": "{line}"
47
+ },
48
+ "remote": {
49
+ "fr": "{line}",
50
+ "en": "{line}"
51
+ }
52
+ },
53
+ "replies": {
54
+ "concern": {
55
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
56
+ "en": "{concern} You can ask questions before deciding."
57
+ },
58
+ "reassurance": {
59
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
60
+ "en": "{concern} You can ask questions before deciding."
61
+ },
62
+ "refusal": {
63
+ "fr": "Vous pouvez différer votre décision.",
64
+ "en": "You may postpone your decision."
65
+ },
66
+ "greeting": {
67
+ "fr": "Bonjour. Je vous écoute.",
68
+ "en": "Hello. I am listening."
69
+ },
70
+ "thanks": {
71
+ "fr": "Je vous en prie.",
72
+ "en": "You are welcome."
73
+ },
74
+ "information": {
75
+ "fr": "{context}",
76
+ "en": "{context}"
77
+ },
78
+ "orientation": {
79
+ "fr": "{context}",
80
+ "en": "{context}"
81
+ },
82
+ "clarification": {
83
+ "fr": "{context} Quelle information souhaitez-vous préciser ?",
84
+ "en": "{context} Which information would you like clarified?"
85
+ },
86
+ "acknowledgement": {
87
+ "fr": "D’accord.",
88
+ "en": "All right."
89
+ },
90
+ "unavailable": {
91
+ "fr": "Cette personne ne peut pas vous répondre ici. Sora est présente.",
92
+ "en": "That person cannot answer you here. Sora is present."
93
+ },
94
+ "emotional": {
95
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
96
+ "en": "{concern} You can ask questions before deciding."
97
+ }
98
+ },
99
+ "coverage": {
100
+ "concern": "A question about this speaker’s present worries, feelings or priorities, without requesting new testimony or a different factual explanation.",
101
+ "reassurance": "Support for the reader’s uncertainty or anxiety before deciding; no demand for a demonstration, new testimony or a factual guarantee.",
102
+ "emotional": "An emotional exchange about present worries or support before deciding. Naming a task supplies context; asking how to perform it requires a separate answer.",
103
+ "refusal": "Acknowledging postponement or refusal, without a substantial factual follow-up."
104
+ }
105
+ },
106
+ "rune": {
107
+ "beats": [
108
+ {
109
+ "id": "current",
110
+ "when": {},
111
+ "scenes": [],
112
+ "source_ids": [
113
+ "present",
114
+ "fact:identity_sora"
115
+ ],
116
+ "concern": {
117
+ "fr": "La précision des archives m’importe ; je ne peux pas promettre ce que je n’ai pas constaté.",
118
+ "en": "Accurate records matter to me; I cannot promise what I have not observed."
119
+ },
120
+ "context": {
121
+ "fr": "Vous êtes aux archives. L’état du pli et les constats déjà faits restent votre point de départ.",
122
+ "en": "You are at the archive. The letter’s state and the findings already made remain your starting point."
123
+ }
124
+ },
125
+ {
126
+ "id": "sent",
127
+ "when": {
128
+ "dispatch_sent": true
129
+ },
130
+ "scenes": [],
131
+ "source_ids": [
132
+ "present",
133
+ "fact:dispatch_status"
134
+ ],
135
+ "concern": {
136
+ "fr": "La précision des archives m’importe ; je ne peux pas promettre ce que je n’ai pas constaté.",
137
+ "en": "Accurate records matter to me; I cannot promise what I have not observed."
138
+ },
139
+ "context": {
140
+ "fr": "Le pli est parti par le tube. Aucun accusé de réception n’est arrivé ; son envoi ne prouve pas sa réception.",
141
+ "en": "The letter has left through the tube. No acknowledgement has arrived; sending it does not prove receipt."
142
+ }
143
+ }
144
+ ],
145
+ "delivery": {
146
+ "local": {
147
+ "fr": "{line}",
148
+ "en": "{line}"
149
+ },
150
+ "remote": {
151
+ "fr": "{line}",
152
+ "en": "{line}"
153
+ }
154
+ },
155
+ "replies": {
156
+ "concern": {
157
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
158
+ "en": "{concern} You can ask questions before deciding."
159
+ },
160
+ "reassurance": {
161
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
162
+ "en": "{concern} You can ask questions before deciding."
163
+ },
164
+ "refusal": {
165
+ "fr": "Vous pouvez différer votre décision.",
166
+ "en": "You may postpone your decision."
167
+ },
168
+ "greeting": {
169
+ "fr": "Bonjour. Je vous écoute.",
170
+ "en": "Hello. I am listening."
171
+ },
172
+ "thanks": {
173
+ "fr": "Je vous en prie.",
174
+ "en": "You are welcome."
175
+ },
176
+ "information": {
177
+ "fr": "{context}",
178
+ "en": "{context}"
179
+ },
180
+ "orientation": {
181
+ "fr": "{context}",
182
+ "en": "{context}"
183
+ },
184
+ "clarification": {
185
+ "fr": "{context} Quelle information souhaitez-vous préciser ?",
186
+ "en": "{context} Which information would you like clarified?"
187
+ },
188
+ "acknowledgement": {
189
+ "fr": "D’accord.",
190
+ "en": "All right."
191
+ },
192
+ "unavailable": {
193
+ "fr": "Cette personne ne peut pas vous répondre ici. Sora est présente.",
194
+ "en": "That person cannot answer you here. Sora is present."
195
+ },
196
+ "emotional": {
197
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
198
+ "en": "{concern} You can ask questions before deciding."
199
+ }
200
+ },
201
+ "coverage": {
202
+ "concern": "A question about this speaker’s present worries, feelings or priorities, without requesting new testimony or a different factual explanation.",
203
+ "reassurance": "Support for the reader’s uncertainty or anxiety before deciding; no demand for a demonstration, new testimony or a factual guarantee.",
204
+ "emotional": "An emotional exchange about present worries or support before deciding. Naming a task supplies context; asking how to perform it requires a separate answer.",
205
+ "refusal": "Acknowledging postponement or refusal, without a substantial factual follow-up."
206
+ }
207
+ },
208
+ "narrator": {
209
+ "beats": [
210
+ {
211
+ "id": "current",
212
+ "when": {},
213
+ "scenes": [],
214
+ "source_ids": [
215
+ "present",
216
+ "fact:identity_sora"
217
+ ],
218
+ "concern": {
219
+ "fr": "Sora tient à distinguer les traces des suppositions.",
220
+ "en": "Sora cares about distinguishing records from assumptions."
221
+ },
222
+ "context": {
223
+ "fr": "Vous êtes aux archives. L’état du pli et les constats déjà faits restent votre point de départ.",
224
+ "en": "You are at the archive. The letter’s state and the findings already made remain your starting point."
225
+ }
226
+ },
227
+ {
228
+ "id": "sent",
229
+ "when": {
230
+ "dispatch_sent": true
231
+ },
232
+ "scenes": [],
233
+ "source_ids": [
234
+ "present",
235
+ "fact:dispatch_status"
236
+ ],
237
+ "concern": {
238
+ "fr": "Sora tient à distinguer les traces des suppositions.",
239
+ "en": "Sora cares about distinguishing records from assumptions."
240
+ },
241
+ "context": {
242
+ "fr": "Le pli est parti par le tube. Aucun accusé de réception n’est arrivé ; son envoi ne prouve pas sa réception.",
243
+ "en": "The letter has left through the tube. No acknowledgement has arrived; sending it does not prove receipt."
244
+ }
245
+ }
246
+ ],
247
+ "delivery": {
248
+ "local": {
249
+ "fr": "{line}",
250
+ "en": "{line}"
251
+ },
252
+ "remote": {
253
+ "fr": "{line}",
254
+ "en": "{line}"
255
+ }
256
+ },
257
+ "replies": {
258
+ "concern": {
259
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
260
+ "en": "{concern} You can ask questions before deciding."
261
+ },
262
+ "reassurance": {
263
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
264
+ "en": "{concern} You can ask questions before deciding."
265
+ },
266
+ "refusal": {
267
+ "fr": "Vous pouvez différer votre décision.",
268
+ "en": "You may postpone your decision."
269
+ },
270
+ "greeting": {
271
+ "fr": "Bonjour. Je vous écoute.",
272
+ "en": "Hello. I am listening."
273
+ },
274
+ "thanks": {
275
+ "fr": "Je vous en prie.",
276
+ "en": "You are welcome."
277
+ },
278
+ "information": {
279
+ "fr": "{context}",
280
+ "en": "{context}"
281
+ },
282
+ "orientation": {
283
+ "fr": "{context}",
284
+ "en": "{context}"
285
+ },
286
+ "clarification": {
287
+ "fr": "{context} Quelle information souhaitez-vous préciser ?",
288
+ "en": "{context} Which information would you like clarified?"
289
+ },
290
+ "acknowledgement": {
291
+ "fr": "D’accord.",
292
+ "en": "All right."
293
+ },
294
+ "unavailable": {
295
+ "fr": "Cette personne ne peut pas vous répondre ici. Sora est présente.",
296
+ "en": "That person cannot answer you here. Sora is present."
297
+ },
298
+ "emotional": {
299
+ "fr": "{concern} Vous pouvez poser vos questions avant de décider.",
300
+ "en": "{concern} You can ask questions before deciding."
301
+ }
302
+ },
303
+ "coverage": {
304
+ "concern": "A question about this speaker’s present worries, feelings or priorities, without requesting new testimony or a different factual explanation.",
305
+ "reassurance": "Support for the reader’s uncertainty or anxiety before deciding; no demand for a demonstration, new testimony or a factual guarantee.",
306
+ "emotional": "An emotional exchange about present worries or support before deciding. Naming a task supplies context; asking how to perform it requires a separate answer.",
307
+ "refusal": "Acknowledging postponement or refusal, without a substantial factual follow-up."
308
+ }
309
+ }
310
+ }
311
+ }
examples/quiet-archive/narration/responses.json ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 2,
3
+ "evidence": {
4
+ "fact:identity_sora": {
5
+ "when": "The reader asks about Sora is an archivist and sorts letters.",
6
+ "why": "State the established information and its explicit limits.",
7
+ "not_when": "A different person, object or unestablished cause is requested.",
8
+ "needs": [
9
+ "identity"
10
+ ],
11
+ "recall": [
12
+ {
13
+ "when": {},
14
+ "needs": [
15
+ "identity"
16
+ ],
17
+ "text": {
18
+ "fr": "Sora est archiviste et classe les plis.",
19
+ "en": "Sora is an archivist and sorts letters."
20
+ }
21
+ }
22
+ ]
23
+ },
24
+ "fact:identity_rune": {
25
+ "when": "The reader asks about Rune is the archive’s usual courier. He is absent.",
26
+ "why": "State the established information and its explicit limits.",
27
+ "not_when": "A different person, object or unestablished cause is requested.",
28
+ "needs": [
29
+ "identity"
30
+ ],
31
+ "recall": [
32
+ {
33
+ "when": {},
34
+ "needs": [
35
+ "identity"
36
+ ],
37
+ "text": {
38
+ "fr": "Rune est le courrier habituel des archives. Il est absent. Son absence ne prouve ni départ définitif ni danger.",
39
+ "en": "Rune is the archive’s usual courier. He is absent. His absence proves neither a permanent departure nor danger."
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ "fact:dispatch_status": {
45
+ "when": "The reader asks about The letter waits on the table. You may send it or leave it here; inspecting the register and seal is optional.",
46
+ "why": "State the established information and its explicit limits.",
47
+ "not_when": "A different person, object or unestablished cause is requested.",
48
+ "needs": [
49
+ "status",
50
+ "orientation",
51
+ "evidence"
52
+ ],
53
+ "recall": [
54
+ {
55
+ "when": {},
56
+ "needs": [
57
+ "status",
58
+ "orientation",
59
+ "evidence"
60
+ ],
61
+ "text": {
62
+ "fr": "Le pli attend sur la table. Vous pouvez le transmettre ou le laisser ici ; consulter le registre et examiner le sceau sont facultatifs. Le contenu du pli est inconnu.",
63
+ "en": "The letter waits on the table. You may send it or leave it here; inspecting the register and seal is optional. The letter’s contents are unknown."
64
+ }
65
+ },
66
+ {
67
+ "when": {
68
+ "dispatch_sent": true
69
+ },
70
+ "needs": [
71
+ "status",
72
+ "orientation",
73
+ "evidence"
74
+ ],
75
+ "text": {
76
+ "fr": "Le pli a été transmis par le tube. Aucun accusé de réception n’est arrivé. L’envoi ne prouve pas la réception.",
77
+ "en": "The letter was sent through the tube. No acknowledgement of receipt has arrived. Sending does not prove receipt."
78
+ }
79
+ }
80
+ ]
81
+ },
82
+ "fact:departure_entry": {
83
+ "when": "The reader asks about The register signed Rune says “Left at dawn”, without a destination or reason.",
84
+ "why": "State the established information and its explicit limits.",
85
+ "not_when": "A different person, object or unestablished cause is requested.",
86
+ "needs": [
87
+ "evidence",
88
+ "information"
89
+ ],
90
+ "recall": [
91
+ {
92
+ "when": {},
93
+ "needs": [
94
+ "evidence",
95
+ "information"
96
+ ],
97
+ "text": {
98
+ "fr": "Le registre signé Rune indique « Parti à l’aube », sans destination ni raison. La ligne est un témoignage écrit, pas une observation de son trajet.",
99
+ "en": "The register signed Rune says “Left at dawn”, without a destination or reason. The entry is written testimony, not an observation of his journey."
100
+ }
101
+ }
102
+ ]
103
+ },
104
+ "fact:seal_observation": {
105
+ "when": "The reader asks about The seal shows no visible break. The letter remains closed and its contents unknown.",
106
+ "why": "State the established information and its explicit limits.",
107
+ "not_when": "A different person, object or unestablished cause is requested.",
108
+ "needs": [
109
+ "evidence",
110
+ "explanation"
111
+ ],
112
+ "recall": [
113
+ {
114
+ "when": {},
115
+ "needs": [
116
+ "evidence",
117
+ "explanation"
118
+ ],
119
+ "text": {
120
+ "fr": "Le sceau ne présente aucune rupture visible. Le pli reste fermé et son contenu inconnu. Un sceau intact ne prouve pas que le contenu soit vrai.",
121
+ "en": "The seal shows no visible break. The letter remains closed and its contents unknown. An intact seal does not prove the contents are true."
122
+ }
123
+ }
124
+ ]
125
+ }
126
+ },
127
+ "replies": [],
128
+ "partial": {
129
+ "fr": "{answer} Ce constat ne répond pas à toute votre question.",
130
+ "en": "{answer} This finding does not answer your entire question."
131
+ }
132
+ }
examples/quiet-archive/narration/voice.json ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ {
2
+ "fr": "Prose sobre, attentive aux différences entre traces et conclusions.",
3
+ "en": "Plain prose, attentive to the difference between traces and conclusions."
4
+ }
examples/quiet-archive/presentation/cover.svg ADDED
examples/quiet-archive/presentation/messages.en.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
examples/quiet-archive/presentation/ui.json ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "page_title": {
3
+ "fr": "Les archives silencieuses",
4
+ "en": "The quiet archive"
5
+ },
6
+ "description": {
7
+ "fr": "Un pli, deux indices et une décision.",
8
+ "en": "One letter, two clues and a decision."
9
+ },
10
+ "home_label": {
11
+ "fr": "Les archives silencieuses",
12
+ "en": "The quiet archive"
13
+ },
14
+ "brand": {
15
+ "fr": "Les archives silencieuses",
16
+ "en": "The quiet archive"
17
+ },
18
+ "cover_a": {
19
+ "fr": "Les archives silencieuses",
20
+ "en": "The quiet archive"
21
+ },
22
+ "cover_b": {
23
+ "fr": "Les archives silencieuses",
24
+ "en": "The quiet archive"
25
+ },
26
+ "edition": {
27
+ "fr": "Les archives silencieuses",
28
+ "en": "The quiet archive"
29
+ },
30
+ "cover_location": {
31
+ "fr": "Les archives silencieuses",
32
+ "en": "The quiet archive"
33
+ },
34
+ "subtitle": {
35
+ "fr": "Les archives silencieuses",
36
+ "en": "The quiet archive"
37
+ },
38
+ "welcome_a": {
39
+ "fr": "Les archives silencieuses",
40
+ "en": "The quiet archive"
41
+ },
42
+ "welcome_b": {
43
+ "fr": "Les archives silencieuses",
44
+ "en": "The quiet archive"
45
+ },
46
+ "intro_1": {
47
+ "fr": "Les archives silencieuses",
48
+ "en": "The quiet archive"
49
+ },
50
+ "intro_2": {
51
+ "fr": "Les archives silencieuses",
52
+ "en": "The quiet archive"
53
+ },
54
+ "intro_3": {
55
+ "fr": "Les archives silencieuses",
56
+ "en": "The quiet archive"
57
+ },
58
+ "start": {
59
+ "fr": "Entrer",
60
+ "en": "Enter"
61
+ },
62
+ "length": {
63
+ "fr": "Les archives silencieuses",
64
+ "en": "The quiet archive"
65
+ },
66
+ "restart": {
67
+ "fr": "Recommencer",
68
+ "en": "Restart"
69
+ },
70
+ "first_steps": {
71
+ "fr": "Les archives silencieuses",
72
+ "en": "The quiet archive"
73
+ },
74
+ "footer_a": {
75
+ "fr": "Les archives silencieuses",
76
+ "en": "The quiet archive"
77
+ },
78
+ "footer_b": {
79
+ "fr": "Les archives silencieuses",
80
+ "en": "The quiet archive"
81
+ },
82
+ "example_question": {
83
+ "fr": "Qui est Rune ?",
84
+ "en": "Who is Rune?"
85
+ },
86
+ "example_action": {
87
+ "fr": "J’examine le sceau.",
88
+ "en": "I inspect the seal."
89
+ },
90
+ "ending_summary": {
91
+ "fr": "Les archives silencieuses",
92
+ "en": "The quiet archive"
93
+ },
94
+ "ending_summary_one": {
95
+ "fr": "Les archives silencieuses",
96
+ "en": "The quiet archive"
97
+ }
98
+ }
examples/quiet-archive/tests/answer_contract.json ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "rune_identity_fr",
4
+ "story_id": "quiet-archive",
5
+ "language": "fr",
6
+ "path": [],
7
+ "text": "Qui est Rune ?",
8
+ "expected_need": "identity",
9
+ "expected_sources": [
10
+ "fact:identity_rune"
11
+ ],
12
+ "expected_reply": "recall:fact:identity_rune",
13
+ "absent_sources": [
14
+ "fact:departure_entry"
15
+ ],
16
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
17
+ },
18
+ {
19
+ "name": "written_evidence_fr",
20
+ "story_id": "quiet-archive",
21
+ "language": "fr",
22
+ "path": [
23
+ "open_record"
24
+ ],
25
+ "text": "Son mot explique-t-il pourquoi Rune est parti ?",
26
+ "expected_need": "evidence",
27
+ "expected_sources": [
28
+ "fact:departure_entry"
29
+ ],
30
+ "expected_reply": "recall:fact:departure_entry",
31
+ "absent_sources": [
32
+ "fact:seal_observation"
33
+ ],
34
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
35
+ },
36
+ {
37
+ "name": "intact_seal_fr",
38
+ "story_id": "quiet-archive",
39
+ "language": "fr",
40
+ "path": [
41
+ "check_seal"
42
+ ],
43
+ "text": "Ce sceau prouve-t-il que le contenu est vrai ?",
44
+ "expected_need": "evidence",
45
+ "expected_sources": [
46
+ "fact:seal_observation"
47
+ ],
48
+ "expected_reply": "recall:fact:seal_observation",
49
+ "absent_sources": [
50
+ "fact:departure_entry"
51
+ ],
52
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
53
+ },
54
+ {
55
+ "name": "sent_not_received_fr",
56
+ "story_id": "quiet-archive",
57
+ "language": "fr",
58
+ "path": [
59
+ "dispatch"
60
+ ],
61
+ "text": "Le pli est-il déjà reçu ?",
62
+ "expected_need": "evidence",
63
+ "expected_sources": [
64
+ "fact:dispatch_status"
65
+ ],
66
+ "expected_reply": "recall:fact:dispatch_status",
67
+ "absent_sources": [],
68
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
69
+ },
70
+ {
71
+ "name": "rune_identity_en",
72
+ "story_id": "quiet-archive",
73
+ "language": "en",
74
+ "path": [],
75
+ "text": "Who is Rune?",
76
+ "expected_need": "identity",
77
+ "expected_sources": [
78
+ "fact:identity_rune"
79
+ ],
80
+ "expected_reply": "recall:fact:identity_rune",
81
+ "absent_sources": [
82
+ "fact:departure_entry"
83
+ ],
84
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
85
+ },
86
+ {
87
+ "name": "written_evidence_en",
88
+ "story_id": "quiet-archive",
89
+ "language": "en",
90
+ "path": [
91
+ "open_record"
92
+ ],
93
+ "text": "Does the entry explain why Rune left?",
94
+ "expected_need": "evidence",
95
+ "expected_sources": [
96
+ "fact:departure_entry"
97
+ ],
98
+ "expected_reply": "recall:fact:departure_entry",
99
+ "absent_sources": [
100
+ "fact:seal_observation"
101
+ ],
102
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
103
+ },
104
+ {
105
+ "name": "intact_seal_en",
106
+ "story_id": "quiet-archive",
107
+ "language": "en",
108
+ "path": [
109
+ "check_seal"
110
+ ],
111
+ "text": "Does that seal prove the contents are true?",
112
+ "expected_need": "evidence",
113
+ "expected_sources": [
114
+ "fact:seal_observation"
115
+ ],
116
+ "expected_reply": "recall:fact:seal_observation",
117
+ "absent_sources": [
118
+ "fact:departure_entry"
119
+ ],
120
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
121
+ },
122
+ {
123
+ "name": "sent_not_received_en",
124
+ "story_id": "quiet-archive",
125
+ "language": "en",
126
+ "path": [
127
+ "dispatch"
128
+ ],
129
+ "text": "Has the letter already been received?",
130
+ "expected_need": "evidence",
131
+ "expected_sources": [
132
+ "fact:dispatch_status"
133
+ ],
134
+ "expected_reply": "recall:fact:dispatch_status",
135
+ "absent_sources": [],
136
+ "review_notes": "The stated evidence does not authorize a destination, motive or proof of receipt."
137
+ }
138
+ ]
examples/quiet-archive/tests/authored_responses.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
examples/quiet-archive/tests/conversation_cases.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
examples/quiet-archive/tests/intent_cases.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
examples/quiet-archive/tests/narrator-cases.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
examples/quiet-archive/tests/response_selection.json ADDED
@@ -0,0 +1 @@
 
 
1
+ []
examples/quiet-archive/text/story.en.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "^location: Archives de la colline": "^location: Hill archive",
3
+ "^title: Le registre et le pli": "^title: The register and the letter",
4
+ "^Sora classe les plis sur une table. Rune, le courrier habituel, est absent. Un pli fermé attend votre décision : le transmettre ou le laisser ici. Le registre et le sceau peuvent être examinés séparément.": "^Sora sorts letters on a table. Rune, the usual courier, is absent. A closed letter awaits your decision: send it or leave it here. You can inspect the register and the seal separately.",
5
+ "^title: Une ligne datée": "^title: A dated entry",
6
+ "^Le registre porte cette ligne signée Rune : « Parti à l’aube. » Aucune destination ni raison n’est inscrite.": "^The register bears an entry signed Rune: “Left at dawn.” No destination or reason is recorded.",
7
+ "^title: La cire intacte": "^title: Unbroken wax",
8
+ "^Le sceau de cire ne présente aucune rupture visible. Vous n’avez pas ouvert le pli ni lu son contenu.": "^The wax seal shows no visible break. You have neither opened the letter nor read its contents.",
9
+ "^Je consulte le registre. ": "^I consult the register. ",
10
+ "^J’examine le sceau. ": "^I inspect the seal. ",
11
+ "^Je transmets le pli. ": "^I send the letter. ",
12
+ "^Je laisse le pli ici. ": "^I leave the letter here. ",
13
+ "^title: Le pli transmis": "^title: The letter sent",
14
+ "^Vous glissez le pli dans le tube d’expédition. Il disparaît dans le conduit. Aucun accusé de réception ne vous parvient.": "^You slide the letter into the dispatch tube. It disappears into the pipe. No acknowledgement of receipt reaches you.",
15
+ "^title: Le pli conservé": "^title: The letter retained",
16
+ "^Vous laissez le pli sur la table. Sora reste auprès des archives. Le pli n’a pas été transmis.": "^You leave the letter on the table. Sora remains at the archive. The letter has not been sent."
17
+ }
examples/quiet-archive/text/story.ink ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ VAR record_open = false
2
+ VAR seal_checked = false
3
+ VAR dispatch_sent = false
4
+ -> hall
5
+
6
+
7
+ === hall ===
8
+ # scene: hall
9
+ # chapter: 1
10
+ # location: Archives de la colline
11
+ # title: Le registre et le pli
12
+ Sora classe les plis sur une table. Rune, le courrier habituel, est absent. Un pli fermé attend votre décision : le transmettre ou le laisser ici. Le registre et le sceau peuvent être examinés séparément.
13
+ -> options
14
+
15
+ === record ===
16
+ # scene: record
17
+ # chapter: 1
18
+ # location: Archives de la colline
19
+ # title: Une ligne datée
20
+ ~ record_open = true
21
+ Le registre porte cette ligne signée Rune : « Parti à l’aube. » Aucune destination ni raison n’est inscrite.
22
+ -> options
23
+
24
+ === seal ===
25
+ # scene: seal
26
+ # chapter: 1
27
+ # location: Archives de la colline
28
+ # title: La cire intacte
29
+ ~ seal_checked = true
30
+ Le sceau de cire ne présente aucune rupture visible. Vous n’avez pas ouvert le pli ni lu son contenu.
31
+ -> options
32
+
33
+ === options ===
34
+ + {not record_open} [Je consulte le registre. # id: open_record]
35
+ -> record
36
+ + {not seal_checked} [J’examine le sceau. # id: check_seal]
37
+ -> seal
38
+ + [Je transmets le pli. # id: dispatch]
39
+ -> sent
40
+ + [Je laisse le pli ici. # id: leave]
41
+ -> left
42
+
43
+ === sent ===
44
+ # scene: sent
45
+ # chapter: 1
46
+ # location: Archives de la colline
47
+ # title: Le pli transmis
48
+ ~ dispatch_sent = true
49
+ # ending: sent
50
+ Vous glissez le pli dans le tube d’expédition. Il disparaît dans le conduit. Aucun accusé de réception ne vous parvient.
51
+ -> END
52
+
53
+ === left ===
54
+ # scene: left
55
+ # chapter: 1
56
+ # location: Archives de la colline
57
+ # title: Le pli conservé
58
+ # ending: left
59
+ Vous laissez le pli sur la table. Sora reste auprès des archives. Le pli n’a pas été transmis.
60
+ -> END
examples/quiet-archive/world/canon.json ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "source_sha256": "1967588bef04011825c5d9073ad2fab5d44d8c0b6fee12a39a2f91005b496688",
4
+ "translation_sha256": "aaaebec1009f65279970b8a3e3bf80d35eccc9700aab2a350a713e53452c7dae",
5
+ "facts": [
6
+ {
7
+ "id": "identity_sora",
8
+ "source": "hall",
9
+ "fr": "Sora est archiviste et classe les plis.",
10
+ "en": "Sora is an archivist and sorts letters.",
11
+ "known_by": [
12
+ "Sora"
13
+ ],
14
+ "revealed_by": null,
15
+ "reveal_actions": [],
16
+ "public": true,
17
+ "epistemic": {
18
+ "kind": "identity",
19
+ "limits": {
20
+ "fr": "",
21
+ "en": ""
22
+ }
23
+ }
24
+ },
25
+ {
26
+ "id": "identity_rune",
27
+ "source": "hall",
28
+ "fr": "Rune est le courrier habituel des archives. Il est absent.",
29
+ "en": "Rune is the archive’s usual courier. He is absent.",
30
+ "known_by": [
31
+ "Sora"
32
+ ],
33
+ "revealed_by": null,
34
+ "reveal_actions": [],
35
+ "public": true,
36
+ "epistemic": {
37
+ "kind": "identity",
38
+ "limits": {
39
+ "fr": "Son absence ne prouve ni départ définitif ni danger.",
40
+ "en": "His absence proves neither a permanent departure nor danger."
41
+ }
42
+ }
43
+ },
44
+ {
45
+ "id": "dispatch_status",
46
+ "source": "hall",
47
+ "fr": "Le pli attend sur la table. Vous pouvez le transmettre ou le laisser ici ; consulter le registre et examiner le sceau sont facultatifs.",
48
+ "en": "The letter waits on the table. You may send it or leave it here; inspecting the register and seal is optional.",
49
+ "known_by": [
50
+ "Sora"
51
+ ],
52
+ "revealed_by": null,
53
+ "reveal_actions": [],
54
+ "public": true,
55
+ "epistemic": {
56
+ "kind": "state",
57
+ "limits": {
58
+ "fr": "Le contenu du pli est inconnu.",
59
+ "en": "The letter’s contents are unknown."
60
+ }
61
+ },
62
+ "variants": [
63
+ {
64
+ "when": {
65
+ "dispatch_sent": true
66
+ },
67
+ "fr": "Le pli a été transmis par le tube. Aucun accusé de réception n’est arrivé.",
68
+ "en": "The letter was sent through the tube. No acknowledgement of receipt has arrived.",
69
+ "epistemic": {
70
+ "kind": "state",
71
+ "limits": {
72
+ "fr": "L’envoi ne prouve pas la réception.",
73
+ "en": "Sending does not prove receipt."
74
+ }
75
+ }
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ "id": "departure_entry",
81
+ "source": "record",
82
+ "fr": "Le registre signé Rune indique « Parti à l’aube », sans destination ni raison.",
83
+ "en": "The register signed Rune says “Left at dawn”, without a destination or reason.",
84
+ "known_by": [
85
+ "Sora"
86
+ ],
87
+ "revealed_by": "record_open",
88
+ "reveal_actions": [
89
+ "open_record"
90
+ ],
91
+ "public": false,
92
+ "epistemic": {
93
+ "kind": "testimony",
94
+ "limits": {
95
+ "fr": "La ligne est un témoignage écrit, pas une observation de son trajet.",
96
+ "en": "The entry is written testimony, not an observation of his journey."
97
+ }
98
+ }
99
+ },
100
+ {
101
+ "id": "seal_observation",
102
+ "source": "seal",
103
+ "fr": "Le sceau ne présente aucune rupture visible. Le pli reste fermé et son contenu inconnu.",
104
+ "en": "The seal shows no visible break. The letter remains closed and its contents unknown.",
105
+ "known_by": [
106
+ "Sora"
107
+ ],
108
+ "revealed_by": "seal_checked",
109
+ "reveal_actions": [
110
+ "check_seal"
111
+ ],
112
+ "public": false,
113
+ "epistemic": {
114
+ "kind": "observation",
115
+ "limits": {
116
+ "fr": "Un sceau intact ne prouve pas que le contenu soit vrai.",
117
+ "en": "An intact seal does not prove the contents are true."
118
+ }
119
+ }
120
+ }
121
+ ],
122
+ "plot_blueprint": {
123
+ "fr": "Choisir le devenir d’un pli sans confondre indices et conclusions.",
124
+ "en": "Decide what happens to a letter without confusing clues and conclusions."
125
+ }
126
+ }
examples/quiet-archive/world/characters.json ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 2,
3
+ "characters": [
4
+ {
5
+ "id": "sora",
6
+ "name": "Sora",
7
+ "source": "hall",
8
+ "identity_facts": [
9
+ "identity_sora"
10
+ ],
11
+ "portrayal_requires": [
12
+ "identity_sora"
13
+ ],
14
+ "portrayal": {
15
+ "fr": {
16
+ "temperament": "Patiente, précise ; préfère laisser une question ouverte plutôt qu’inventer.",
17
+ "motivation": "Préserver des archives exactes.",
18
+ "voice": "Des phrases simples.",
19
+ "interaction": "Peut discuter ; ne décide pas pour le lecteur."
20
+ },
21
+ "en": {
22
+ "temperament": "Patient and precise; prefers an open question to an invention.",
23
+ "motivation": "Preserve accurate records.",
24
+ "voice": "Plain sentences.",
25
+ "interaction": "May converse; does not decide for the reader."
26
+ }
27
+ }
28
+ },
29
+ {
30
+ "id": "rune",
31
+ "name": "Rune",
32
+ "source": "hall",
33
+ "identity_facts": [
34
+ "identity_rune"
35
+ ],
36
+ "portrayal_requires": [
37
+ "identity_rune"
38
+ ],
39
+ "portrayal": {
40
+ "fr": {
41
+ "temperament": "Discret et organisé ; aucun motif de départ n’est établi.",
42
+ "motivation": "Préserver des archives exactes.",
43
+ "voice": "Des phrases simples.",
44
+ "interaction": "Peut discuter ; ne décide pas pour le lecteur."
45
+ },
46
+ "en": {
47
+ "temperament": "Quiet and organized; no reason for leaving is established.",
48
+ "motivation": "Preserve accurate records.",
49
+ "voice": "Plain sentences.",
50
+ "interaction": "May converse; does not decide for the reader."
51
+ }
52
+ }
53
+ }
54
+ ]
55
+ }
examples/quiet-archive/world/notebook.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "clues": [
3
+ {
4
+ "when": {
5
+ "record_open": true
6
+ },
7
+ "title": {
8
+ "fr": "Constat consigné",
9
+ "en": "Recorded finding"
10
+ },
11
+ "text": {
12
+ "fr": "Le registre signé Rune indique « Parti à l’aube », sans destination ni raison.",
13
+ "en": "The register signed Rune says “Left at dawn”, without a destination or reason."
14
+ },
15
+ "id": "record_open"
16
+ },
17
+ {
18
+ "when": {
19
+ "seal_checked": true
20
+ },
21
+ "title": {
22
+ "fr": "Constat consigné",
23
+ "en": "Recorded finding"
24
+ },
25
+ "text": {
26
+ "fr": "Le sceau ne présente aucune rupture visible. Le pli reste fermé et son contenu inconnu.",
27
+ "en": "The seal shows no visible break. The letter remains closed and its contents unknown."
28
+ },
29
+ "id": "seal_checked"
30
+ }
31
+ ],
32
+ "items": [],
33
+ "allies": [],
34
+ "conditions": []
35
+ }
examples/quiet-archive/world/scenes.en.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "scenes": [
4
+ "hall",
5
+ "record",
6
+ "seal",
7
+ "sent",
8
+ "left"
9
+ ],
10
+ "character_ids": [
11
+ "Sora"
12
+ ],
13
+ "present": [
14
+ "Sora",
15
+ "you"
16
+ ],
17
+ "situation": "Sora stays at the archive. The letter’s state and acquired clues are authoritative.",
18
+ "fallback": "Sora listens beside the table.",
19
+ "resources": [
20
+ "table",
21
+ "register",
22
+ "letter",
23
+ "dispatch tube"
24
+ ],
25
+ "unknown_facts": []
26
+ }
27
+ ]
examples/quiet-archive/world/scenes.fr.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "scenes": [
4
+ "hall",
5
+ "record",
6
+ "seal",
7
+ "sent",
8
+ "left"
9
+ ],
10
+ "character_ids": [
11
+ "Sora"
12
+ ],
13
+ "present": [
14
+ "Sora",
15
+ "vous"
16
+ ],
17
+ "situation": "Sora reste aux archives. L’état du pli et les indices acquis font autorité.",
18
+ "fallback": "Sora vous écoute près de la table.",
19
+ "resources": [
20
+ "table",
21
+ "register",
22
+ "letter",
23
+ "dispatch tube"
24
+ ],
25
+ "unknown_facts": []
26
+ }
27
+ ]
narration.py CHANGED
@@ -71,10 +71,11 @@ def build_conversation_payload(frame, intent, decision=None, repair=None):
71
  state['turn_boundary'] = dict(TURN_BOUNDARY)
72
  state['player_intent'] = intent
73
  if 'answer_contract' in frame:
 
74
  state['answer_contract'] = {key:frame['answer_contract'].get(key) for key in ('status','need')}
75
  state['output_budget']={'direct_answer_words':50,'optional_guidance_words':20,'total_words':70,
76
  'guidance_allowed':brief['guidance_allowed'],
77
- 'instructions':'One direct, sourced answer by default. No unrequested lead. '
78
  'Facts belong in answer, never acknowledgement. Source identifiers never appear in prose.'}
79
  state['scene_reference_ids'] = [ref for ref in catalogue if ref.startswith('passage:')]
80
  state['decision'] = ('No game-state transition was selected. Answer within the interaction policy. ' +
 
71
  state['turn_boundary'] = dict(TURN_BOUNDARY)
72
  state['player_intent'] = intent
73
  if 'answer_contract' in frame:
74
+ state['answer_dossier']=frame.get('answer_dossier')
75
  state['answer_contract'] = {key:frame['answer_contract'].get(key) for key in ('status','need')}
76
  state['output_budget']={'direct_answer_words':50,'optional_guidance_words':20,'total_words':70,
77
  'guidance_allowed':brief['guidance_allowed'],
78
+ 'instructions':'One to three short independently sourced answer units, at most 70 words total. No unrequested lead. '
79
  'Facts belong in answer, never acknowledgement. Source identifiers never appear in prose.'}
80
  state['scene_reference_ids'] = [ref for ref in catalogue if ref.startswith('passage:')]
81
  state['decision'] = ('No game-state transition was selected. Answer within the interaction policy. ' +