@nowline/cli 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +372 -0
  3. package/dist/cli/args.d.ts +54 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +165 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/formats.d.ts +61 -0
  8. package/dist/cli/formats.d.ts.map +1 -0
  9. package/dist/cli/formats.js +153 -0
  10. package/dist/cli/formats.js.map +1 -0
  11. package/dist/cli/help.d.ts +3 -0
  12. package/dist/cli/help.d.ts.map +1 -0
  13. package/dist/cli/help.js +90 -0
  14. package/dist/cli/help.js.map +1 -0
  15. package/dist/cli/output-path.d.ts +57 -0
  16. package/dist/cli/output-path.d.ts.map +1 -0
  17. package/dist/cli/output-path.js +70 -0
  18. package/dist/cli/output-path.js.map +1 -0
  19. package/dist/commands/init.d.ts +20 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +80 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/render.d.ts +15 -0
  24. package/dist/commands/render.d.ts.map +1 -0
  25. package/dist/commands/render.js +435 -0
  26. package/dist/commands/render.js.map +1 -0
  27. package/dist/commands/serve.d.ts +16 -0
  28. package/dist/commands/serve.d.ts.map +1 -0
  29. package/dist/commands/serve.js +287 -0
  30. package/dist/commands/serve.js.map +1 -0
  31. package/dist/convert/parse-json.d.ts +7 -0
  32. package/dist/convert/parse-json.d.ts.map +1 -0
  33. package/dist/convert/parse-json.js +34 -0
  34. package/dist/convert/parse-json.js.map +1 -0
  35. package/dist/convert/printer.d.ts +6 -0
  36. package/dist/convert/printer.d.ts.map +1 -0
  37. package/dist/convert/printer.js +334 -0
  38. package/dist/convert/printer.js.map +1 -0
  39. package/dist/convert/schema.d.ts +33 -0
  40. package/dist/convert/schema.d.ts.map +1 -0
  41. package/dist/convert/schema.js +77 -0
  42. package/dist/convert/schema.js.map +1 -0
  43. package/dist/core/parse.d.ts +24 -0
  44. package/dist/core/parse.d.ts.map +1 -0
  45. package/dist/core/parse.js +58 -0
  46. package/dist/core/parse.js.map +1 -0
  47. package/dist/diagnostics/adapt.d.ts +46 -0
  48. package/dist/diagnostics/adapt.d.ts.map +1 -0
  49. package/dist/diagnostics/adapt.js +109 -0
  50. package/dist/diagnostics/adapt.js.map +1 -0
  51. package/dist/diagnostics/format.d.ts +18 -0
  52. package/dist/diagnostics/format.d.ts.map +1 -0
  53. package/dist/diagnostics/format.js +41 -0
  54. package/dist/diagnostics/format.js.map +1 -0
  55. package/dist/diagnostics/index.d.ts +5 -0
  56. package/dist/diagnostics/index.d.ts.map +1 -0
  57. package/dist/diagnostics/index.js +5 -0
  58. package/dist/diagnostics/index.js.map +1 -0
  59. package/dist/diagnostics/json.d.ts +8 -0
  60. package/dist/diagnostics/json.d.ts.map +1 -0
  61. package/dist/diagnostics/json.js +24 -0
  62. package/dist/diagnostics/json.js.map +1 -0
  63. package/dist/diagnostics/model.d.ts +44 -0
  64. package/dist/diagnostics/model.d.ts.map +1 -0
  65. package/dist/diagnostics/model.js +2 -0
  66. package/dist/diagnostics/model.js.map +1 -0
  67. package/dist/diagnostics/text.d.ts +6 -0
  68. package/dist/diagnostics/text.d.ts.map +1 -0
  69. package/dist/diagnostics/text.js +43 -0
  70. package/dist/diagnostics/text.js.map +1 -0
  71. package/dist/generated/templates.d.ts +4 -0
  72. package/dist/generated/templates.d.ts.map +1 -0
  73. package/dist/generated/templates.js +9 -0
  74. package/dist/generated/templates.js.map +1 -0
  75. package/dist/generated/version.d.ts +11 -0
  76. package/dist/generated/version.d.ts.map +1 -0
  77. package/dist/generated/version.js +8 -0
  78. package/dist/generated/version.js.map +1 -0
  79. package/dist/i18n/locale.d.ts +56 -0
  80. package/dist/i18n/locale.d.ts.map +1 -0
  81. package/dist/i18n/locale.js +107 -0
  82. package/dist/i18n/locale.js.map +1 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +60 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/io/config.d.ts +2 -0
  88. package/dist/io/config.d.ts.map +1 -0
  89. package/dist/io/config.js +5 -0
  90. package/dist/io/config.js.map +1 -0
  91. package/dist/io/exit-codes.d.ts +12 -0
  92. package/dist/io/exit-codes.d.ts.map +1 -0
  93. package/dist/io/exit-codes.js +15 -0
  94. package/dist/io/exit-codes.js.map +1 -0
  95. package/dist/io/read.d.ts +13 -0
  96. package/dist/io/read.d.ts.map +1 -0
  97. package/dist/io/read.js +53 -0
  98. package/dist/io/read.js.map +1 -0
  99. package/dist/io/write.d.ts +32 -0
  100. package/dist/io/write.d.ts.map +1 -0
  101. package/dist/io/write.js +61 -0
  102. package/dist/io/write.js.map +1 -0
  103. package/dist/version.d.ts +13 -0
  104. package/dist/version.d.ts.map +1 -0
  105. package/dist/version.js +20 -0
  106. package/dist/version.js.map +1 -0
  107. package/man/fr/nowline.1 +424 -0
  108. package/man/fr/nowline.5 +1864 -0
  109. package/man/nowline.1 +517 -0
  110. package/man/nowline.5 +1784 -0
  111. package/package.json +66 -0
  112. package/scripts/bundle-templates.mjs +105 -0
  113. package/scripts/compile.mjs +131 -0
  114. package/src/cli/args.ts +252 -0
  115. package/src/cli/formats.ts +207 -0
  116. package/src/cli/help.ts +92 -0
  117. package/src/cli/output-path.ts +98 -0
  118. package/src/commands/init.ts +99 -0
  119. package/src/commands/render.ts +566 -0
  120. package/src/commands/serve.ts +322 -0
  121. package/src/convert/parse-json.ts +57 -0
  122. package/src/convert/printer.ts +376 -0
  123. package/src/convert/schema.ts +105 -0
  124. package/src/core/parse.ts +93 -0
  125. package/src/diagnostics/adapt.ts +148 -0
  126. package/src/diagnostics/format.ts +70 -0
  127. package/src/diagnostics/index.ts +4 -0
  128. package/src/diagnostics/json.ts +30 -0
  129. package/src/diagnostics/model.ts +48 -0
  130. package/src/diagnostics/text.ts +62 -0
  131. package/src/generated/templates.ts +12 -0
  132. package/src/generated/version.ts +18 -0
  133. package/src/i18n/locale.ts +133 -0
  134. package/src/index.ts +60 -0
  135. package/src/io/config.ts +11 -0
  136. package/src/io/exit-codes.ts +18 -0
  137. package/src/io/read.ts +70 -0
  138. package/src/io/write.ts +94 -0
  139. package/src/version.ts +21 -0
