You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Version 1.6.2 - Retry on errors and section error tracking
New features:
- Add --retry-on-errors option to automatically retry failed pages
- Track export errors per section (HasExportErrors flag in manifest)
- Sections with errors are forced to [LOAD] on next incremental export
Bug fixes:
- Fix pages in error disappearing when section is [SKIP]
- Failed pages are now properly retried on subsequent exports
Configuration:
- RetryOnErrors: Enable automatic retry loop (default: false)
- MaxRetryIterations: Max retry attempts (default: 10)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: ClaudeDocs/faq.md
+139Lines changed: 139 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,10 +47,149 @@ error NETSDK1045: le SDK .NET actuel ne prend pas en charge le ciblage .NET 10.0
47
47
48
48
---
49
49
50
+
### Application plante au démarrage - appSettings.json introuvable (SingleFile publish)
51
+
52
+
**Problème**: L'application compilée en Release (SingleFile) plante avec l'erreur:
53
+
```
54
+
System.IO.FileNotFoundException: The configuration file 'appSettings.json' was not found
55
+
```
56
+
57
+
**Cause**: Les fichiers de configuration (`appSettings.json`, `LICENSE`, fichiers de traduction) étaient intégrés dans l'exécutable SingleFile au lieu d'être copiés séparément. L'application ne pouvait pas les lire car elle cherche ces fichiers sur le disque.
58
+
59
+
**Solution**: Ajouter `<ExcludeFromSingleFile>true</ExcludeFromSingleFile>` dans le fichier `.csproj` pour chaque fichier devant rester externe:
**Problème**: Le manifeste `.export-manifest.json` semble corrompu ou génère des erreurs.
53
79
54
80
**Solution**: Supprimer le fichier `.export-manifest.json` du dossier d'export et relancer avec `--incremental`. Un nouveau manifeste sera créé avec un export complet.
55
81
56
82
---
83
+
84
+
### Export incrémental - Optimisation Phase 1 (v2.0 du manifeste)
85
+
86
+
**Problème**: La Phase 1 de l'export (construction de l'arborescence) était lente car elle chargeait les pages de toutes les sections, même si aucune modification n'avait eu lieu.
87
+
88
+
**Solution implémentée**: Le manifeste v2.0 stocke maintenant les métadonnées des sections en plus des pages. Lors d'un export incrémental:
89
+
- Seules les sections modifiées ou nouvelles déclenchent un appel à OneNote pour charger leurs pages
90
+
- Les sections inchangées utilisent les données en cache du manifeste
91
+
- Gains de performance estimés: 80-99% selon le % de sections modifiées
92
+
93
+
**Comportement de migration**:
94
+
- Les manifestes v1.0 existants sont automatiquement migrés en v2.0
95
+
- Après migration, le premier export scanne toutes les sections (comportement normal)
96
+
- Les exports suivants bénéficient de l'optimisation
97
+
98
+
**Messages dans les logs**:
99
+
-`[SKIP]` - Section inchangée, pages récupérées depuis le cache
100
+
-`[NEW]` - Nouvelle section détectée
101
+
-`[LOAD]` - Section modifiée, pages chargées depuis OneNote
102
+
103
+
**Structure du manifeste v2.0**:
104
+
```json
105
+
{
106
+
"version": "2.0",
107
+
"sections": {
108
+
"section-onenote-id": {
109
+
"title": "Section Name",
110
+
"oneNoteId": "...",
111
+
"lastModificationDate": "2024-01-15T10:30:00",
112
+
"path": "Notebook/Section",
113
+
"isSectionGroup": false
114
+
}
115
+
},
116
+
"pages": {
117
+
"page-onenote-id": {
118
+
"title": "Page Title",
119
+
"sectionId": "section-onenote-id",
120
+
...
121
+
}
122
+
}
123
+
}
124
+
```
125
+
126
+
---
127
+
128
+
### Export incrémental - Reprise après interruption
129
+
130
+
**Problème**: Si l'export est interrompu (Ctrl+C, crash, etc.), les pages déjà exportées étaient considérées comme "nouvelles" au relancement car le manifeste n'était sauvegardé qu'à la fin.
131
+
132
+
**Solution implémentée**: Le manifeste est maintenant sauvegardé après chaque page exportée avec succès. Cela permet:
133
+
- De reprendre l'export là où il s'était arrêté
134
+
- De ne pas ré-exporter les pages déjà traitées lors de la session interrompue
135
+
- Une progression fiable même en cas d'interruption
136
+
137
+
**Comportement**:
138
+
- Chaque page exportée est immédiatement enregistrée dans le manifeste
139
+
- Au relancement, les pages déjà exportées sont détectées comme "unchanged" et ignorées
140
+
- Légère augmentation des écritures disque (1 sauvegarde/page au lieu de 1 à la fin)
141
+
142
+
---
143
+
144
+
### Export incrémental - Boucle automatique sur erreurs
145
+
146
+
**Problème**: Lorsque des pages échouent à l'export (erreurs OneNote, pages corrompues, non synchronisées), il fallait relancer manuellement l'export pour réessayer.
147
+
148
+
**Solution implémentée**: Nouvelle option `--retry-on-errors` qui boucle automatiquement tant qu'il y a des erreurs.
- Interactif : Répondre `[2]` à la question "Voulez-vous activer la boucle automatique en cas d'erreurs ?"
153
+
- appSettings.json : `"RetryOnErrors": true`
154
+
155
+
**Protection contre les boucles infinies**:
156
+
- Arrêt si aucun progrès (même nombre d'erreurs qu'à l'itération précédente)
157
+
- Arrêt si nombre max d'itérations atteint (par défaut : 10, configurable via `MaxRetryIterations`)
158
+
159
+
**Messages dans les logs**:
160
+
-`*** Retry iteration X (Y errors remaining) ***` - Début d'une nouvelle itération
161
+
-`--> Stopping retry: no progress made` - Arrêt car aucun progrès
162
+
-`--> All pages exported successfully after X iterations` - Succès après plusieurs tentatives
163
+
164
+
**Prérequis**:
165
+
- Mode incrémental (`--incremental`) obligatoire pour que le retry fonctionne
166
+
- Les pages en erreur ne sont pas ajoutées au manifeste, donc elles seront réessayées
167
+
168
+
---
169
+
170
+
### Export incrémental - Pages en erreur et sections [SKIP]
171
+
172
+
**Problème**: Si une page échouait à l'export, elle n'était pas ajoutée au manifeste. Si la section parente n'avait pas changé, elle était marquée [SKIP] au prochain export et la page en erreur disparaissait complètement (non rechargée depuis OneNote).
173
+
174
+
**Solution implémentée**: Le manifeste v2.0 stocke maintenant un flag `HasExportErrors` par section.
175
+
- Quand une page échoue, sa section est marquée `HasExportErrors = true`
176
+
- Au prochain export incrémental, les sections avec `HasExportErrors = true` sont forcées en [LOAD]
177
+
- Les pages en erreur sont ainsi rechargées depuis OneNote et réessayées
178
+
179
+
**Comportement attendu**:
180
+
```
181
+
# Premier export - erreur sur une page
182
+
- [LOAD] Section A
183
+
- Page 1 ✓
184
+
- Page 2 ✗ (erreur)
185
+
- Page 3 ✓
186
+
→ Section A marquée HasExportErrors=true dans le manifeste
187
+
188
+
# Deuxième export - la section est forcée en LOAD
189
+
- [LOAD] Section A ← forcé car HasExportErrors=true
0 commit comments