@nowline/cli 0.0.0-dev.20260601071750.g04bdff9

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 +436 -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 +64 -0
  46. package/dist/core/parse.js.map +1 -0
  47. package/dist/diagnostics/adapt.d.ts +6 -0
  48. package/dist/diagnostics/adapt.d.ts.map +1 -0
  49. package/dist/diagnostics/adapt.js +81 -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 +10 -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 +463 -0
  108. package/man/fr/nowline.5 +1864 -0
  109. package/man/nowline.1 +448 -0
  110. package/man/nowline.5 +1785 -0
  111. package/package.json +70 -0
  112. package/scripts/bundle-templates.mjs +106 -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 +567 -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 +97 -0
  125. package/src/diagnostics/adapt.ts +89 -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 +13 -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
package/man/nowline.1 ADDED
@@ -0,0 +1,448 @@
1
+ .Dd $Mdocdate$
2
+ .Dt NOWLINE 1
3
+ .Os
4
+ .Sh NAME
5
+ .Nm nowline
6
+ .Nd create roadmaps using a human readable text file .nowline
7
+ .Sh SYNOPSIS
8
+ .Nm
9
+ .Op Fl f Ar format
10
+ .Op Fl o Ar path
11
+ .Op Fl t Ar theme
12
+ .Op Fl -now Ar date
13
+ .Op Ar options
14
+ .Ar input
15
+ .Nm
16
+ .Fl -serve
17
+ .Op Fl p Ar port
18
+ .Op Ar options
19
+ .Ar input
20
+ .Nm
21
+ .Fl -init
22
+ .Op Ar name
23
+ .Nm
24
+ .Fl -dry-run
25
+ .Op Ar options
26
+ .Ar input
27
+ .Nm
28
+ .Op Fl V | Fl -version
29
+ .Nm
30
+ .Op Fl h | Fl -help
31
+ .Sh DESCRIPTION
32
+ .Nm
33
+ is a CLI that processes simple human readable
34
+ .Pa .nowline
35
+ files that define a roadmap, not a Gantt chart.
36
+ The primary artifact is an SVG, but it also generates many other
37
+ artifacts including PNG, PDF, HTML, Markdown+Mermaid, XLSX, MS Project
38
+ XML.
39
+ .Pp
40
+ This page documents the CLI.
41
+ For the file format, see
42
+ .Xr nowline 5 .
43
+ .Sh INPUT
44
+ The input format is detected from the file extension:
45
+ .Pa .nowline
46
+ \(-> DSL,
47
+ .Pa .json
48
+ \(-> AST.
49
+ Standard-input input defaults to
50
+ .Pa .nowline .
51
+ Use
52
+ .Fl -input-format
53
+ to override for unusual filenames.
54
+ .Sh LANGUAGE
55
+ A
56
+ .Pa .nowline
57
+ file is an indentation-significant outline.
58
+ Two-space indent is canonical; tabs are accepted but must not be
59
+ mixed with spaces in a single file.
60
+ Strings are double-quoted; properties are
61
+ .Sy key:value
62
+ pairs.
63
+ Comments use
64
+ .Sq //
65
+ or
66
+ .Sq /* */ .
67
+ .Pp
68
+ Core keywords:
69
+ .Bl -tag -width "person, team" -compact
70
+ .It Sy roadmap
71
+ The top-level roadmap declaration; one per file.
72
+ .It Sy swimlane
73
+ A horizontal lane of work (team, area, stream).
74
+ .It Sy item
75
+ A unit of work, indented under a swimlane.
76
+ .It Sy parallel
77
+ A block whose children run concurrently.
78
+ .It Sy group
79
+ A logical bundle of items, rendered together.
80
+ .It Sy anchor
81
+ A named date on the timeline.
82
+ .It Sy milestone
83
+ A point-in-time marker that depends on work.
84
+ .It Sy person , team
85
+ Org vocabulary referenced by
86
+ .Sy owner: .
87
+ .It Sy label
88
+ Reusable tag referenced by
89
+ .Sy labels: .
90
+ .El
91
+ .Pp
92
+ Every entity follows a universal shape:
93
+ .Bd -literal -offset indent
94
+ keyword [id] ["title"] [key:value ...]
95
+ .Ed
96
+ .Pp
97
+ At least one of
98
+ .Ar id
99
+ or
100
+ .Qq Ar title
101
+ is required \(em the parser distinguishes them by quoting.
102
+ .Pp
103
+ Minimal example:
104
+ .Bd -literal -offset indent
105
+ nowline v1
106
+ roadmap r "Demo" start:2026-01-06
107
+ swimlane platform
108
+ item research "Research" duration:3w
109
+ item build "Build" duration:2w
110
+ .Ed
111
+ .Pp
112
+ See
113
+ .Xr nowline 5
114
+ .Pq Sy man 5 nowline
115
+ for the full grammar, every property, validation rules, and
116
+ .Sy include
117
+ / config / style declarations.
118
+ .Sh MODE FLAGS
119
+ The mode flags below are mutually exclusive.
120
+ .Bl -tag -width Fl
121
+ .It Fl -serve
122
+ Run a local live-reload preview server.
123
+ Re-parses, re-validates, re-lays-out, and re-renders on every file
124
+ change; connected browsers refresh via Server-Sent Events.
125
+ Validation errors are shown as an overlay on top of the most recent
126
+ successful render.
127
+ Opt-in
128
+ .Fl o Ar path
129
+ also writes the rendered output to disk on each rebuild.
130
+ .It Fl -init Op Ar name
131
+ Scaffold a starter
132
+ .Pa .nowline
133
+ file in the current directory.
134
+ The positional argument is the project
135
+ .Em name ,
136
+ not a file path;
137
+ .Pa .nowline
138
+ is auto-appended if missing.
139
+ Default name is
140
+ .Sy roadmap .
141
+ Existing files are silently overwritten.
142
+ .It Fl n , -dry-run
143
+ Run the full pipeline (parse + validate + layout + format) but skip the
144
+ write step.
145
+ Replaces the deprecated
146
+ .Sy validate
147
+ verb.
148
+ Exits 0 on success, 1 on validation error.
149
+ Works with any output format \(em
150
+ .Nm Ar roadmap.nowline Fl f Ar pdf Fl -dry-run
151
+ exercises the entire PDF pipeline without producing a file.
152
+ .El
153
+ .Sh I/O OPTIONS
154
+ .Bl -tag -width Fl
155
+ .It Fl f , -format Ar fmt
156
+ Output format:
157
+ .Sy svg , png , pdf , html , mermaid , xlsx , msproj , json , nowline .
158
+ Default: inferred from
159
+ .Fl o
160
+ extension, else
161
+ .Pa .nowlinerc
162
+ .Sy defaultFormat ,
163
+ else
164
+ .Sy svg .
165
+ .It Fl o , -output Ar path
166
+ Output file path.
167
+ Use
168
+ .Sq -
169
+ for standard output (Unix dash convention).
170
+ Default:
171
+ .Pa <cwd>/<input-base>.<format> .
172
+ Existing files are silently overwritten.
173
+ .It Fl -input-format Ar fmt
174
+ Force input format:
175
+ .Sy nowline | json .
176
+ Default: inferred from extension; standard input defaults to
177
+ .Sy nowline .
178
+ .El
179
+ .Sh RENDER OPTIONS
180
+ .Bl -tag -width Fl
181
+ .It Fl t , -theme Ar name
182
+ .Sy light | dark .
183
+ .It Fl -now Ar date
184
+ .Sq Now
185
+ anchor for the now-line and date math, in
186
+ .Pa YYYY-MM-DD
187
+ form.
188
+ Default: today (the OS calendar date in UTC).
189
+ Pass
190
+ .Fl -now Sq -
191
+ to suppress the now-line entirely.
192
+ .It Fl -locale Ar bcp47
193
+ BCP-47 language tag for the operator's CLI message output (validator
194
+ diagnostics on standard error,
195
+ .Fl -help ,
196
+ parse errors, verbose logs).
197
+ Examples:
198
+ .Sy en-US , fr , fr-CA , fr-FR .
199
+ .Pp
200
+ Nowline keeps two independent locale chains so a French operator
201
+ can read errors in French while still rendering an English roadmap
202
+ authored by an American teammate (and vice-versa):
203
+ .Bl -tag -width Ds
204
+ .It Em Content locale Pq baked into the rendered SVG / PDF / etc.
205
+ File's
206
+ .Sy nowline v1 locale:
207
+ directive
208
+ \(->
209
+ .Fl -locale
210
+ \(->
211
+ .Ev LC_ALL Ns / Ns Ev LC_MESSAGES Ns / Ns Ev LANG
212
+ \(->
213
+ .Sy en-US .
214
+ The file always wins; the operator's locale only acts as a fallback
215
+ when the file declines to declare its own.
216
+ .It Em Operator locale Pq stderr / stdout messages
217
+ .Fl -locale
218
+ \(->
219
+ .Ev LC_ALL Ns / Ns Ev LC_MESSAGES Ns / Ns Ev LANG
220
+ \(->
221
+ .Sy en-US .
222
+ Independent of the file directive: a French
223
+ .Ev LANG
224
+ keeps validator errors in French even when the file says
225
+ .Sy locale:en-US .
226
+ .El
227
+ .Pp
228
+ Bundles fall back along the BCP-47 chain
229
+ .Pq Sy fr-CA No \(-> Sy fr No \(-> Sy en-US ,
230
+ so missing entries are silently filled in.
231
+ See
232
+ .Pa specs/localization.md
233
+ for the resolution matrix.
234
+ .It Fl -no-links
235
+ Omit link icons from rendered items.
236
+ .It Fl s , -scale Ar n
237
+ Raster scale factor (PNG only; default 1).
238
+ .It Fl -strict
239
+ Promote asset / sanitizer warnings to errors.
240
+ .It Fl w , -width Ar px
241
+ Canvas width in pixels (default 1280).
242
+ .It Fl -asset-root Ar dir
243
+ Directory from which logo / image assets may be loaded
244
+ (default: input file's directory).
245
+ .El
246
+ .Sh FORMAT-SPECIFIC OPTIONS
247
+ .Bl -tag -width Fl
248
+ .It Fl -page-size Ar size
249
+ PDF page size: preset
250
+ .Pq Sy letter , legal , tabloid , ledger , a1 No \(en Sy a5 , b3 No \(en Sy b5 ,
251
+ .Sy content
252
+ for auto-fit, or
253
+ .Sy WxH Ns Em unit
254
+ for custom (e.g.
255
+ .Sy 8.5x11in , 210x297mm ) .
256
+ Default:
257
+ .Sy letter .
258
+ .It Fl -orientation Ar name
259
+ PDF orientation:
260
+ .Sy portrait | landscape | auto .
261
+ Default:
262
+ .Sy auto .
263
+ .It Fl -margin Ar length
264
+ PDF page margin.
265
+ Bare numbers are points; length suffixes
266
+ .Pq Sy in , mm , cm
267
+ are accepted.
268
+ Default:
269
+ .Sy 36pt
270
+ (1/2 inch).
271
+ .It Fl -font-sans Ar ref
272
+ Sans font for PNG/PDF: TTF/OTF path, or alias
273
+ .Pq Sy sf , helvetica , dejavu , ... .
274
+ Default: platform probe \(-> bundled DejaVu fallback.
275
+ .It Fl -font-mono Ar ref
276
+ Monospace font for PNG/PDF; same resolution chain as
277
+ .Fl -font-sans .
278
+ .It Fl -headless
279
+ Skip the platform font probe and force the bundled DejaVu pair.
280
+ Output is byte-stable across machines.
281
+ .It Fl -start Ar date
282
+ MS Project: anchor date
283
+ .Pq Pa YYYY-MM-DD
284
+ for relative-only roadmaps.
285
+ Default:
286
+ .Fl -now ,
287
+ then deterministic fallback.
288
+ .El
289
+ .Sh SERVE OPTIONS
290
+ .Bl -tag -width Fl
291
+ .It Fl p , -port Ar n
292
+ Port to bind (default 4318).
293
+ .It Fl -host Ar host
294
+ Bind address (default
295
+ .Sy 127.0.0.1 ;
296
+ use
297
+ .Sy 0.0.0.0
298
+ to expose on the LAN).
299
+ .It Fl -open
300
+ Open the browser on start.
301
+ .El
302
+ .Sh LOGGING OPTIONS
303
+ The logging flags are mutually exclusive.
304
+ .Bl -tag -width Fl
305
+ .It Fl v , -verbose
306
+ Print extra diagnostics to standard error (config path, pipeline
307
+ timings, font resolution, fallback decisions).
308
+ .It Fl q , -quiet
309
+ Suppress non-error standard error.
310
+ .El
311
+ .Sh STANDARD OPTIONS
312
+ .Bl -tag -width Fl
313
+ .It Fl h , -help
314
+ Print help to standard output and exit 0.
315
+ .It Fl V , -version
316
+ Print version to standard output and exit 0.
317
+ .El
318
+ .Pp
319
+ .Fl V
320
+ (uppercase) is
321
+ .Fl -version ;
322
+ lowercase
323
+ .Fl v
324
+ is
325
+ .Fl -verbose ,
326
+ matching
327
+ .Xr curl 1
328
+ and
329
+ .Xr ssh 1 .
330
+ .Sh ENVIRONMENT
331
+ .Bl -tag -width Ev
332
+ .It Ev LC_ALL , LC_MESSAGES , LANG
333
+ Operator locale fallback when
334
+ .Fl -locale
335
+ is absent.
336
+ First non-empty value wins, in the order listed.
337
+ POSIX-style suffixes
338
+ .Pq Sq .UTF-8 , Sq @euro
339
+ are stripped and the result is normalized to BCP-47.
340
+ .Pp
341
+ Affects the operator chain
342
+ .Pq stderr / stdout, validator diagnostics, --help, errors, verbose logs
343
+ unconditionally.
344
+ Affects the content chain
345
+ .Pq rendered axis labels, now-pill, quarter prefix
346
+ only when the file does not declare its own
347
+ .Sy nowline v1 locale:
348
+ directive — the file directive always wins for the rendered
349
+ artifact.
350
+ See
351
+ .Pa specs/localization.md
352
+ for the resolution matrix.
353
+ .El
354
+ .Sh FILES
355
+ .Bl -tag -width Pa
356
+ .It Pa .nowlinerc
357
+ Optional JSON or YAML configuration file.
358
+ Walked up from the input file's directory; nearest one wins.
359
+ CLI flags override config values.
360
+ Recognized keys:
361
+ .Sy theme , defaultFormat , width , pdfPageSize , pdfOrientation ,
362
+ .Sy pdfMargin , fontSans , fontMono , headlessFonts , locale .
363
+ Unknown keys are ignored.
364
+ .El
365
+ .Sh EXIT STATUS
366
+ .Bl -tag -width Ds
367
+ .It 0
368
+ Success.
369
+ .It 1
370
+ Validation error (parse failure, invalid reference, etc.).
371
+ .It 2
372
+ Usage error (missing input, bad flags, mutually-exclusive flags,
373
+ unsupported format, file not found, binary output to TTY, unreadable
374
+ input).
375
+ .It 3
376
+ Output error (cannot write to destination, exporter pipeline failure).
377
+ .El
378
+ .Sh EXAMPLES
379
+ Render the default SVG to the current directory:
380
+ .Bd -literal -offset indent
381
+ nowline roadmap.nowline
382
+ .Ed
383
+ .Pp
384
+ Render to a different format; format inferred from
385
+ .Fl o
386
+ extension:
387
+ .Bd -literal -offset indent
388
+ nowline roadmap.nowline -f pdf
389
+ nowline roadmap.nowline -o roadmap.pdf
390
+ nowline roadmap.nowline -f png --scale 3
391
+ .Ed
392
+ .Pp
393
+ Stream SVG to standard output, validate, and live-preview:
394
+ .Bd -literal -offset indent
395
+ nowline roadmap.nowline -o -
396
+ nowline roadmap.nowline --dry-run
397
+ nowline roadmap.nowline --serve -p 8080
398
+ .Ed
399
+ .Pp
400
+ Read from standard input; convert text \(<-\(-> JSON AST:
401
+ .Bd -literal -offset indent
402
+ cat roadmap.nowline | nowline -
403
+ nowline roadmap.nowline -f json -o roadmap.json
404
+ nowline roadmap.json -f nowline -o roadmap.nowline
405
+ .Ed
406
+ .Pp
407
+ Scaffold a new file:
408
+ .Bd -literal -offset indent
409
+ nowline --init
410
+ nowline --init my-project
411
+ .Ed
412
+ .Pp
413
+ PDF with explicit page geometry, byte-stable across machines:
414
+ .Bd -literal -offset indent
415
+ nowline roadmap.nowline -f pdf --page-size a4 \\
416
+ --orientation landscape --margin 0.5in --headless
417
+ .Ed
418
+ .Pp
419
+ Read errors and diagnostics in French while rendering whatever
420
+ locale the file declares:
421
+ .Bd -literal -offset indent
422
+ nowline roadmap.nowline --locale fr-CA
423
+ .Ed
424
+ .Pp
425
+ Set the rendered artifact's locale at the file level so it stays
426
+ French no matter who runs
427
+ .Nm :
428
+ .Bd -literal -offset indent
429
+ nowline v1 locale:fr-CA
430
+ .Ed
431
+ .Sh SEE ALSO
432
+ .Xr nowline 5
433
+ .Pq Sy man 5 nowline
434
+ .Pp
435
+ .Lk https://github.com/lolay/nowline "Source code, issues, and full DSL reference"
436
+ .Pp
437
+ The
438
+ .Sy specs/
439
+ directory in the source repository documents the DSL grammar
440
+ .Pq Pa specs/dsl.md ,
441
+ the layout / rendering pipeline
442
+ .Pq Pa specs/rendering.md ,
443
+ the CLI surface
444
+ .Pq Pa specs/cli.md ,
445
+ and OSS milestones
446
+ .Pq Pa specs/milestones.md .
447
+ .Sh AUTHORS
448
+ .An The Nowline Authors Aq Mt maintainers@nowline.io