@@ -0,0 +1,1864 @@
1
+ .\" Traduction française neutre. Les divergences régionales (fr-CA, fr-FR)
2
+ .\" prennent la forme de surcouches dans packages/cli/man/<locale>/nowline.5
3
+ .\" lorsqu'elles existent. Voir specs/localization.md.
4
+ .\"
5
+ .\" Les mots-clés du DSL (nowline, config, roadmap, swimlane, item, parallel,
6
+ .\" group, person, team, anchor, label, size, status, milestone, footnote,
7
+ .\" include, style, symbol, default, scale, calendar) ainsi que les noms de
8
+ .\" propriétés (size:, duration:, after:, before:, on:, owner:, capacity:,
9
+ .\" labels:, link:, style:, status:, etc.) et les valeurs intégrées
10
+ .\" (planned, in-progress, done, at-risk, blocked, business, full, custom)
11
+ .\" restent en anglais : ce sont des éléments de syntaxe acceptés par
12
+ .\" l'analyseur, pas des mots à traduire.
13
+ .Dd $Mdocdate$
14
+ .Dt NOWLINE 5
15
+ .Os
16
+ .Sh NOM
17
+ .Nm nowline
18
+ .Nd format de fichier de feuille de route DSL Nowline
19
+ .Sh DESCRIPTION
20
+ Un fichier
21
+ .Pa .nowline
22
+ est une esquisse à indentation significative qui définit une feuille
23
+ de route.
24
+ Le fichier lui-même est le produit\ ; tout autre artefact (SVG, PNG,
25
+ PDF, HTML, Markdown+Mermaid, XLSX, MS Project XML) est une vue
26
+ produite à partir de lui par
27
+ .Xr nowline 1 .
28
+ .Pp
29
+ Cette page documente le format de fichier.
30
+ Pour le pipeline de production et les contrats visuels, voir
31
+ .Pa specs/rendering.md
32
+ dans le dépôt source.
33
+ Pour la surface CLI, voir
34
+ .Xr nowline 1 .
35
+ .Pp
36
+ La source de référence en prose pour tout ce qui suit est
37
+ .Pa specs/dsl.md
38
+ dans le dépôt source\ ; cette page est une référence rédigée à la
39
+ main, distillée à partir d'elle.
40
+ .Sh STRUCTURE DU FICHIER
41
+ Un fichier
42
+ .Pa .nowline
43
+ comporte jusqu'à quatre sections dans un ordre strict\ :
44
+ .Bl -enum -offset indent
45
+ .It
46
+ Directive
47
+ .Sy nowline
48
+ (facultative, recommandée).
49
+ Doit être la première ligne non vide et non commentaire si elle
50
+ est présente.
51
+ .It
52
+ Déclarations
53
+ .Sy include
54
+ (facultatives).
55
+ Importent d'autres fichiers
56
+ .Pa .nowline .
57
+ .It
58
+ Section
59
+ .Sy config
60
+ (facultative).
61
+ Configuration de production\ : styles, valeurs par défaut, échelle,
62
+ calendrier, symboles.
63
+ .It
64
+ Section
65
+ .Sy roadmap
66
+ (obligatoire).
67
+ Contenu\ : personnes, équipes, ancres, étiquettes, tailles, statuts,
68
+ couloirs, éléments, jalons, notes de bas de page.
69
+ .El
70
+ .Pp
71
+ .Sy config
72
+ et
73
+ .Sy roadmap
74
+ sont des marqueurs de section, et non des conteneurs d'indentation.
75
+ Les mots-clés à l'intérieur de chaque section apparaissent au plus
76
+ haut niveau (non indentés sous le marqueur).
77
+ L'indentation est utilisée là où l'imbrication est réelle\ :
78
+ propriétés de style sous un bloc
79
+ .Sy style ,
80
+ éléments sous un
81
+ .Sy swimlane ,
82
+ membres d'équipe sous un
83
+ .Sy team .
84
+ .Pp
85
+ L'indentation est significative.
86
+ L'indentation à deux espaces est canonique\ ; une tabulation est
87
+ également acceptée.
88
+ Espaces et tabulations ne doivent pas être mélangés dans un même
89
+ fichier \(em l'analyseur rejette une indentation mixte avec une
90
+ erreur identifiant la première ligne fautive.
91
+ .Pp
92
+ Les chaînes sont entre guillemets doubles
93
+ .Pq Qq Auth refactor ,
94
+ ni nues ni en simples apostrophes.
95
+ Les propriétés sont des paires
96
+ .Sy clé:valeur
97
+ sur la même ligne que l'entité\ ; les valeurs contenant des espaces
98
+ doivent être entre guillemets doubles.
99
+ Les clés de propriété n'utilisent jamais
100
+ .Sq = .
101
+ .Pp
102
+ Les mots-clés intégrés et noms de propriétés sont en kebab-case
103
+ .Pq Sy capacity-icon , Sy days-per-week , Sy in-progress .
104
+ Les identifiants choisis par l'auteur peuvent combiner lettres,
105
+ chiffres, tirets bas et tirets
106
+ .Pq Sy auth-refactor , Sy authRefactor , Sy auth_refactor ;
107
+ ils doivent commencer par une lettre ou un tiret bas.
108
+ .Pp
109
+ Les commentaires utilisent
110
+ .Sq //
111
+ pour une seule ligne et
112
+ .Sq /* */
113
+ pour plusieurs lignes.
114
+ Une barre oblique inverse
115
+ .Sq \e
116
+ en fin de ligne prolonge la ligne\ ; l'indentation sur la ligne
117
+ suivante est cosmétique.
118
+ Utilisez
119
+ .Sq \e\e
120
+ pour une barre oblique inverse littérale.
121
+ .Sh DIRECTIVE
122
+ La directive
123
+ .Sy nowline
124
+ déclare la version majeure du DSL ciblée par un fichier\ :
125
+ .Bd -literal -offset indent
126
+ nowline v1
127
+ .Ed
128
+ .Pp
129
+ La version est un entier seul
130
+ .Pq Sy v1 , Sy v2 , Sy v3 , ...
131
+ et est indépendante de la version du paquet npm.
132
+ À l'intérieur d'une majeure du DSL, l'analyseur doit accepter tout
133
+ fichier valide écrit pour cette majeure\ ; une nouvelle syntaxe
134
+ peut être ajoutée entre versions mineures/correctives, mais aucune
135
+ modification cassante d'un fichier
136
+ .Sy nowline v1
137
+ valide existant n'est livrée sans incrémenter la directive à
138
+ .Sy v2 .
139
+ Lorsque l'analyseur rencontre une version qu'il ne prend pas en
140
+ charge, il émet une erreur identifiant la version requise.
141
+ Lorsque la directive est omise, l'analyseur suppose la version la
142
+ plus récente qu'il prend en charge.
143
+ .Pp
144
+ La ligne de directive accepte des propriétés facultatives au niveau
145
+ fichier après la version.
146
+ La seule propriété de directive aujourd'hui est
147
+ .Sy locale: ,
148
+ une étiquette BCP-47 contrôlant la production localisée et les
149
+ messages du validateur\ :
150
+ .Bd -literal -offset indent
151
+ nowline v1 locale:fr-CA
152
+ .Ed
153
+ .Pp
154
+ Les clés de directive inconnues sont une erreur, pour que les
155
+ fautes de frappe se manifestent immédiatement.
156
+ Voir
157
+ .Pa specs/localization.md
158
+ pour le modèle de locale et la chaîne de précédence.
159
+ .Pp
160
+ La directive
161
+ .Sy nowline
162
+ est la seule construction qui ne suit pas le modèle de déclaration
163
+ universel
164
+ .Pq voir Sx GRAMMAIRE :
165
+ pas d'identifiant, pas de titre, juste le mot-clé et la version.
166
+ .Sh INCLUSIONS
167
+ .Sy include
168
+ importe un autre fichier
169
+ .Pa .nowline
170
+ dans le fichier courant\ :
171
+ .Bd -literal -offset indent
172
+ include "shared/teams.nowline"
173
+ include "brand-styles.nowline" roadmap:ignore
174
+ include "partner.nowline" config:isolate roadmap:isolate
175
+ .Ed
176
+ .Pp
177
+ Deux propriétés facultatives \(em
178
+ .Sy config:
179
+ et
180
+ .Sy roadmap:
181
+ \(em contrôlent la manière dont le contenu du fichier inclus est
182
+ traité.
183
+ Elles agissent sur deux catégories indépendantes\ :
184
+ .Bl -tag -width "Roadmap (contenu)"
185
+ .It Sy Config
186
+ Les déclarations
187
+ .Sy scale ,
188
+ .Sy style ,
189
+ .Sy symbol ,
190
+ .Sy default
191
+ et
192
+ .Sy calendar
193
+ du fichier inclus.
194
+ .It Sy Roadmap
195
+ La déclaration
196
+ .Sy roadmap
197
+ du fichier inclus, plus tout son contenu (personnes, équipes,
198
+ ancres, étiquettes, tailles, statuts, couloirs, éléments, jalons,
199
+ notes de bas de page).
200
+ .El
201
+ .Pp
202
+ Modes
203
+ .Sy config: \ :
204
+ .Bl -tag -width "isolate"
205
+ .It Sy merge Pq par défaut
206
+ Les éléments de configuration de l'enfant sont fusionnés dans le
207
+ parent.
208
+ En cas de collision, le
209
+ .Em parent l'emporte
210
+ et l'analyseur émet un avertissement identifiant la définition
211
+ masquée et son fichier source.
212
+ .It Sy ignore
213
+ La configuration de l'enfant est entièrement abandonnée.
214
+ Si le contenu roadmap de l'enfant est fusionné, il résout les
215
+ styles à partir de la configuration post-fusion du parent.
216
+ .It Sy isolate
217
+ La configuration de l'enfant n'est disponible qu'à l'intérieur du
218
+ fichier enfant\ ; la configuration du parent n'est disponible que
219
+ dans le parent.
220
+ Aucun des deux côtés ne déborde sur l'autre.
221
+ .El
222
+ .Pp
223
+ Modes
224
+ .Sy roadmap: \ :
225
+ .Bl -tag -width "isolate"
226
+ .It Sy merge Pq par défaut
227
+ Les entités de contenu de l'enfant sont fusionnées dans le parent.
228
+ En cas de collision,
229
+ .Em le parent l'emporte
230
+ et un avertissement est émis.
231
+ Une collision de couloir abandonne aussi les éléments contenus
232
+ dans le couloir.
233
+ Le contenu fusionné résout les styles à partir de la configuration
234
+ post-fusion.
235
+ .It Sy ignore
236
+ Le contenu de l'enfant est abandonné.
237
+ À utiliser pour les bibliothèques de styles partagées
238
+ .Pq Sy include "brand.nowline" roadmap:ignore .
239
+ Les vocabulaires partagés (étiquettes, statuts, tailles) utilisent
240
+ .Sy roadmap:merge ,
241
+ et non
242
+ .Sy roadmap:ignore .
243
+ .It Sy isolate
244
+ Le contenu de l'enfant reste cantonné au fichier enfant et utilise
245
+ uniquement la configuration de l'enfant.
246
+ L'enfant doit contenir une déclaration
247
+ .Sy roadmap
248
+ (nécessaire à l'étiquette de la région).
249
+ Le contenu isolé est rendu comme une région visuellement distincte,
250
+ avec sa propre bordure.
251
+ .El
252
+ .Pp
253
+ Les inclusions sont traitées en profondeur d'abord, dans l'ordre du
254
+ fichier.
255
+ Lorsque le processeur rencontre une déclaration
256
+ .Sy include ,
257
+ il traite ce fichier enfant (et ses inclusions récursivement) avant
258
+ de poursuivre avec la déclaration suivante.
259
+ La configuration est fusionnée avant le contenu roadmap à chaque
260
+ niveau.
261
+ .Pp
262
+ Les inclusions en losange (A inclut B et C, qui incluent tous deux
263
+ D) sont valides\ ; D est traité une seule fois lors de la première
264
+ rencontre.
265
+ Les doublons d'inclusion du même fichier dans un même fichier sont
266
+ une erreur.
267
+ Les inclusions cycliques sont une erreur.
268
+ .Pp
269
+ Les inclusions sont résolues relativement au répertoire du fichier
270
+ incluant.
271
+ Les chemins utilisent des barres obliques sur toutes les
272
+ plateformes.
273
+ Les inclusions doivent apparaître avant
274
+ .Sy config
275
+ et
276
+ .Sy roadmap
277
+ \(em ce sont les premières déclarations d'un fichier (après la
278
+ directive
279
+ .Sy nowline
280
+ si présente).
281
+ .Pp
282
+ Pour toute inclusion dont le mode
283
+ .Sy roadmap:
284
+ n'est pas
285
+ .Sy ignore ,
286
+ si le fichier enfant déclare un
287
+ .Sy roadmap ,
288
+ le parent et l'enfant doivent s'accorder sur
289
+ .Sy start: \(em
290
+ les deux absents, ou les deux présents avec des valeurs
291
+ identiques.
292
+ Une discordance est une erreur signalée sur la ligne
293
+ .Sy include
294
+ du parent\ ; il s'agit d'une exception explicite au comportement
295
+ de fusion
296
+ .Qq parent l'emporte
297
+ parce que
298
+ .Sy start:
299
+ définit la base temporelle commune.
300
+ .Sh SECTION CONFIG
301
+ Le marqueur de section facultatif
302
+ .Sy config
303
+ apparaît avant
304
+ .Sy roadmap .
305
+ Les mots-clés de configuration se trouvent au plus haut niveau (et
306
+ non indentés sous le marqueur) et définissent vocabulaire de
307
+ production, valeurs par défaut, paramètres d'axe, arithmétique des
308
+ jours et symboles personnalisés.
309
+ .Pp
310
+ Cinq mots-clés de configuration\ :
311
+ .Sy scale ,
312
+ .Sy style ,
313
+ .Sy symbol ,
314
+ .Sy default ,
315
+ .Sy calendar .
316
+ Toute entrée de configuration est facultative\ ; si
317
+ .Sy config
318
+ est omise, toutes les valeurs intégrées par défaut s'appliquent.
319
+ .Ss style \(em définition visuelle nommée
320
+ Une déclaration
321
+ .Sy style
322
+ définit un traitement visuel nommé.
323
+ Les propriétés sont indentées en dessous\ :
324
+ .Bd -literal -offset indent
325
+ style enterprise "Enterprise readiness"
326
+ bg: blue
327
+ fg: navy
328
+ text: white
329
+ border: solid
330
+ icon: shield
331
+
332
+ style risky
333
+ border: dashed
334
+ fg: orange
335
+ .Ed
336
+ .Pp
337
+ Les styles suivent le modèle universel
338
+ .Sy [id] ["titre"] .
339
+ Les propriétés sont énumérées sous
340
+ .Sx PROPRIÉTÉS DE STYLE
341
+ ci-dessous.
342
+ .Ss symbol \(em symbole personnalisé nommé
343
+ Une déclaration
344
+ .Sy symbol
345
+ définit un symbole personnalisé pour les propriétés de style
346
+ .Sy icon:
347
+ et
348
+ .Sy capacity-icon: .
349
+ Les auteurs utilisent la forme littérale Unicode en ligne
350
+ .Pq Sy capacity-icon:"\(rs"
351
+ pour les symboles ponctuels\ ; les déclarations
352
+ .Sy symbol
353
+ nommées sont pour les symboles réutilisables.
354
+ .Bd -literal -offset indent
355
+ symbol budget "Budget" unicode:"\(em" ascii:"$"
356
+ symbol fte unicode:"\eu{1F464}" ascii:"@"
357
+ symbol star unicode:"\(em"
358
+ .Ed
359
+ .Pp
360
+ Obligatoire\ :
361
+ .Sy unicode:"<chaîne>"
362
+ \(em le caractère Unicode (littéral ou échappement
363
+ .Sy \eu{...} ,
364
+ peut être un cluster de graphème multi-points).
365
+ .Pp
366
+ Facultatif\ :
367
+ .Sy ascii:"<chaîne>"
368
+ \(em repli ASCII court pour les terminaux dépourvus du glyphe,
369
+ \(<= 3 caractères ASCII\ ; vaut
370
+ .Sq \&?
371
+ par défaut si omis.
372
+ .Pp
373
+ Un identifiant de
374
+ .Sy symbol
375
+ ne doit pas masquer le nom d'une icône intégrée
376
+ .Pq Sy none , Sy multiplier , Sy person , Sy people , Sy points , Sy time , Sy shield , Sy warning , Sy lock .
377
+ .Ss default \(em valeurs par défaut par type d'entité
378
+ .Sy default <entité> <propriétés>
379
+ définit des valeurs de propriété par défaut pour un type d'entité
380
+ donné.
381
+ Une déclaration par type d'entité par fichier\ :
382
+ .Bd -literal -offset indent
383
+ default item status:planned shadow:subtle
384
+ default label style:subtle corner-radius:full
385
+ default swimlane padding:sm spacing:none
386
+ default roadmap padding:md header-height:md font:sans
387
+ default milestone weight:bold
388
+ default footnote style:subtle shadow:subtle
389
+ default anchor style:subtle
390
+ default parallel bracket:none
391
+ default group padding:xs spacing:xs
392
+ .Ed
393
+ .Pp
394
+ Types d'entités pris en charge\ :
395
+ .Sy item , label , swimlane , roadmap , parallel , group , milestone , footnote , anchor .
396
+ Lorsqu'une entité omet une propriété, la valeur par défaut
397
+ correspondante s'applique\ ; les valeurs explicites sur l'entité
398
+ priment toujours.
399
+ .Pp
400
+ Les propriétés d'identité, de dimensionnement, de séquencement, de
401
+ référence et de prose ne peuvent pas avoir de valeur par défaut\ :
402
+ elles doivent être explicites par entité.
403
+ Interdites, par type d'entité\ :
404
+ .Bl -tag -width "default footnote"
405
+ .It Sy default item
406
+ .Sy size , duration , after , before , remaining , link , description , owner .
407
+ .It Sy default milestone
408
+ .Sy date , after , link , description .
409
+ .It Sy default anchor
410
+ .Sy date , link , description .
411
+ .It Sy default footnote
412
+ .Sy on , link , description .
413
+ .El
414
+ .Pp
415
+ Les propriétés de style brutes
416
+ .Pq Sy bg , Sy fg , Sy text , Sy border , Sy shadow , ...
417
+ sont autorisées sur
418
+ .Sy default
419
+ parce que
420
+ .Sy default
421
+ réside dans
422
+ .Sy config ,
423
+ la section de présentation.
424
+ L'interdiction des propriétés de style brutes s'applique aux
425
+ entités de la section roadmap, et non aux lignes
426
+ .Sy default .
427
+ .Pp
428
+ .Sy capacity
429
+ est autorisée sur
430
+ .Sy default item
431
+ mais
432
+ .Em pas
433
+ sur
434
+ .Sy default swimlane
435
+ \(em le budget de chaque couloir est volontairement explicite à son
436
+ site de déclaration.
437
+ .Sy utilization-warn-at: ,
438
+ .Sy utilization-over-at: ,
439
+ et
440
+ .Sy capacity-icon:
441
+ sont autorisées à la fois sur
442
+ .Sy default swimlane
443
+ et sur
444
+ .Sy default item
445
+ selon la règle habituelle des propriétés de présentation.
446
+ .Ss scale \(em affichage de l'axe
447
+ .Sy scale
448
+ configure l'axe temporel.
449
+ La largeur de colonne est définie par
450
+ .Sy scale:<durée>
451
+ sur la déclaration
452
+ .Sy roadmap \ ;
453
+ ce bloc configure l'affichage\ :
454
+ .Bd -literal -offset indent
455
+ scale
456
+ name: sprints
457
+ label-every: 2
458
+ label: "Sprint {n}"
459
+ .Ed
460
+ .Bl -tag -width "label-every"
461
+ .It Sy name
462
+ Étiquette d'affichage de l'unité d'échelle (p.\ ex.
463
+ .Qq sprint ) .
464
+ Vaut par défaut un nom auto-généré à partir de la durée
465
+ .Sy scale:
466
+ de la roadmap.
467
+ .It Sy label-every
468
+ Affiche une étiquette d'axe toutes les N colonnes.
469
+ Valeur par défaut\ : choix du moteur de production.
470
+ .It Sy label
471
+ Format d'étiquette d'axe.
472
+ .Sq {n}
473
+ est l'indice de colonne.
474
+ .El
475
+ .Pp
476
+ Le bloc de configuration
477
+ .Sy scale
478
+ est facultatif.
479
+ Un fichier peut déclarer
480
+ .Sy scale:2w
481
+ sur sa
482
+ .Sy roadmap
483
+ sans bloc
484
+ .Sy scale ,
485
+ et le moteur de production choisit toutes les valeurs d'affichage
486
+ par défaut.
487
+ .Ss calendar \(em arithmétique des jours
488
+ La propriété
489
+ .Sy calendar:
490
+ sur
491
+ .Sy roadmap
492
+ sélectionne le mode d'arithmétique des jours\ :
493
+ .Bl -tag -width "calendar:business"
494
+ .It Sy calendar:business Pq par défaut
495
+ Arithmétique des jours ouvrés d'ingénierie.
496
+ .Sy days-per-week:5 ,
497
+ .Sy days-per-month:22 ,
498
+ .Sy days-per-quarter:65 ,
499
+ .Sy days-per-year:260 .
500
+ .It Sy calendar:full
501
+ Arithmétique des jours calendaires avec week-ends.
502
+ .Sy days-per-week:7 ,
503
+ .Sy days-per-month:30 ,
504
+ .Sy days-per-quarter:90 ,
505
+ .Sy days-per-year:365 .
506
+ .It Sy calendar:custom
507
+ Valeurs fournies par l'auteur via le bloc de configuration
508
+ .Sy calendar .
509
+ .El
510
+ .Pp
511
+ Un bloc de configuration
512
+ .Sy calendar
513
+ n'a de sens que lorsque
514
+ .Sy roadmap
515
+ déclare
516
+ .Sy calendar:custom .
517
+ En mode personnalisé, les quatre champs
518
+ .Sy days-per-*
519
+ sont obligatoires\ :
520
+ .Bd -literal -offset indent
521
+ config
522
+
523
+ calendar
524
+ days-per-week: 6
525
+ days-per-month: 26
526
+ days-per-quarter: 78
527
+ days-per-year: 312
528
+
529
+ roadmap rotating-shift "Rotating Shift" calendar:custom
530
+ .Ed
531
+ .Pp
532
+ Les quatre entrées doivent être des entiers positifs.
533
+ Il n'existe pas de forme partielle.
534
+ .Pp
535
+ Chaque champ
536
+ .Sy days-per-*
537
+ est défini indépendamment\ : une durée comme
538
+ .Sy 1y
539
+ résout vers
540
+ .Sy days-per-year
541
+ directement, et non en multipliant par mois ou semaines.
542
+ C'est pourquoi le mode business donne
543
+ .Sy 1y = 260d
544
+ et non
545
+ .Sy 12 \(mu 22d = 264d .
546
+ .Sh SECTION ROADMAP
547
+ Le marqueur de section
548
+ .Sy roadmap
549
+ est obligatoire et apparaît exactement une fois par fichier.
550
+ Les mots-clés roadmap se trouvent au plus haut niveau (et non
551
+ indentés sous le marqueur) et constituent le contenu du fichier.
552
+ .Pp
553
+ La ligne de déclaration
554
+ .Sy roadmap
555
+ elle-même accepte\ :
556
+ .Bd -literal -offset indent
557
+ roadmap platform-2026 "Platform 2026" \e
558
+ author:"Acme" \e
559
+ start:2026-01-06 \e
560
+ scale:2w \e
561
+ calendar:business \e
562
+ logo:"./brand/acme.svg" \e
563
+ logo-size:md
564
+ .Ed
565
+ .Bl -tag -width "calendar:"
566
+ .It Sy author:
567
+ Chaîne libre.
568
+ .It Sy start:
569
+ Date ISO
570
+ .Pq Pa AAAA-MM-JJ ,
571
+ base de la chronologie.
572
+ Obligatoire si une
573
+ .Sy anchor
574
+ ou un
575
+ .Sy milestone
576
+ daté existe.
577
+ Toute date d'ancre et toute date de jalon doit être supérieure ou
578
+ égale à
579
+ .Sy start: .
580
+ .It Sy scale:
581
+ Littéral de durée brut pour la largeur de colonne
582
+ .Pq Sy 2w , Sy 1q ;
583
+ .Sy 1w
584
+ par défaut.
585
+ .It Sy calendar:
586
+ .Sy business | full | custom .
587
+ .Sy business
588
+ par défaut.
589
+ .It Sy logo:
590
+ Chemin vers un fichier de logo
591
+ .Pq Sy .svg , Sy .png , Sy .jpg / Sy .jpeg , Sy .webp ,
592
+ résolu relativement au répertoire du fichier
593
+ .Pa .nowline .
594
+ Barres obliques sur toutes les plateformes\ ; seuls les chemins
595
+ locaux sont acceptés.
596
+ La résolution des ressources a lieu au moment du rendu, pas de
597
+ l'analyse \(em un fichier référant un logo absent reste un
598
+ document valide.
599
+ .It Sy logo-size:
600
+ Préréglage de taille
601
+ .Pq Sy xs | sm | md | lg | xl ,
602
+ .Sy md
603
+ par défaut.
604
+ .El
605
+ .Pp
606
+ Douze mots-clés de la section roadmap\ :
607
+ .Sy swimlane , item , parallel , group ,
608
+ .Sy person , team , anchor , label , size , status , milestone ,
609
+ .Sy footnote .
610
+ Chacun suit le modèle universel
611
+ .Sy [id] ["titre"] [clé:valeur...] .
612
+ .Ss swimlane \(em groupe d'éléments par équipe / domaine / flux
613
+ .Bd -literal -offset indent
614
+ swimlane platform owner:platform capacity:5
615
+ item auth-refactor "Auth refactor" size:l after:kickoff
616
+ item platform-qa "Platform QA" size:s capacity:2
617
+ .Ed
618
+ .Pp
619
+ Éléments, blocs parallèles et groupes sont indentés en dessous.
620
+ Propriétés\ :
621
+ .Bl -tag -width "utilization-over-at"
622
+ .It Sy owner:
623
+ Identifiant de personne ou d'équipe.
624
+ .It Sy capacity:
625
+ Budget par pas de temps.
626
+ Entier ou décimal uniquement\ ; pas de forme en pourcentage.
627
+ .It Sy utilization-warn-at: , Sy utilization-over-at:
628
+ Seuils du soulignement d'utilisation du couloir.
629
+ Chacun accepte un littéral pourcentage
630
+ .Pq Sy 80% ,
631
+ un décimal positif interprété comme une fraction
632
+ .Pq Sy 0.8 ,
633
+ ou le mot
634
+ .Sy none
635
+ pour désactiver cette bande de couleur.
636
+ Valeurs par défaut\ :
637
+ .Sy 80%
638
+ et
639
+ .Sy 100% .
640
+ Lorsque les deux seuils numériques sont définis,
641
+ .Sy warn-at \(<= over-at .
642
+ .El
643
+ .Ss item \(em élément de travail
644
+ Les éléments vivent à l'intérieur des couloirs (ou des blocs
645
+ .Sy parallel /
646
+ .Sy group )
647
+ et doivent déclarer au moins l'une des propriétés
648
+ .Sy size:
649
+ ou
650
+ .Sy duration: .
651
+ Voir
652
+ .Sx PROPRIÉTÉS D'ÉLÉMENT
653
+ ci-dessous.
654
+ .Bd -literal -offset indent
655
+ swimlane platform
656
+ item auth-refactor "Auth refactor" size:l status:done
657
+ item "Quick cleanup" size:s
658
+ item sso size:m
659
+ .Ed
660
+ .Ss parallel \(em bloc d'exécution parallèle
661
+ .Sy parallel
662
+ exécute ses enfants en parallèle.
663
+ Les enfants peuvent être des éléments simples ou des groupes.
664
+ .Bd -literal -offset indent
665
+ swimlane platform
666
+ item auth "Auth refactor" size:l
667
+ parallel
668
+ item api-v2 "API v2" size:m
669
+ item sdk-update "SDK update" size:s
670
+ item integration "Integration" size:s
671
+ .Ed
672
+ .Pp
673
+ .Sy api-v2
674
+ et
675
+ .Sy sdk-update
676
+ démarrent en même temps (après la fin de
677
+ .Sy auth ) .
678
+ Lorsque le bloc
679
+ .Sy parallel
680
+ se termine, le frère suivant
681
+ .Pq Sy integration
682
+ attend la fin de tous les enfants parallèles (jonction implicite
683
+ au dédentement).
684
+ Un bloc
685
+ .Sy parallel
686
+ doit contenir au moins 2 enfants\ ; un parallel à un seul enfant
687
+ émet un avertissement.
688
+ .Ss group \(em paquet d'éléments séquentiels
689
+ .Sy group
690
+ regroupe des éléments en une piste séquentielle nommée.
691
+ À l'intérieur d'un couloir (en dehors d'un bloc parallèle), le
692
+ groupe est séquentiel par rapport à ses frères.
693
+ .Bd -literal -offset indent
694
+ swimlane platform
695
+ group api-work "API Work" labels:enterprise
696
+ item api-v2 "API v2" size:m
697
+ item api-docs "API docs" size:s
698
+ item deploy "Deploy" size:s
699
+ .Ed
700
+ .Pp
701
+ Un
702
+ .Sy group
703
+ avec
704
+ .Sy style: ,
705
+ .Sy labels:
706
+ ou d'autres propriétés visuelles est rendu avec une boîte
707
+ englobante visible et une petite pastille de titre.
708
+ Un
709
+ .Sy group
710
+ sans style est purement structurel \(em il ne régit que le
711
+ séquencement et la croissance interne, sans artefact visible.
712
+ .Ss anchor \(em date nommée sur la chronologie
713
+ .Bd -literal -offset indent
714
+ anchor kickoff date:2026-01-06
715
+ anchor code-freeze "Code Freeze" date:2026-05-01
716
+ .Ed
717
+ .Pp
718
+ .Sy date:
719
+ est obligatoire.
720
+ Les ancres sont référencées par
721
+ .Sy after:
722
+ et
723
+ .Sy before:
724
+ sur les éléments, blocs parallèles, groupes et jalons pour fixer
725
+ leur position.
726
+ .Ss label \(em vocabulaire d'étiquettes / chips sémantiques
727
+ Les étiquettes vivent dans la section roadmap pour que contenu et
728
+ vocabulaire cohabitent\ ; les valeurs visuelles par défaut vivent
729
+ dans
730
+ .Sy config
731
+ via
732
+ .Sy default label
733
+ et les blocs
734
+ .Sy style
735
+ référencés.
736
+ .Bd -literal -offset indent
737
+ label enterprise "Enterprise readiness" style:enterprise
738
+ label security "Security hardening" style:enterprise-red
739
+ label low-confidence style:risky-dotted
740
+ .Ed
741
+ .Pp
742
+ Une ligne
743
+ .Sy label
744
+ accepte
745
+ .Sy style:id
746
+ plus les propriétés universelles
747
+ .Pq Sy labels: , Sy link: , description .
748
+ Les propriétés de style brutes ne sont
749
+ .Em pas
750
+ autorisées sur une ligne
751
+ .Sy label .
752
+ Les étiquettes utilisées sur des éléments sans déclaration
753
+ .Sy label
754
+ correspondante restent valides\ ; elles sont rendues avec les
755
+ valeurs par défaut de chip de
756
+ .Sy default label
757
+ ou les valeurs système.
758
+ .Ss size \(em budget d'effort nommé
759
+ Une déclaration
760
+ .Sy size
761
+ associe une taille de t-shirt nommée à un budget d'effort
762
+ mono-ingénieur.
763
+ .Bd -literal -offset indent
764
+ size xs "Extra Small" effort:0.5d
765
+ size s "Small" effort:3d
766
+ size m "Medium" effort:1w
767
+ size l "Large" effort:2w
768
+ size xl "Extra Large" effort:1m
769
+ .Ed
770
+ .Pp
771
+ .Sy effort:
772
+ est obligatoire et doit être un littéral de durée brut positif
773
+ .Pq sensible aux décimales\ : Sy 0.5d , Sy 1.5w .
774
+ L'identifiant ne doit pas correspondre au motif de durée brut
775
+ .Sy \&\ed+(\e.\ed+)?[dwmqy]
776
+ ni être un simple
777
+ .Sy d , w , m , q , y
778
+ \(em cela évite l'ambiguïté au point d'appel.
779
+ .Pp
780
+ Sur les éléments, la chip de taille sur barre rend le
781
+ .Sy titre
782
+ facultatif de la taille s'il est fourni, sinon l'identifiant
783
+ verbatim.
784
+ .Sy size m "M" effort:1w
785
+ rend
786
+ .Qq M \ ;
787
+ .Sy size m effort:1w
788
+ rend
789
+ .Qq m .
790
+ .Pp
791
+ Les déclarations
792
+ .Sy size
793
+ doivent précéder tout élément qui les référence.
794
+ .Ss status \(em valeur de statut personnalisée
795
+ .Bd -literal -offset indent
796
+ status awaiting-review "Awaiting Review"
797
+ status in-review "In Review"
798
+ status deferred "Deferred"
799
+ .Ed
800
+ .Pp
801
+ Étend l'ensemble intégré
802
+ .Po
803
+ .Sy planned ,
804
+ .Sy in-progress
805
+ .Pq alias Sy active ,
806
+ .Sy done
807
+ .Pq alias Sy completed ,
808
+ .Sy at-risk ,
809
+ .Sy blocked
810
+ .Pc .
811
+ Les alias se canonisent à la frontière de la mise en page\ ; les
812
+ deux orthographes sont des entrées valides.
813
+ .Pp
814
+ Les statuts personnalisés n'ont pas de sémantique propre au-delà
815
+ de ce que les moteurs de production leur attribuent\ ; le DSL
816
+ garantit seulement que la valeur résout et peut porter un titre
817
+ d'affichage.
818
+ Les moteurs de production peuvent associer des statuts
819
+ personnalisés à des traitements visuels via
820
+ .Sy default item style:...
821
+ ou via des surcharges
822
+ .Sy style:
823
+ au niveau de l'entité.
824
+ .Pp
825
+ Les déclarations
826
+ .Sy status
827
+ doivent précéder toute entité qui les référence.
828
+ .Ss milestone \(em marqueur de réussite
829
+ .Bd -literal -offset indent
830
+ milestone v1-ga "v1 GA" date:2026-06-30
831
+ milestone beta "Beta" after:auth-refactor
832
+ milestone v1-ga "v1 GA" after:[core-api, audit-log]
833
+ milestone v1-ga "v1 GA" date:2026-06-30 after:[core-api, audit-log]
834
+ .Ed
835
+ .Pp
836
+ Au moins l'une des propriétés
837
+ .Sy date:
838
+ ou
839
+ .Sy after:
840
+ est obligatoire.
841
+ Avec les deux,
842
+ .Sy date:
843
+ est une cible visée, pas un plafond strict\ ; le glissement (les
844
+ dépendances ne convergeant pas vers la date cible) est un sujet de
845
+ production, pas une erreur de validation.
846
+ .Ss footnote \(em annotation rattachable
847
+ .Bd -literal -offset indent
848
+ footnote "Vendor dependency" on:audit-log
849
+ description "Blocked until vendor contract is signed."
850
+
851
+ footnote capacity-risk "Team capacity risk" on:[mobile, platform]
852
+ description "Both teams are understaffed through Q2."
853
+ .Ed
854
+ .Pp
855
+ .Sy on:
856
+ est obligatoire et référence un ou plusieurs identifiants
857
+ (élément, couloir, ancre, jalon, personne, équipe).
858
+ Pour plusieurs cibles, utilisez la notation entre crochets\ :
859
+ .Sy on:[id1, id2] .
860
+ Les notes de bas de page sont numérotées séquentiellement par
861
+ ordre du document\ ; un numéro en exposant apparaît sur chaque
862
+ entité à laquelle la note se rattache.
863
+ .Ss person et team \(em vocabulaire organisationnel
864
+ .Bd -literal -offset indent
865
+ person sam "Sam Chen" link:https://github.com/samchen
866
+ person jen "Jennifer Wu"
867
+
868
+ team engineering "Engineering"
869
+ team platform "Platform Team"
870
+ person sam
871
+ person jen
872
+ team mobile "Mobile Team"
873
+ .Ed
874
+ .Pp
875
+ Un
876
+ .Sy person
877
+ peut être déclaré au plus haut niveau de la roadmap ou imbriqué
878
+ dans un
879
+ .Sy team .
880
+ .Bl -tag -width "person <id>"
881
+ .It Sy person <id>
882
+ Référence simple.
883
+ À l'intérieur d'un
884
+ .Sy team
885
+ elle indique l'appartenance.
886
+ Au plus haut niveau de la roadmap c'est un
887
+ .No no-op
888
+ (l'analyseur peut émettre un avertissement).
889
+ .It Sy person <id> ["titre"] [propriétés]
890
+ Déclaration.
891
+ Crée la personne.
892
+ Si imbriquée dans un
893
+ .Sy team ,
894
+ la déclaration établit aussi l'appartenance.
895
+ .El
896
+ .Pp
897
+ Les identifiants de personne sont globaux dans la portée du
898
+ fichier fusionné, peu importe où ils sont déclarés.
899
+ Une personne peut être déclarée au plus une fois dans la portée
900
+ fusionnée\ ; les déclarations en double sont une erreur.
901
+ .Pp
902
+ L'imbrication d'un
903
+ .Sy team
904
+ dans un autre
905
+ .Sy team
906
+ est toujours une déclaration.
907
+ Les équipes ne peuvent pas être référencées par une ligne nue
908
+ .Sy team <id> .
909
+ .Pp
910
+ Tant
911
+ .Sy person
912
+ que
913
+ .Sy team
914
+ prennent en charge
915
+ .Sy link:
916
+ et la sous-directive
917
+ .Sy description .
918
+ .Sh PROPRIÉTÉS UNIVERSELLES
919
+ Ces propriétés sont valides sur tous les types d'entités\ :
920
+ éléments, couloirs, blocs parallèles, groupes, jalons, ancres,
921
+ personnes, équipes, étiquettes, tailles, statuts, notes de bas de
922
+ page.
923
+ .Bl -tag -width "description"
924
+ .It Sy labels:
925
+ Liste.
926
+ Étiquettes pour le filtrage et l'affichage.
927
+ .Sy labels:enterprise
928
+ ou
929
+ .Sy labels:[enterprise, security] .
930
+ Sur un élément, chaque étiquette est rendue comme une chiclette
931
+ atomique à l'intérieur de la barre.
932
+ .It Sy link:
933
+ URL nue (sans guillemets).
934
+ Un seul lien par entité.
935
+ .It Sy style:
936
+ Identifiant.
937
+ Référence unique vers un style nommé déclaré dans
938
+ .Sy config .
939
+ C'est la seule propriété visuelle autorisée sur une entité de la
940
+ section roadmap.
941
+ .It Sy description
942
+ Sous-directive.
943
+ Indentée sous l'entité.
944
+ Texte explicatif plus long\ :
945
+ .Sy description "Détails ici" .
946
+ .El
947
+ .Pp
948
+ .Sy Séparation contenu / production .
949
+ Les entités de la section roadmap ne portent que des informations
950
+ sémantiques, plus une référence
951
+ .Sy style:id
952
+ unique facultative.
953
+ Les propriétés de style brutes
954
+ .Po
955
+ .Sy bg , Sy fg , Sy text , Sy border , Sy icon , Sy shadow ,
956
+ .Sy font , Sy weight , Sy italic , Sy text-size , Sy padding ,
957
+ .Sy spacing , Sy header-height , Sy corner-radius , Sy bracket ,
958
+ .Sy capacity-icon , Sy timeline-position , Sy minor-grid
959
+ .Pc
960
+ ne peuvent apparaître que dans des blocs
961
+ .Sy style
962
+ et sur les lignes
963
+ .Sy default <entité> \(em
964
+ qui vivent toutes deux dans
965
+ .Sy config .
966
+ .Sh PROPRIÉTÉS D'ÉLÉMENT
967
+ .Sy status , owner , after
968
+ et
969
+ .Sy before
970
+ sont aussi valides sur les couloirs, blocs parallèles et groupes.
971
+ Les autres sont réservées aux éléments.
972
+ .Bl -tag -width "remaining"
973
+ .It Sy status:
974
+ Intégrés\ :
975
+ .Sy planned ,
976
+ .Sy in-progress
977
+ .Pq alias Sy active ,
978
+ .Sy done
979
+ .Pq alias Sy completed ,
980
+ .Sy at-risk ,
981
+ .Sy blocked .
982
+ Personnalisés\ :
983
+ .Sy status:awaiting-review
984
+ correspondant à une déclaration
985
+ .Sy status .
986
+ .It Sy owner:
987
+ Identifiant de personne ou d'équipe.
988
+ Singulier \(em un seul responsable.
989
+ .It Sy after:
990
+ Identifiant ou liste entre crochets.
991
+ L'entité démarre après la fin de l'entité référencée.
992
+ .Sy after:[a, b]
993
+ démarre après le dernier des terminaux.
994
+ Accepte des identifiants d'élément, jalon, ancre, parallel ou
995
+ group.
996
+ .It Sy before:
997
+ Identifiant ou liste entre crochets.
998
+ L'entité doit se terminer avant le début de l'entité référencée.
999
+ .Sy before:[a, b]
1000
+ se termine avant le premier des démarrants.
1001
+ .It Sy size:
1002
+ Alias de taille.
1003
+ .Sy size:l
1004
+ référence une déclaration
1005
+ .Sy size \ ;
1006
+ la durée calendaire de l'élément vaut
1007
+ .Sy effort \(di item_capacity
1008
+ .Pq Sy capacity:
1009
+ vaut
1010
+ .Sy 1
1011
+ si absente.
1012
+ Réservée aux éléments \(em non valide sur
1013
+ .Sy parallel
1014
+ ni
1015
+ .Sy group .
1016
+ .It Sy duration:
1017
+ Littéral de durée brut uniquement
1018
+ .Pq Sy 2w , Sy 3m , Sy 0.5d ;
1019
+ pas d'alias nommés.
1020
+ .Sy size:
1021
+ est le mécanisme d'alias.
1022
+ Lorsqu'elle est définie en même temps que
1023
+ .Sy size: ,
1024
+ .Sy duration:
1025
+ l'emporte pour la largeur de barre et le pilote de la ligne meta
1026
+ (la chip de taille est omise).
1027
+ Réservée aux éléments.
1028
+ .It Sy remaining:
1029
+ Travail restant.
1030
+ Deux formes équivalentes\ : pourcentage
1031
+ .Pq Sy remaining:30%
1032
+ ou littéral d'effort mono-ingénieur
1033
+ .Pq Sy remaining:1w , Sy remaining:0.5d .
1034
+ Un littéral est normalisé en pourcentage lors de la mise en page.
1035
+ Les deux formes sont rendues à l'identique.
1036
+ .Sy status:done
1037
+ prime.
1038
+ Réservée aux éléments.
1039
+ .It Sy capacity:
1040
+ Capacité concurrente consommée par cet élément pendant son
1041
+ exécution.
1042
+ Entier positif
1043
+ .Pq Sy capacity:2 ,
1044
+ décimal
1045
+ .Pq Sy capacity:0.5 ,
1046
+ ou littéral pourcentage
1047
+ .Pq Sy capacity:50%
1048
+ analysé en décimal.
1049
+ Réservée aux éléments.
1050
+ .El
1051
+ .Pp
1052
+ .Sy Propriétés obligatoires .
1053
+ Les déclarations
1054
+ .Sy item
1055
+ doivent inclure au moins l'une des propriétés
1056
+ .Sy size:
1057
+ ou
1058
+ .Sy duration: .
1059
+ Les déclarations
1060
+ .Sy anchor
1061
+ exigent
1062
+ .Sy date: .
1063
+ Les déclarations
1064
+ .Sy milestone
1065
+ exigent au moins l'une des propriétés
1066
+ .Sy date:
1067
+ ou
1068
+ .Sy after: .
1069
+ Les déclarations
1070
+ .Sy footnote
1071
+ exigent
1072
+ .Sy on: .
1073
+ Omettre une propriété obligatoire est une erreur de validation
1074
+ nommant l'entité par identifiant ou titre.
1075
+ .Sh CAPACITÉ
1076
+ .Sy capacity:
1077
+ est une annotation facultative qui modélise le débit par pas de
1078
+ temps.
1079
+ Couloirs et éléments peuvent tous deux la déclarer, et les deux
1080
+ annotations sont totalement indépendantes \(em ni l'une ni
1081
+ l'autre n'est requise.
1082
+ .Bd -literal -offset indent
1083
+ swimlane platform capacity:5
1084
+ item auth size:l capacity:2
1085
+ parallel
1086
+ item api size:m capacity:2
1087
+ item sdk size:m capacity:1
1088
+ item qa size:s capacity:50%
1089
+ .Ed
1090
+ .Pp
1091
+ L'unité est opaque pour le DSL\ : les auteurs décident si
1092
+ .Sy 5
1093
+ représente des ingénieurs, des points d'histoire, des ETP, des
1094
+ heures ou toute autre mesure
1095
+ .Pq même contrat d'opacité que Sy size:l jusqu'à ce qu'une déclaration Sy size lui donne du sens .
1096
+ .Pp
1097
+ Où elle peut apparaître\ :
1098
+ .Bl -tag -width "swimlane"
1099
+ .It Sy swimlane
1100
+ Entier ou décimal uniquement (pas de forme en pourcentage).
1101
+ Le budget par pas de temps du couloir.
1102
+ .It Sy item
1103
+ Entier, décimal ou littéral pourcentage.
1104
+ La consommation concurrente de l'élément.
1105
+ .It Sy parallel , Sy group
1106
+ Non valide \(em dérivée des enfants (somme à chaque pas de temps
1107
+ pour parallel\ ; passe-droit pour group).
1108
+ Même famille d'exclusion que
1109
+ .Sy size , duration , remaining .
1110
+ .El
1111
+ .Pp
1112
+ Capacité par défaut\ :
1113
+ .Bl -tag -width "Items à durée littérale"
1114
+ .It Sy Éléments dimensionnés
1115
+ .Sy size:
1116
+ déclarée, sans
1117
+ .Sy capacity:
1118
+ explicite \(em la capacité vaut
1119
+ .Sy 1
1120
+ par défaut, à la fois pour la dérivation de durée
1121
+ .Pq Sy duration = effort \(di 1 = effort
1122
+ et pour la comptabilité de surcharge.
1123
+ .It Sy Items à durée littérale
1124
+ .Sy duration:
1125
+ déclarée, sans
1126
+ .Sy size: ,
1127
+ sans
1128
+ .Sy capacity:
1129
+ explicite \(em la capacité reste indéfinie et l'élément contribue
1130
+ .Sy 0
1131
+ à la surcharge (non comptabilisé).
1132
+ La durée littérale donne la largeur de barre quoi qu'il arrive.
1133
+ .It Sy capacity:N Pq explicite
1134
+ L'emporte toujours pour les deux usages.
1135
+ .El
1136
+ .Pp
1137
+ Durée de vie\ : la capacité reste constante pendant toute la
1138
+ durée de l'élément.
1139
+ Pas de rampes en
1140
+ .Sy v1 .
1141
+ .Pp
1142
+ .Sy Seuils d'utilisation .
1143
+ Les couloirs qui déclarent
1144
+ .Sy capacity:
1145
+ peignent un soulignement d'utilisation à trois états (vert /
1146
+ jaune / rouge) le long du bas de la bande, basé sur la fonction
1147
+ de charge par pas de temps
1148
+ .Sy f(x) = \(*S items[i].capacity pour les éléments actifs en x .
1149
+ .Bl -tag -width "utilization-over-at"
1150
+ .It Sy utilization-warn-at:N% Pq par défaut Sy 80%
1151
+ À ce seuil ou au-dessus de la fraction de
1152
+ .Sy capacity: ,
1153
+ le segment est peint en
1154
+ .Sy jaune .
1155
+ .It Sy utilization-over-at:N% Pq par défaut Sy 100%
1156
+ À ce seuil ou au-dessus de la fraction de
1157
+ .Sy capacity: ,
1158
+ le segment est peint en
1159
+ .Sy rouge .
1160
+ .El
1161
+ .Pp
1162
+ En dessous de
1163
+ .Sy warn-at
1164
+ le segment est peint en
1165
+ .Sy vert .
1166
+ Les deux seuils acceptent la valeur littérale
1167
+ .Sy none
1168
+ pour désactiver cette bande de couleur\ :
1169
+ .Sy utilization-warn-at:none
1170
+ réduit l'indicateur à un binaire vert/rouge\ ;
1171
+ .Sy utilization-over-at:none
1172
+ supprime entièrement le rouge\ ; mettre les deux à
1173
+ .Sy none
1174
+ supprime purement et simplement le soulignement.
1175
+ .Sh PRÉCÉDENCE DE DIMENSIONNEMENT
1176
+ Lorsqu'un élément déclare à la fois
1177
+ .Sy size:
1178
+ et
1179
+ .Sy duration: ,
1180
+ le littéral
1181
+ .Sy duration:
1182
+ explicite l'emporte pour la largeur de barre et la ligne meta\ :
1183
+ la chip de taille n'est pas affichée (seul le littéral apparaît
1184
+ comme jeton pilote).
1185
+ .Bl -column -offset indent "size:" "duration:" "capacity:" "Durée résultante"
1186
+ .It Sy size: Ta Sy duration: Ta Sy capacity: Ta Durée résultante
1187
+ .It l Ta \(em Ta \(em Ta size.l.effort \(di 1 (p.\ ex. 2w)
1188
+ .It l Ta \(em Ta 2 Ta size.l.effort \(di 2 (p.\ ex. 1w)
1189
+ .It l Ta 2w Ta 2 Ta 2w (le littéral l'emporte\ ; pas de chip)
1190
+ .It \(em Ta 2w Ta 2 Ta 2w (la capacité ne divise pas un littéral)
1191
+ .It \(em Ta \(em Ta \(em Ta erreur de validation
1192
+ .El
1193
+ .Sh PROPRIÉTÉS DE STYLE
1194
+ Propriétés valides à l'intérieur d'un bloc
1195
+ .Sy style
1196
+ (et sur les lignes
1197
+ .Sy default <entité> )\ :
1198
+ .Bl -tag -width "timeline-position"
1199
+ .It Sy bg
1200
+ Couleur de fond / remplissage ou
1201
+ .Sy none .
1202
+ Nommée
1203
+ .Po
1204
+ .Sy red , blue , yellow , green , orange ,
1205
+ .Sy purple
1206
+ .Pq alias Sy violet ,
1207
+ .Sy gray
1208
+ .Pq alias Sy grey ,
1209
+ .Sy navy , white
1210
+ .Pc ,
1211
+ hexadécimale
1212
+ .Pq Sy #2563eb ,
1213
+ ou
1214
+ .Sy none
1215
+ (transparent).
1216
+ .It Sy fg
1217
+ Couleur de bord / contour.
1218
+ Nommée, hexadécimale ou
1219
+ .Sy none
1220
+ (pas de bord).
1221
+ .It Sy text
1222
+ Couleur du texte.
1223
+ Nommée, hexadécimale ou
1224
+ .Sy none
1225
+ (masque le texte).
1226
+ .It Sy border
1227
+ .Sy solid | dashed | dotted .
1228
+ .It Sy icon
1229
+ Identifiant ou chaîne.
1230
+ Identifiants intégrés
1231
+ .Po
1232
+ .Sy shield , warning , lock , plus le vocabulaire capacity-icon
1233
+ .Pc \ ;
1234
+ personnalisé\ : tout identifiant déclaré par une déclaration
1235
+ .Sy symbol \ ;
1236
+ en ligne\ : un littéral Unicode entre guillemets doubles
1237
+ .Pq Sy "\(rs"
1238
+ \(em dépend de la police.
1239
+ .It Sy shadow
1240
+ .Sy none Pq par défaut | subtle | soft | hard .
1241
+ .It Sy font
1242
+ .Sy sans Pq par défaut | serif | mono .
1243
+ .It Sy weight
1244
+ .Sy thin | light | normal Pq par défaut | bold .
1245
+ .It Sy italic
1246
+ .Sy true | false Pq par défaut .
1247
+ .It Sy text-size
1248
+ .Sy xs | sm | md Pq par défaut | lg | xl .
1249
+ .It Sy padding
1250
+ .Sy none | xs | sm | md Pq par défaut | lg | xl .
1251
+ .It Sy spacing
1252
+ .Sy none | xs | sm | md | lg | xl .
1253
+ La valeur par défaut varie selon l'entité.
1254
+ .It Sy header-height
1255
+ .Sy none | xs | sm | md Pq par défaut | lg | xl .
1256
+ Réservée à
1257
+ .Sy roadmap .
1258
+ .It Sy corner-radius
1259
+ .Sy none | xs | sm | md | lg | xl | full .
1260
+ .It Sy bracket
1261
+ .Sy none Pq par défaut | solid | dashed .
1262
+ Réservée à
1263
+ .Sy parallel .
1264
+ .It Sy capacity-icon
1265
+ Glyphe utilisé comme suffixe des nombres de capacité.
1266
+ Identifiants intégrés\ :
1267
+ .Sy none ,
1268
+ .Sy multiplier
1269
+ .Pq par défaut \(em "\(mu" ,
1270
+ .Sy person ,
1271
+ .Sy people ,
1272
+ .Sy points
1273
+ .Pq "\(em" ,
1274
+ .Sy time
1275
+ .Pq "\(em" .
1276
+ Personnalisé\ : tout identifiant
1277
+ .Sy symbol \ ;
1278
+ en ligne\ : un littéral Unicode entre guillemets doubles.
1279
+ .It Sy timeline-position
1280
+ .Sy top Pq par défaut | bottom | both .
1281
+ Réservée à
1282
+ .Sy roadmap .
1283
+ .Sy both
1284
+ réplique la bande de dates au bas du graphique.
1285
+ .It Sy minor-grid
1286
+ .Sy true | false Pq par défaut .
1287
+ Réservée à
1288
+ .Sy roadmap .
1289
+ Lorsque
1290
+ .Sy true ,
1291
+ trace de fines lignes de grille pointillées à chaque frontière de
1292
+ graduation.
1293
+ .El
1294
+ .Pp
1295
+ Les noms d'icône intégrés sont rendus à partir d'une bibliothèque
1296
+ SVG conservée et livrée avec le moteur de production, et non à
1297
+ partir des points de code emoji Unicode.
1298
+ Cela garantit un rendu visuel cohérent sur toutes les plateformes
1299
+ (web, CLI, exports).
1300
+ Les auteurs qui veulent un rendu emoji propre à la plateforme
1301
+ utilisent un littéral Unicode en ligne plutôt que l'identifiant
1302
+ nommé.
1303
+ .Sh GRAMMAIRE
1304
+ .Ss Modèle de déclaration universel
1305
+ Toute déclaration d'entité suit la même forme\ :
1306
+ .Bd -literal -offset indent
1307
+ mot-clé [id] ["titre"] [clé:valeur ...]
1308
+ .Ed
1309
+ .Bl -tag -width "Identifiant"
1310
+ .It Sy Identifiant
1311
+ Sans guillemets, conforme à
1312
+ .Sy [a-zA-Z_][a-zA-Z0-9_-]* .
1313
+ Sert au référencement.
1314
+ Facultatif \(em auto-généré à partir du titre (kebab-case) si
1315
+ omis.
1316
+ .It Sy Titre
1317
+ Chaîne entre guillemets doubles.
1318
+ Nom d'affichage lisible.
1319
+ Facultatif.
1320
+ Toujours entre guillemets doubles, même les titres d'un seul mot
1321
+ \(em les guillemets sont la manière dont l'analyseur distingue
1322
+ identifiant et titre.
1323
+ .El
1324
+ .Pp
1325
+ Au moins l'un des éléments
1326
+ .Sy id
1327
+ ou
1328
+ .Sy "titre"
1329
+ doit être présent.
1330
+ Toute autre entrée est une propriété nommée utilisant
1331
+ .Sy clé:valeur .
1332
+ .Pp
1333
+ La directive
1334
+ .Sy nowline
1335
+ est la seule construction sans identifiant ni titre\ ; toute autre
1336
+ déclaration suit ce modèle.
1337
+ .Ss Identifiants
1338
+ Les identifiants sont conformes à
1339
+ .Sy [a-zA-Z_][a-zA-Z0-9_-]* \(em
1340
+ lettres, chiffres, tirets bas et tirets, commençant par une
1341
+ lettre ou un tiret bas.
1342
+ Ils doivent être uniques sur le résultat fusionné (le fichier et
1343
+ toutes ses inclusions)\ ; éléments, blocs parallèles, groupes,
1344
+ ancres, personnes, équipes, jalons et notes de bas de page
1345
+ partagent un seul espace de noms.
1346
+ .Pp
1347
+ La forme idiomatique de Nowline utilise le kebab-case, mais
1348
+ .Sy authRefactor ,
1349
+ .Sy auth_refactor
1350
+ et
1351
+ .Sy MED
1352
+ sont également valides.
1353
+ .Pp
1354
+ Lorsqu'omis, l'analyseur en génère un en transformant le titre
1355
+ en kebab-case\ :
1356
+ .Qq Audit log v2
1357
+ devient
1358
+ .Sy audit-log-v2 .
1359
+ .Ss Listes
1360
+ Toute propriété de type liste accepte une seule valeur sans
1361
+ crochets ou plusieurs valeurs avec la notation entre crochets\ :
1362
+ .Bd -literal -offset indent
1363
+ labels:enterprise
1364
+ labels:[enterprise, security]
1365
+ .Ed
1366
+ .Pp
1367
+ Pas de guillemets autour des identifiants dans les listes.
1368
+ Séparés par des virgules, espaces facultatifs.
1369
+ .Ss Dépendances
1370
+ .Sy after:
1371
+ et
1372
+ .Sy before:
1373
+ acceptent chacune un seul identifiant ou une liste entre crochets.
1374
+ Les références peuvent viser des éléments, jalons, ancres, blocs
1375
+ parallèles ou groupes.
1376
+ .Bl -bullet -offset indent -compact
1377
+ .It
1378
+ .Sy after:id
1379
+ \(em cette entité démarre après la fin de l'entité référencée (ou
1380
+ après la date de l'ancre référencée).
1381
+ .It
1382
+ .Sy after:[id1, id2, ...]
1383
+ \(em démarre après la fin
1384
+ .Em de toutes
1385
+ les entités référencées (autrement dit, après la dernière des
1386
+ fins).
1387
+ .It
1388
+ .Sy before:id
1389
+ \(em cette entité doit se terminer avant le début de l'entité
1390
+ référencée (ou avant la date de l'ancre référencée).
1391
+ .It
1392
+ .Sy before:[id1, id2, ...]
1393
+ \(em se termine avant le début
1394
+ .Em du plus tôt
1395
+ des entités référencées.
1396
+ .El
1397
+ .Pp
1398
+ Les dépendances cycliques à travers le graphe complet (y compris
1399
+ chaque élément des références sous forme de liste) sont une
1400
+ erreur de validation.
1401
+ .Ss Continuation de ligne
1402
+ Une barre oblique inverse
1403
+ .Sq \e
1404
+ en fin de ligne signifie que la ligne suivante prolonge la même
1405
+ déclaration.
1406
+ L'indentation sur la ligne suivante est cosmétique.
1407
+ Valable uniquement à la fin d'une ligne de propriété \(em pas
1408
+ dans les chaînes ni les commentaires.
1409
+ Utilisez
1410
+ .Sq \e\e
1411
+ pour une barre oblique inverse littérale.
1412
+ .Bd -literal -offset indent
1413
+ item auth "Auth refactor" duration:2w status:in-progress \e
1414
+ owner:sam labels:[security,enterprise] \e
1415
+ link:https://github.com/acme/auth/issues/123 \e
1416
+ style:flagged
1417
+ .Ed
1418
+ .Ss Commentaires
1419
+ .Bd -literal -offset indent
1420
+ // Ceci est un commentaire d'une seule ligne
1421
+
1422
+ /* Ceci est un
1423
+ commentaire sur plusieurs lignes */
1424
+ .Ed
1425
+ .Sh VALIDATION
1426
+ L'analyseur produit des messages d'erreur clairs avec position
1427
+ dans le fichier et suggestions (indices
1428
+ .Qq vouliez-vous dire X ?
1429
+ par recherche floue).
1430
+ Les règles se groupent ainsi\ ; la prose complète vit dans
1431
+ .Pa specs/dsl.md .
1432
+ .Ss Structure
1433
+ .Bl -bullet -offset indent -compact
1434
+ .It
1435
+ Exactement une déclaration
1436
+ .Sy roadmap
1437
+ par fichier (sous réserve du mode
1438
+ .Sy include
1439
+ .Sy roadmap: ) .
1440
+ .It
1441
+ Tous les identifiants sont uniques sur le résultat fusionné.
1442
+ Le parent l'emporte en cas de collision, avec un avertissement.
1443
+ .It
1444
+ Toute entité doit avoir au moins un identifiant ou un titre (ou
1445
+ les deux).
1446
+ .It
1447
+ La structure du fichier doit suivre l'ordre des sections\ :
1448
+ directive
1449
+ .Sy nowline
1450
+ (facultative, première ligne non commentaire),
1451
+ .Sy include ,
1452
+ .Sy config ,
1453
+ .Sy roadmap .
1454
+ .It
1455
+ La version de la directive
1456
+ .Sy nowline
1457
+ doit correspondre à
1458
+ .Sy v\&\ed+ .
1459
+ Une version plus récente que celle prise en charge par
1460
+ l'analyseur est une erreur identifiant la version requise.
1461
+ .It
1462
+ Au moins un couloir est obligatoire dans le résultat fusionné.
1463
+ .It
1464
+ L'indentation doit être cohérente dans un fichier\ : espaces
1465
+ .Em ou
1466
+ tabulations, jamais les deux.
1467
+ Une indentation mixte est une erreur d'analyse identifiant la
1468
+ première ligne fautive.
1469
+ .It
1470
+ Les déclarations
1471
+ .Sy label ,
1472
+ .Sy size
1473
+ et
1474
+ .Sy status
1475
+ doivent apparaître dans la section roadmap.
1476
+ Les placer avant
1477
+ .Sy roadmap
1478
+ est une erreur.
1479
+ .El
1480
+ .Ss Références
1481
+ .Bl -bullet -offset indent -compact
1482
+ .It
1483
+ Tous les éléments de
1484
+ .Sy after: ,
1485
+ .Sy before:
1486
+ et
1487
+ .Sy on:
1488
+ doivent résoudre vers des identifiants déclarés dans la portée
1489
+ fusionnée.
1490
+ .It
1491
+ Une référence
1492
+ .Sy size:
1493
+ ou
1494
+ .Sy status:
1495
+ doit résoudre vers une déclaration apparaissant
1496
+ .Em plus tôt dans le fichier
1497
+ (ou dans une inclusion antérieure).
1498
+ Les références anticipées sont une erreur.
1499
+ .It
1500
+ Pas de dépendances cycliques dans les chaînes
1501
+ .Sy after / before .
1502
+ .El
1503
+ .Ss Valeurs
1504
+ .Bl -bullet -offset indent -compact
1505
+ .It
1506
+ Les valeurs
1507
+ .Sy anchor date:
1508
+ et celles de
1509
+ .Sy milestone date:
1510
+ datés sont des dates ISO 8601 valides
1511
+ .Pq Pa AAAA-MM-JJ , calendrier valide .
1512
+ .It
1513
+ Les valeurs
1514
+ .Sy duration:
1515
+ et
1516
+ .Sy scale:
1517
+ correspondent au motif de durée brut
1518
+ .Sy \&\ed+(\e.\ed+)?[dwmqy] .
1519
+ .It
1520
+ L'identifiant d'une déclaration
1521
+ .Sy size
1522
+ ne doit pas correspondre au motif de durée brut, ni être un
1523
+ simple
1524
+ .Sy d , w , m , q , y .
1525
+ .It
1526
+ Toute déclaration
1527
+ .Sy size
1528
+ doit spécifier
1529
+ .Sy effort: \ ;
1530
+ la valeur doit être un littéral de durée brut positif.
1531
+ .It
1532
+ .Sy capacity:
1533
+ sur un
1534
+ .Sy swimlane
1535
+ doit être un entier ou un décimal positif (pas de forme en
1536
+ pourcentage).
1537
+ .Sy capacity:
1538
+ sur un
1539
+ .Sy item
1540
+ doit être un entier, un décimal ou un littéral pourcentage
1541
+ positif.
1542
+ .Sy capacity:
1543
+ n'est pas valide sur
1544
+ .Sy parallel
1545
+ ni
1546
+ .Sy group .
1547
+ .It
1548
+ .Sy utilization-warn-at:
1549
+ et
1550
+ .Sy utilization-over-at:
1551
+ doivent chacune être un littéral pourcentage positif, une
1552
+ fraction décimale positive, ou
1553
+ .Sy none .
1554
+ Lorsque les deux seuils numériques sont définis,
1555
+ .Sy warn-at \(<= over-at .
1556
+ .It
1557
+ La valeur de
1558
+ .Sy capacity-icon:
1559
+ doit être un identifiant intégré
1560
+ .Po
1561
+ .Sy none , Sy multiplier , Sy person , Sy people , Sy points , Sy time
1562
+ .Pc ,
1563
+ un identifiant correspondant à une déclaration
1564
+ .Sy symbol
1565
+ en portée, ou un littéral Unicode entre guillemets doubles.
1566
+ Même contrat pour
1567
+ .Sy icon: .
1568
+ .It
1569
+ .Sy remaining:
1570
+ est soit un pourcentage
1571
+ .Pq Sy 0% \(en Sy 100%
1572
+ soit un littéral d'effort mono-ingénieur.
1573
+ Lorsque le littéral dépasse l'effort total (pourcentage calculé
1574
+ .Sy > 100% ) ,
1575
+ l'étape de mise en page émet un avertissement souple et bride la
1576
+ barre peinte à 100\ % restant\ ; le rendu n'est jamais bloqué.
1577
+ .El
1578
+ .Ss Calendrier
1579
+ .Bl -bullet -offset indent -compact
1580
+ .It
1581
+ .Sy calendar:
1582
+ sur
1583
+ .Sy roadmap
1584
+ doit être l'une des valeurs
1585
+ .Sy business , full , custom .
1586
+ .It
1587
+ Un bloc de configuration
1588
+ .Sy calendar
1589
+ n'est valide que lorsque la roadmap déclare
1590
+ .Sy calendar:custom .
1591
+ .It
1592
+ Lorsque
1593
+ .Sy calendar:custom ,
1594
+ les quatre entrées
1595
+ .Sy days-per-*
1596
+ sont obligatoires et doivent être des entiers positifs.
1597
+ .El
1598
+ .Ss Propriété roadmap start
1599
+ .Bl -bullet -offset indent -compact
1600
+ .It
1601
+ .Sy roadmap start:
1602
+ doit être une date ISO 8601 valide.
1603
+ .It
1604
+ Si un fichier contient une
1605
+ .Sy anchor
1606
+ ou un
1607
+ .Sy milestone
1608
+ daté,
1609
+ .Sy start:
1610
+ est obligatoire.
1611
+ .It
1612
+ Toute date d'ancre et toute date de jalon datée doit être
1613
+ supérieure ou égale à
1614
+ .Sy start: .
1615
+ .El
1616
+ .Ss Personnes et équipes
1617
+ .Bl -bullet -offset indent -compact
1618
+ .It
1619
+ Un
1620
+ .Sy person
1621
+ peut être déclaré au plus une fois dans la portée du fichier
1622
+ fusionné.
1623
+ Une déclaration est identifiée par la présence d'un titre ou de
1624
+ toute propriété nommée sur la ligne.
1625
+ .It
1626
+ Une ligne nue
1627
+ .Sy person <id>
1628
+ à l'intérieur d'un
1629
+ .Sy team
1630
+ indique l'appartenance et est valide avec ou sans déclaration
1631
+ séparée.
1632
+ .It
1633
+ Une ligne nue
1634
+ .Sy person <id>
1635
+ au plus haut niveau de la roadmap, sans déclaration
1636
+ correspondante nulle part, est un
1637
+ .No no-op
1638
+ (l'analyseur peut émettre un avertissement).
1639
+ .El
1640
+ .Ss Inclusions
1641
+ .Bl -bullet -offset indent -compact
1642
+ .It
1643
+ Les chemins
1644
+ .Sy include
1645
+ doivent résoudre vers un fichier
1646
+ .Pa .nowline
1647
+ existant, relatif au répertoire du fichier incluant.
1648
+ .It
1649
+ Pas d'inclusions cycliques.
1650
+ .It
1651
+ Les déclarations
1652
+ .Sy include
1653
+ apparaissent avant
1654
+ .Sy config
1655
+ et
1656
+ .Sy roadmap
1657
+ (après la directive
1658
+ .Sy nowline
1659
+ si présente).
1660
+ .It
1661
+ Un doublon d'inclusion du même fichier dans un même fichier est
1662
+ une erreur.
1663
+ .It
1664
+ .Sy config:
1665
+ doit être
1666
+ .Sy merge , ignore ou isolate .
1667
+ .Sy roadmap:
1668
+ doit être
1669
+ .Sy merge , ignore ou isolate .
1670
+ .It
1671
+ En
1672
+ .Sy config:isolate ,
1673
+ les références
1674
+ .Sy style:
1675
+ à l'intérieur du fichier isolé doivent résoudre dans la
1676
+ configuration propre à ce fichier.
1677
+ .It
1678
+ En
1679
+ .Sy roadmap:isolate ,
1680
+ le fichier inclus doit contenir une déclaration
1681
+ .Sy roadmap .
1682
+ .It
1683
+ Pour toute inclusion dont le mode
1684
+ .Sy roadmap:
1685
+ n'est pas
1686
+ .Sy ignore ,
1687
+ parent et enfant doivent s'accorder sur
1688
+ .Sy start: \(em
1689
+ les deux absents ou les deux présents avec des valeurs
1690
+ identiques.
1691
+ Une discordance est une erreur signalée sur la ligne
1692
+ .Sy include
1693
+ du parent.
1694
+ .El
1695
+ .Ss parallel et group
1696
+ .Bl -bullet -offset indent -compact
1697
+ .It
1698
+ .Sy parallel
1699
+ doit contenir au moins 2 enfants.
1700
+ Un parallel à un seul enfant émet un avertissement.
1701
+ .It
1702
+ .Sy group
1703
+ doit contenir au moins 1 enfant.
1704
+ .It
1705
+ .Sy size , duration , remaining , capacity
1706
+ ne sont pas valides sur
1707
+ .Sy parallel
1708
+ ni
1709
+ .Sy group
1710
+ (calculées à partir des enfants).
1711
+ .It
1712
+ .Sy parallel
1713
+ est valide à l'intérieur d'un swimlane ou d'un group.
1714
+ .Pp
1715
+ .Sy group
1716
+ est valide à l'intérieur d'un swimlane, d'un parallel ou d'un
1717
+ group.
1718
+ .El
1719
+ .Ss Valeurs par défaut
1720
+ .Bl -bullet -offset indent -compact
1721
+ .It
1722
+ Le premier argument positionnel après
1723
+ .Sy default
1724
+ doit être l'un des suivants\ :
1725
+ .Sy item , label , swimlane , roadmap , parallel , group ,
1726
+ .Sy milestone , footnote , anchor .
1727
+ .It
1728
+ Les déclarations
1729
+ .Sy default <entité>
1730
+ en double pour le même type d'entité dans un même fichier sont
1731
+ une erreur.
1732
+ .It
1733
+ Une déclaration
1734
+ .Sy default <entité>
1735
+ qui définit une propriété interdite
1736
+ .Pq voir Sx SECTION CONFIG
1737
+ est une erreur.
1738
+ .El
1739
+ .Ss Symboles
1740
+ .Bl -bullet -offset indent -compact
1741
+ .It
1742
+ Toute déclaration
1743
+ .Sy symbol
1744
+ doit spécifier une valeur
1745
+ .Sy unicode:"<chaîne>"
1746
+ non vide.
1747
+ .It
1748
+ .Sy ascii: ,
1749
+ si présente, doit être une chaîne entre guillemets de longueur
1750
+ \(<= 3 caractères ASCII.
1751
+ .It
1752
+ Un identifiant de
1753
+ .Sy symbol
1754
+ ne doit pas masquer un nom d'icône intégré.
1755
+ .It
1756
+ Une référence
1757
+ .Sy symbol
1758
+ .Pq Sy icon:NOM ou Sy capacity-icon:NOM
1759
+ doit résoudre vers un nom intégré ou vers une déclaration
1760
+ .Sy symbol
1761
+ antérieure.
1762
+ Les références anticipées sont une erreur.
1763
+ .El
1764
+ .Sh EXEMPLES
1765
+ Un fichier
1766
+ .Pa .nowline
1767
+ complet exerçant les principales fonctionnalités du langage\ :
1768
+ .Bd -literal -offset indent
1769
+ nowline v1
1770
+
1771
+ include "shared/teams.nowline"
1772
+
1773
+ config
1774
+
1775
+ style enterprise "Enterprise readiness"
1776
+ bg: blue
1777
+ fg: navy
1778
+ text: white
1779
+ border: solid
1780
+ icon: shield
1781
+
1782
+ style risky
1783
+ border: dashed
1784
+ fg: orange
1785
+
1786
+ default item status:planned shadow:subtle
1787
+ default label style:subtle corner-radius:full
1788
+ default swimlane padding:sm spacing:none
1789
+
1790
+ roadmap platform-2026 "Platform 2026" \e
1791
+ author:"Acme Engineering" \e
1792
+ logo:"./brand/acme.svg" \e
1793
+ start:2026-01-06 scale:2w calendar:business
1794
+
1795
+ person sam "Sam Chen" link:https://github.com/samchen
1796
+ person jen "Jennifer Wu"
1797
+
1798
+ team engineering "Engineering"
1799
+ team platform "Platform Team"
1800
+ person sam
1801
+ person jen
1802
+ team mobile "Mobile Team"
1803
+
1804
+ anchor kickoff date:2026-01-06
1805
+ anchor code-freeze "Code Freeze" date:2026-05-01
1806
+ anchor ga-date "GA Date" date:2026-06-01
1807
+
1808
+ size xs "Extra Small" effort:1d
1809
+ size s "Small" effort:3d
1810
+ size m "Medium" effort:1w
1811
+ size l "Large" effort:2w
1812
+ size xl "Extra Large" effort:1m
1813
+
1814
+ status awaiting-review "Awaiting Review"
1815
+
1816
+ label enterprise "Enterprise readiness" style:enterprise
1817
+ label security "Security hardening" style:enterprise
1818
+ label low-confidence style:risky
1819
+
1820
+ swimlane platform owner:platform capacity:5
1821
+ item auth-refactor "Auth refactor" size:l after:kickoff \e
1822
+ status:done owner:sam labels:enterprise capacity:3 \e
1823
+ link:https://github.com/acme/auth/issues/123
1824
+ parallel after:auth-refactor
1825
+ group audit-track "Audit Track" labels:security
1826
+ item audit-log "Audit log v2" size:xl before:code-freeze \e
1827
+ remaining:30% labels:[enterprise, security] capacity:2
1828
+ description "Comprehensive audit trail for admin actions"
1829
+ item audit-ui "Audit UI" size:m capacity:1
1830
+ item sso "SSO plugins" size:m \e
1831
+ labels:[enterprise, low-confidence] capacity:50%
1832
+ item platform-qa "Platform QA" size:s capacity:2
1833
+
1834
+ swimlane mobile owner:mobile capacity:2
1835
+ item offline "Offline mode" size:l after:kickoff owner:jen \e
1836
+ status:at-risk remaining:60% capacity:3
1837
+ item push-v2 "Push notifications v2" size:m owner:mobile capacity:1
1838
+
1839
+ milestone beta "Beta" after:auth-refactor
1840
+ milestone v1-ga "v1 GA" after:[auth-refactor, audit-log]
1841
+ milestone ga-launch "GA launch" date:2026-06-01 \e
1842
+ after:[auth-refactor, audit-log]
1843
+
1844
+ footnote "Vendor dependency" on:audit-log
1845
+ description "Blocked until vendor contract is signed."
1846
+ footnote capacity-risk "Team capacity risk" on:[mobile, platform]
1847
+ description "Mobile team is down to 2 engineers through Q2."
1848
+ .Ed
1849
+ .Sh VOIR AUSSI
1850
+ .Xr nowline 1
1851
+ .Pq Sy man 1 nowline
1852
+ .Pp
1853
+ Le dossier
1854
+ .Sy specs/
1855
+ du dépôt source documente la grammaire DSL en prose
1856
+ .Pq Pa specs/dsl.md ,
1857
+ le pipeline de mise en page et de production
1858
+ .Pq Pa specs/rendering.md ,
1859
+ le modèle de localisation
1860
+ .Pq Pa specs/localization.md
1861
+ et les jalons libres
1862
+ .Pq Pa specs/milestones.md .
1863
+ .Sh AUTEURS
1864
+ .An Lolay Aq Mt packages@lolay.com