@inditextech/docouture-cli 0.1.0-SNAPSHOT.40.1
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.
- package/build/bin.js +321 -0
- package/build/commands/build.js +22 -0
- package/build/commands/completion.js +69 -0
- package/build/commands/dev.js +67 -0
- package/build/commands/doctor.js +156 -0
- package/build/commands/eject.js +71 -0
- package/build/commands/new.js +512 -0
- package/build/commands/publish.js +111 -0
- package/build/commands/teardown.js +66 -0
- package/build/commands/upgrade.js +156 -0
- package/build/commands/version.js +60 -0
- package/build/lib/agents-md.js +67 -0
- package/build/lib/antora-log.js +36 -0
- package/build/lib/antora-yml.js +47 -0
- package/build/lib/args.js +26 -0
- package/build/lib/cli-context.js +17 -0
- package/build/lib/cli-info.js +20 -0
- package/build/lib/config-resolver.js +23 -0
- package/build/lib/copy-template.js +162 -0
- package/build/lib/debug-log.js +21 -0
- package/build/lib/detect-package-manager.js +79 -0
- package/build/lib/dev-server.js +337 -0
- package/build/lib/doctor-checks.js +240 -0
- package/build/lib/global-flags.js +31 -0
- package/build/lib/kroki-compose.js +54 -0
- package/build/lib/playbook-yml.js +90 -0
- package/build/lib/repo-root.js +21 -0
- package/build/lib/run-script.js +50 -0
- package/build/lib/theme.js +51 -0
- package/build/templates/agent-support/.claude/skills/docs-internals/SKILL.md +53 -0
- package/build/templates/agent-support/.claude/skills/docs-internals/reference/antora-extensions.md +54 -0
- package/build/templates/agent-support/.claude/skills/docs-internals/reference/naming.md +41 -0
- package/build/templates/agent-support/.claude/skills/docs-internals/reference/page-patterns.md +238 -0
- package/build/templates/agent-support/.claude/skills/docs-versioning.versioned/SKILL.md +37 -0
- package/build/templates/agent-support/.claude/skills/docs-versioning.versioned/reference/releasing.md +106 -0
- package/build/templates/agent-support/.claude/skills/documenting-your-repo/SKILL.md +55 -0
- package/build/templates/agent-support/.claude/skills/documenting-your-repo/reference/content-sourcing.md +55 -0
- package/build/templates/agent-support/.claude/skills/documenting-your-repo/reference/maintenance-loop.md +68 -0
- package/build/templates/agent-support/.claude/skills/documenting-your-repo/reference/structure-planning.md +102 -0
- package/build/templates/agent-support/.claude/skills/writing-docs-pages/SKILL.md +112 -0
- package/build/templates/agent-support/.claude/skills/writing-docs-pages/reference/docouture-blocks.md +170 -0
- package/build/templates/agent-support/.claude/skills/writing-docs-pages/reference/language-basics.md +402 -0
- package/build/templates/agent-support/.opencode/skills/docs-internals/SKILL.md +53 -0
- package/build/templates/agent-support/.opencode/skills/docs-internals/reference/antora-extensions.md +54 -0
- package/build/templates/agent-support/.opencode/skills/docs-internals/reference/naming.md +41 -0
- package/build/templates/agent-support/.opencode/skills/docs-internals/reference/page-patterns.md +238 -0
- package/build/templates/agent-support/.opencode/skills/docs-versioning.versioned/SKILL.md +37 -0
- package/build/templates/agent-support/.opencode/skills/docs-versioning.versioned/reference/releasing.md +106 -0
- package/build/templates/agent-support/.opencode/skills/documenting-your-repo/SKILL.md +55 -0
- package/build/templates/agent-support/.opencode/skills/documenting-your-repo/reference/content-sourcing.md +55 -0
- package/build/templates/agent-support/.opencode/skills/documenting-your-repo/reference/maintenance-loop.md +68 -0
- package/build/templates/agent-support/.opencode/skills/documenting-your-repo/reference/structure-planning.md +102 -0
- package/build/templates/agent-support/.opencode/skills/writing-docs-pages/SKILL.md +112 -0
- package/build/templates/agent-support/.opencode/skills/writing-docs-pages/reference/docouture-blocks.md +170 -0
- package/build/templates/agent-support/.opencode/skills/writing-docs-pages/reference/language-basics.md +402 -0
- package/build/templates/agent-support/AGENTS.md +72 -0
- package/build/templates/starter/antora-playbook.local.yml +99 -0
- package/build/templates/starter/antora-playbook.versioned.yml +167 -0
- package/build/templates/starter/antora-playbook.yml +189 -0
- package/build/templates/starter/gitignore +3 -0
- package/build/templates/starter/package.json +37 -0
- package/build/templates/starter/scripts/check-links.mjs +178 -0
- package/build/templates/starter/src/antora.yml +85 -0
- package/build/templates/starter/src/modules/ROOT/images/card-placeholder.png +0 -0
- package/build/templates/starter/src/modules/ROOT/images/feature-placeholder-dark.png +0 -0
- package/build/templates/starter/src/modules/ROOT/images/feature-placeholder.png +0 -0
- package/build/templates/starter/src/modules/ROOT/images/hero-placeholder.png +0 -0
- package/build/templates/starter/src/modules/ROOT/pages/index.adoc +124 -0
- package/build/templates/starter/src/modules/main/nav.adoc +19 -0
- package/build/templates/starter/src/modules/main/pages/app.adoc +5 -0
- package/build/templates/starter/src/modules/main/pages/architecture.adoc +6 -0
- package/build/templates/starter/src/modules/main/pages/changelog/index.adoc +9 -0
- package/build/templates/starter/src/modules/main/pages/components.adoc +701 -0
- package/build/templates/starter/src/modules/main/pages/contributing.adoc +6 -0
- package/build/templates/starter/src/modules/main/pages/getting-started.adoc +169 -0
- package/build/templates/starter/src/modules/main/pages/glossary.adoc +8 -0
- package/build/templates/starter/src/modules/main/pages/index.adoc +9 -0
- package/build/templates/starter/src/modules/main/pages/prerequisites.adoc +55 -0
- package/build/templates/starter/src/modules/main/pages/quickstart.adoc +21 -0
- package/build/templates/starter/src/modules/main/pages/release-notes/index.adoc +9 -0
- package/build/templates/starter/src/modules/main/pages/requirements.adoc +8 -0
- package/build/templates/starter/src/modules/main/pages/roadmap.adoc +4 -0
- package/build/templates/starter/src/modules/main/pages/structure.adoc +5 -0
- package/build/templates/starter/src/release-version.versioned +1 -0
- package/build/templates/starter/supplemental-ui/favicon.ico +0 -0
- package/build/templates/starter/supplemental-ui/product-logo-dark.png +0 -0
- package/build/templates/starter/supplemental-ui/product-logo.png +0 -0
- package/build/templates/workflows/docouture-kroki-cache-warm.yml +101 -0
- package/build/templates/workflows/docouture-pr-verify.yml +120 -0
- package/build/templates/workflows/docouture-publish-prerelease.yml +122 -0
- package/build/templates/workflows/docouture-publish.yml +138 -0
- package/build/templates/workflows/docouture-release-preview.yml +198 -0
- package/build/templates/workflows/docouture-release.yml +414 -0
- package/package.json +38 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# The four names that must agree
|
|
2
|
+
|
|
3
|
+
Four independent files each carry a name that has to match another one, or the site
|
|
4
|
+
builds to zero pages, or fails outright with "start page not found". `docouture doctor` checks
|
|
5
|
+
every pair automatically — run it after any rename.
|
|
6
|
+
|
|
7
|
+
| name | set in | must match |
|
|
8
|
+
| -------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
9
|
+
| component name | `docs/src/antora.yml` → `name` | the `<component>::` prefix of the playbook's `site.start_page` |
|
|
10
|
+
| start page | `antora-playbook.yml` → `site.start_page` | a real file under `modules/ROOT/pages/` (or whichever module it names) |
|
|
11
|
+
| content path | `antora-playbook.yml` → `content.sources[0].start_path` | where `docs/src/antora.yml` actually is, repo-root relative — `docs/src` for a site scaffolded as-is |
|
|
12
|
+
| package name | `docs/package.json` → `name` | no hard requirement on its own, but conventionally matches the component name — this is what `docouture new <name>` sets both to initially |
|
|
13
|
+
|
|
14
|
+
## Why each one matters
|
|
15
|
+
|
|
16
|
+
- **Component name vs. start page.** `site.start_page: my-site::index.adoc` names a
|
|
17
|
+
component (`my-site`) and a page (`index.adoc`) inside it. If `docs/src/antora.yml`'s
|
|
18
|
+
own `name:` says something else, Antora has no component by that name to serve the
|
|
19
|
+
start page from — the whole site 404s at `/`.
|
|
20
|
+
- **Start page vs. an actual file.** `site.start_page` must point at a page that exists
|
|
21
|
+
under that component's `pages/` tree (respecting the module, if the reference names
|
|
22
|
+
one: `my-site:some-module:index.adoc`). A typo here is "start page not found" at build
|
|
23
|
+
time, not a runtime 404.
|
|
24
|
+
- **Content path vs. where the descriptor really is.** `content.sources[0].start_path` is
|
|
25
|
+
repo-root relative. Move `docs/src/antora.yml` (or rename the outer `docs/` directory)
|
|
26
|
+
without updating `start_path` and Antora aggregates zero pages — no error, just an
|
|
27
|
+
empty site, because the path it looked in wasn't a component root at all.
|
|
28
|
+
- **Package name.** Not load-bearing for Antora itself, but drift here is a strong signal
|
|
29
|
+
something else drifted too (a manual rename that missed a file) — `docouture doctor` flags
|
|
30
|
+
it for that reason.
|
|
31
|
+
|
|
32
|
+
## Fixing a drift
|
|
33
|
+
|
|
34
|
+
Renaming the site after scaffolding means touching three of the four in lockstep:
|
|
35
|
+
|
|
36
|
+
1. `docs/src/antora.yml` → `name:`
|
|
37
|
+
2. `antora-playbook.yml` → `site.start_page`'s component prefix
|
|
38
|
+
3. `docs/package.json` → `name`
|
|
39
|
+
|
|
40
|
+
`content.sources[0].start_path` only needs touching if the _directory_ moved, not if just
|
|
41
|
+
the component's `name:` changed.
|
package/build/templates/agent-support/.claude/skills/docs-internals/reference/page-patterns.md
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Page patterns
|
|
2
|
+
|
|
3
|
+
Two recurring shapes: a home page, and a handful of content-page structures. Both are
|
|
4
|
+
patterns to copy, not a fixed schema Antora enforces — deviate when the content actually
|
|
5
|
+
calls for it.
|
|
6
|
+
|
|
7
|
+
## Home page
|
|
8
|
+
|
|
9
|
+
The `ROOT` module's `index.adoc`, rendered through the UI bundle's `home` layout
|
|
10
|
+
(`:page-layout: home`). Fixed section order — each block is optional, but when present
|
|
11
|
+
they appear in this order:
|
|
12
|
+
|
|
13
|
+
```adoc
|
|
14
|
+
= Home
|
|
15
|
+
:page-layout: home
|
|
16
|
+
:page-nav-module: <module> which module's nav the side menu shows,
|
|
17
|
+
since ROOT itself has none in a
|
|
18
|
+
multi-module site — see below
|
|
19
|
+
:description: One-line product description.
|
|
20
|
+
:page-tags: tag-one, tag-two
|
|
21
|
+
:page-action: Primary action
|
|
22
|
+
:page-action-url: module:page.adoc
|
|
23
|
+
:page-action-secondary: Secondary action
|
|
24
|
+
:page-action-secondary-url: module:other.adoc
|
|
25
|
+
:page-hero-image: /component/_images/hero.png
|
|
26
|
+
:page-hero-image-alt: Alt text for the hero image.
|
|
27
|
+
|
|
28
|
+
Intro paragraph, then a short bullet list of core capabilities.
|
|
29
|
+
|
|
30
|
+
== Get started
|
|
31
|
+
|
|
32
|
+
[cards,type=image-square,columns="1 s:2 m:4",width=container]
|
|
33
|
+
====
|
|
34
|
+
[card,subheader="Category"]
|
|
35
|
+
.xref:module:page.adoc[Entry point]
|
|
36
|
+
--
|
|
37
|
+
image::card-image.png["Alt text"]
|
|
38
|
+
|
|
39
|
+
Short description.
|
|
40
|
+
--
|
|
41
|
+
====
|
|
42
|
+
|
|
43
|
+
== Key capabilities
|
|
44
|
+
|
|
45
|
+
[feature-tabs]
|
|
46
|
+
====
|
|
47
|
+
[feature,label="Capability one"]
|
|
48
|
+
--
|
|
49
|
+
image::feature-one.png[Alt text]
|
|
50
|
+
|
|
51
|
+
Prose.
|
|
52
|
+
|
|
53
|
+
[.cta]
|
|
54
|
+
xref:module:page.adoc[Learn more]
|
|
55
|
+
--
|
|
56
|
+
====
|
|
57
|
+
|
|
58
|
+
== CTA
|
|
59
|
+
|
|
60
|
+
[cta]
|
|
61
|
+
====
|
|
62
|
+
Prose making the case for the action.
|
|
63
|
+
|
|
64
|
+
[.primary]
|
|
65
|
+
https://example.com[Primary link]
|
|
66
|
+
====
|
|
67
|
+
|
|
68
|
+
== FAQ
|
|
69
|
+
|
|
70
|
+
[accordion,aria-label="Frequently asked questions"]
|
|
71
|
+
--
|
|
72
|
+
.Question?
|
|
73
|
+
[%collapsible]
|
|
74
|
+
====
|
|
75
|
+
Answer.
|
|
76
|
+
====
|
|
77
|
+
--
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Block syntax for `[cards]`, `[feature-tabs]`, `[cta]` and `[accordion]` is in the
|
|
81
|
+
`writing-docs-pages` skill's `reference/docouture-blocks.md`; this file is the section-order
|
|
82
|
+
pattern, not the block reference.
|
|
83
|
+
|
|
84
|
+
## Content pages
|
|
85
|
+
|
|
86
|
+
Three shapes cover most content. Pick whichever fits, don't force every page into one.
|
|
87
|
+
|
|
88
|
+
**Overview page** — orients a reader before they dig into a module:
|
|
89
|
+
|
|
90
|
+
```adoc
|
|
91
|
+
= Module Name
|
|
92
|
+
:description: One-line description.
|
|
93
|
+
|
|
94
|
+
Intro paragraph.
|
|
95
|
+
|
|
96
|
+
[NOTE]
|
|
97
|
+
====
|
|
98
|
+
A callout worth surfacing immediately — a prerequisite, a link to a deeper page.
|
|
99
|
+
====
|
|
100
|
+
|
|
101
|
+
== Key features
|
|
102
|
+
|
|
103
|
+
* *Capability one* — with an xref to where it's covered in depth
|
|
104
|
+
* *Capability two*
|
|
105
|
+
|
|
106
|
+
== FAQ
|
|
107
|
+
|
|
108
|
+
.Question?
|
|
109
|
+
[%collapsible]
|
|
110
|
+
====
|
|
111
|
+
Answer.
|
|
112
|
+
====
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Note: an overview page's FAQ is usually a run of _ungrouped_ `[%collapsible]` blocks —
|
|
116
|
+
reach for `[accordion]` grouping (see `writing-docs-pages`) when the questions genuinely
|
|
117
|
+
belong together as one unit, the way the home page's FAQ does.
|
|
118
|
+
|
|
119
|
+
**Tutorial page** — a linear walkthrough:
|
|
120
|
+
|
|
121
|
+
```adoc
|
|
122
|
+
= Quickstart
|
|
123
|
+
:description: Get to a working example in minutes.
|
|
124
|
+
|
|
125
|
+
Intro paragraph.
|
|
126
|
+
|
|
127
|
+
== Prerequisites
|
|
128
|
+
|
|
129
|
+
Before you begin, ensure you meet the xref:module:requirements.adoc[requirements].
|
|
130
|
+
|
|
131
|
+
== Step by step
|
|
132
|
+
|
|
133
|
+
=== 1. First step
|
|
134
|
+
|
|
135
|
+
Prose. Alternative commands (package managers, etc.) go in a [tabs] block:
|
|
136
|
+
|
|
137
|
+
[tabs]
|
|
138
|
+
--
|
|
139
|
+
[tab,label="pnpm"]
|
|
140
|
+
****
|
|
141
|
+
[source,bash]
|
|
142
|
+
----
|
|
143
|
+
pnpm install
|
|
144
|
+
----
|
|
145
|
+
****
|
|
146
|
+
|
|
147
|
+
[tab,label="npm"]
|
|
148
|
+
****
|
|
149
|
+
[source,bash]
|
|
150
|
+
----
|
|
151
|
+
npm install
|
|
152
|
+
----
|
|
153
|
+
****
|
|
154
|
+
--
|
|
155
|
+
|
|
156
|
+
=== 2. Second step
|
|
157
|
+
|
|
158
|
+
. Ordered step
|
|
159
|
+
. Another ordered step
|
|
160
|
+
+
|
|
161
|
+
Attached content needs a `+` continuation.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Steps are plain nested `=== N. ...` subsections — there is no custom "steps" block here,
|
|
165
|
+
just section nesting.
|
|
166
|
+
|
|
167
|
+
**Reference/leaf page** — documents one thing (an API, a config option, a component):
|
|
168
|
+
|
|
169
|
+
```adoc
|
|
170
|
+
= Thing Name
|
|
171
|
+
:description: One-line description.
|
|
172
|
+
|
|
173
|
+
image::thing.png[Alt text]
|
|
174
|
+
|
|
175
|
+
Prose describing what it is and when to use it.
|
|
176
|
+
|
|
177
|
+
== Usage
|
|
178
|
+
|
|
179
|
+
=== Import it
|
|
180
|
+
|
|
181
|
+
[source,ts]
|
|
182
|
+
----
|
|
183
|
+
import { Thing } from "package"
|
|
184
|
+
----
|
|
185
|
+
|
|
186
|
+
=== Register it
|
|
187
|
+
|
|
188
|
+
[source,ts]
|
|
189
|
+
----
|
|
190
|
+
const instance = new Thing() // <1>
|
|
191
|
+
----
|
|
192
|
+
<1> Explanation of this step.
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Mono-module vs. multi-module
|
|
196
|
+
|
|
197
|
+
`docouture new` scaffolds a **mono-module** site by default: a single `modules/ROOT/` holding
|
|
198
|
+
both the landing page and all content, no `nav_modules:` in `docs/src/antora.yml`. This
|
|
199
|
+
is the right shape for a small site with one coherent topic.
|
|
200
|
+
|
|
201
|
+
A **multi-module** site splits content into several modules, each with its own
|
|
202
|
+
`nav.adoc`/`pages/`, switchable from the UI's module selector. Growing into this shape:
|
|
203
|
+
|
|
204
|
+
1. Create `docs/src/modules/<name>/{nav.adoc,pages/}` for each module.
|
|
205
|
+
2. List every module's `nav.adoc` under `docs/src/antora.yml`'s top-level `nav:` — but
|
|
206
|
+
**not** `ROOT`'s: in a multi-module site, `ROOT` holds only the landing page and is
|
|
207
|
+
deliberately absent from `nav:` (it has nothing to navigate; it borrows a module's own
|
|
208
|
+
nav via `:page-nav-module:` on its `index.adoc`, as shown above).
|
|
209
|
+
3. Describe each module under `nav_modules:` (a **list**, not a map — see
|
|
210
|
+
`reference/antora-extensions.md` for why) so the UI's switcher can show one module's
|
|
211
|
+
nav at a time with a title, description and icon:
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
nav:
|
|
215
|
+
- modules/framework/nav.adoc
|
|
216
|
+
- modules/sdk/nav.adoc
|
|
217
|
+
|
|
218
|
+
nav_modules:
|
|
219
|
+
- module: framework
|
|
220
|
+
title: Framework
|
|
221
|
+
description: One-line description of this module.
|
|
222
|
+
icon: design/grid-outlined
|
|
223
|
+
- module: sdk
|
|
224
|
+
title: SDK
|
|
225
|
+
description: One-line description of this module.
|
|
226
|
+
icon: actions/code-block-outlined
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
A module's own `nav.adoc` can use a bare, unlinked list item purely to group xrefs under
|
|
230
|
+
a heading with no page of its own:
|
|
231
|
+
|
|
232
|
+
```adoc
|
|
233
|
+
* Getting started
|
|
234
|
+
* xref:module:requirements.adoc[Requirements]
|
|
235
|
+
* xref:module:quickstart.adoc[Quickstart]
|
|
236
|
+
* Reference
|
|
237
|
+
* xref:module:api/index.adoc[API]
|
|
238
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: docs-versioning
|
|
3
|
+
description: "How to cut a release or a prerelease on this Antora documentation site, scaffolded with Versioned (Full History) mode: docouture version, docs/.release-version, and the docouture-release.yml workflow. USE WHEN bumping a version, cutting a release, configuring what a release tag contains, or asking how versioning works on this site. EXAMPLES: 'cut a release', 'bump the docs version', 'what does docs/.release-version do', 'how do I release a new version of the docs'."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Docs versioning (Versioned — Full History)
|
|
7
|
+
|
|
8
|
+
This site was scaffolded with `docouture new --mode versioned`. `main` is permanently the
|
|
9
|
+
prerelease/preview channel; every release is its own immutable `vX.Y.Z` git tag, and all
|
|
10
|
+
of them stay in the version dropdown forever — the shape to use when consumers pin an old
|
|
11
|
+
version and need its docs to keep existing unchanged.
|
|
12
|
+
|
|
13
|
+
See `reference/releasing.md` for the full mechanism (what each file says on `main` vs. on
|
|
14
|
+
a release tag, and what the release workflow actually does).
|
|
15
|
+
|
|
16
|
+
## The short version
|
|
17
|
+
|
|
18
|
+
- **`docs/src/antora.yml`** on `main` always says `version: prerelease`,
|
|
19
|
+
`prerelease: true` — never edit this by hand to "cut" a release; it doesn't change on
|
|
20
|
+
`main` at all. A release tag gets its _own_ copy of this file, with `version: '1.2.0'`,
|
|
21
|
+
`prerelease: false`.
|
|
22
|
+
- **`docouture version <value>`** is the one piece of this the CLI does for you locally — it
|
|
23
|
+
patches `docs/src/antora.yml`'s `version:`/`prerelease:` fields. Useful for testing a
|
|
24
|
+
version bump locally; the actual release workflow uses the same command internally.
|
|
25
|
+
- **`docs/.release-version`** holds the next planned version (e.g. `1.2.0`) as plain
|
|
26
|
+
text. It's what a merged, `docs/release`-labeled pull request uses to tell the release
|
|
27
|
+
workflow what to tag — review it like any other file in that PR's diff.
|
|
28
|
+
- **Cutting a release** happens through the `docouture-release.yml` GitHub Actions workflow
|
|
29
|
+
(`.github/workflows/`), not a local CLI command — see `reference/releasing.md` for why.
|
|
30
|
+
Trigger it either by:
|
|
31
|
+
- running it by hand (`workflow_dispatch`), giving the target version as input, or
|
|
32
|
+
- merging a pull request labeled `docs/release` into `main` — it reads the target
|
|
33
|
+
version from `docs/.release-version`.
|
|
34
|
+
- After a genuine new release (not a republish of an existing tag), the workflow bumps
|
|
35
|
+
`docs/.release-version` forward to the next patch version automatically and commits
|
|
36
|
+
that to `main` — you shouldn't normally need to edit it yourself except to set an
|
|
37
|
+
intentionally different next target (e.g. jumping to a new minor).
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# How releasing works
|
|
2
|
+
|
|
3
|
+
## What each file says, where
|
|
4
|
+
|
|
5
|
+
| name | set in | scope |
|
|
6
|
+
| ------------------- | -------------------------------------------- | ----------------------------------------------------------- |
|
|
7
|
+
| `version` | `docs/src/antora.yml` | per git ref — a ref's own checkout declares its own version |
|
|
8
|
+
| `prerelease` | `docs/src/antora.yml` | per git ref — `true`/`false` |
|
|
9
|
+
| `branches` / `tags` | `antora-playbook.yml` → `content.sources[0]` | which refs the _build_ aggregates content from at all |
|
|
10
|
+
|
|
11
|
+
`docs/src/antora.yml` is read once per matched ref — `main` and each release tag get
|
|
12
|
+
their own checkout, and therefore their own copy of that file, even though it's "the same
|
|
13
|
+
file" in the sense that both trace back to the same path in git history.
|
|
14
|
+
|
|
15
|
+
**On `main`:**
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
name: my-site
|
|
19
|
+
title: My Site
|
|
20
|
+
version: prerelease
|
|
21
|
+
prerelease: true
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**On a release tag** (e.g. checked out at `v1.2.0`):
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
name: my-site
|
|
28
|
+
title: My Site
|
|
29
|
+
version: '1.2.0'
|
|
30
|
+
prerelease: false
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Playbook**, `content.sources[0]`:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
content:
|
|
37
|
+
sources:
|
|
38
|
+
- url: ..
|
|
39
|
+
start_path: docs/src
|
|
40
|
+
branches: [main]
|
|
41
|
+
tags: ['v*']
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`tags: ['v*']` matches every tag shaped `v1.2.0`, `v2.0.0`, etc. — each becomes its own
|
|
45
|
+
version because each tag's own `docs/src/antora.yml` carries a different `version:`.
|
|
46
|
+
`branches: [main]` contributes the single prerelease version on top. How many past
|
|
47
|
+
versions show up is purely a function of how many tags exist and match the glob — delete
|
|
48
|
+
or rename a tag and it drops out of the aggregate on the next build.
|
|
49
|
+
|
|
50
|
+
## Cutting a release: `docouture-release.yml`
|
|
51
|
+
|
|
52
|
+
**Triggers**, both deliberate acts rather than a side effect of an ordinary push:
|
|
53
|
+
|
|
54
|
+
- `workflow_dispatch` — run by hand from the Actions tab. Its `version` input must be a
|
|
55
|
+
real version (e.g. `1.2.0`) — the workflow fails before touching anything if it's left
|
|
56
|
+
at the default (that default is meant for a standalone-mode site, which this isn't).
|
|
57
|
+
- `pull_request`, `types: [closed]`, `branches: ['main*']` — fires automatically when a
|
|
58
|
+
pull request merges into a branch matching that glob, but only actually proceeds when
|
|
59
|
+
the PR was genuinely merged **and** carries the `docs/release` label. Any other close
|
|
60
|
+
(not merged, or merged without the label) is a no-op run.
|
|
61
|
+
|
|
62
|
+
**Where the target version comes from** differs by trigger: `workflow_dispatch` has a
|
|
63
|
+
form field for it; the `pull_request` trigger has none, so it reads
|
|
64
|
+
`docs/.release-version` instead — the plain-text file committed as part of the
|
|
65
|
+
merged PR, containing just the target version.
|
|
66
|
+
|
|
67
|
+
**The release itself**: `docouture version <value>` patches `docs/src/antora.yml` on a
|
|
68
|
+
one-off commit built on top of `main`'s current tip, `git tag v<value>` is created there,
|
|
69
|
+
and the tag is pushed — a GitHub Release is also created from it. `main` itself is never
|
|
70
|
+
advanced or touched by this step; its own `docs/src/antora.yml` permanently keeps saying
|
|
71
|
+
`version: prerelease`, `prerelease: true`.
|
|
72
|
+
|
|
73
|
+
**Every release tag is force-recreated if it already exists** — a republish (fixing a
|
|
74
|
+
released version, e.g. a docs typo caught after the tag went out) is a deliberate,
|
|
75
|
+
ordinary act, not something needing a separate flag.
|
|
76
|
+
|
|
77
|
+
## `docs/.release-version` after a release
|
|
78
|
+
|
|
79
|
+
Nothing clears it — it's bumped forward instead, except on a republish. On a genuine
|
|
80
|
+
forward release (the target tag was new), a final step in the workflow advances the file
|
|
81
|
+
to the next patch version and commits that directly to `main` — so the file always holds
|
|
82
|
+
a sane next target rather than a stale, already-released value. This step is **skipped**
|
|
83
|
+
on a republish (the target tag already existed): that run's target version was typically
|
|
84
|
+
already superseded by whatever the file currently holds as the next planned target, so
|
|
85
|
+
bumping forward from the republished version would clobber that already-planned value.
|
|
86
|
+
|
|
87
|
+
## Why there's no `docouture release` command
|
|
88
|
+
|
|
89
|
+
`docouture-release.yml`'s own steps depend on CI-only concerns a portable local CLI command
|
|
90
|
+
would either have to assume or re-implement badly: a token with `contents: write` +
|
|
91
|
+
`pull-requests: write`, reading which label a merged PR carried, creating a GitHub
|
|
92
|
+
Release. None of that has a sane local equivalent. The CLI's release-adjacent surface
|
|
93
|
+
stays deliberately narrow: `docouture version` is the one piece of actual logic the workflow
|
|
94
|
+
reuses locally-testable, because patching `docs/src/antora.yml`'s fields genuinely is
|
|
95
|
+
portable; everything else about _cutting_ a release stays in the workflow.
|
|
96
|
+
|
|
97
|
+
## URL routing
|
|
98
|
+
|
|
99
|
+
This site gets a component-scoped version segment for free — `/my-site/1.2.0/…`,
|
|
100
|
+
`/my-site/prerelease/…` — Antora always includes the version in the URL unless told
|
|
101
|
+
otherwise. `urls.latest_version_segment: latest` (an optional playbook key, not set by
|
|
102
|
+
default here) gives whichever version Antora computes as "latest" an _additional_, stable
|
|
103
|
+
alias URL (`/my-site/latest/…`) alongside its real version path — useful when most inbound
|
|
104
|
+
links should track "whatever the newest release is" without editing them on every tag.
|
|
105
|
+
"Latest" is Antora's own semver-aware computation among non-prerelease versions, not
|
|
106
|
+
something either file above sets directly.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documenting-your-repo
|
|
3
|
+
description: "How to plan, populate and maintain documentation for this repo end-to-end — deciding what modules/pages should exist, sourcing content from wherever it actually lives (existing docs, README, code comments, API signatures, CLI definitions, config schemas — no fixed assumption about location), and keeping docs in sync as the repo grows. USE WHEN starting documentation from scratch, deciding what to document, checking whether docs coverage is complete, or documenting a newly added feature. EXAMPLES: 'build docs for this repo', 'what should my docs cover', 'is anything undocumented', 'document this new feature', 'my docs feel out of date'."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Documenting your repo
|
|
7
|
+
|
|
8
|
+
This is the entry point for turning an empty (or half-empty) `docs/` site — scaffolded by
|
|
9
|
+
`docouture new` — into real, maintained documentation. It's a planning and orchestration
|
|
10
|
+
skill, not a syntax reference: once a decision is made here, it hands off to the two
|
|
11
|
+
mechanics skills:
|
|
12
|
+
|
|
13
|
+
- **`docs-internals`** — once you know a module/page needs to exist, this is how
|
|
14
|
+
`antora.yml`, `nav.adoc` and the home-page pattern actually work.
|
|
15
|
+
- **`writing-docs-pages`** — once you know what a page should say, this is the AsciiDoc
|
|
16
|
+
syntax, xrefs and this site's custom blocks (`[tabs]`, `[cards]`, `[accordion]`, …).
|
|
17
|
+
|
|
18
|
+
Use this skill repeatedly, not just once — it's the loop that keeps documentation honest
|
|
19
|
+
as the repo evolves, not a one-shot wizard that's done after the first pass.
|
|
20
|
+
|
|
21
|
+
- `reference/structure-planning.md` — mono- vs. multi-module decision, the module menu,
|
|
22
|
+
signals worth checking in the repo to shape it, and the home page's special (structure
|
|
23
|
+
now, content later) treatment.
|
|
24
|
+
- `reference/content-sourcing.md` — where content comes from when nothing is prescribed:
|
|
25
|
+
priority order across existing docs, README/CONTRIBUTING, and the repo's code itself
|
|
26
|
+
(exports, doc-comments, CLI definitions, config schemas, tests-as-examples) — including
|
|
27
|
+
the all-code, zero-prose case.
|
|
28
|
+
- `reference/maintenance-loop.md` — how to re-enter this skill later: the `AGENTS.md`
|
|
29
|
+
documentation-state ledger, what counts as drift, and when to revisit the home page.
|
|
30
|
+
|
|
31
|
+
## The loop, in short
|
|
32
|
+
|
|
33
|
+
1. **Base check** — confirm identity/branding `docouture new` already seeded (title, product
|
|
34
|
+
name, description, favicon, light/dark logo). Look for existing brand assets elsewhere
|
|
35
|
+
in the repo before asking the user to supply new ones.
|
|
36
|
+
2. **Structure planning** — decide mono- vs. multi-module and which modules exist. See
|
|
37
|
+
`reference/structure-planning.md`. The home page's slot is asserted here — its content
|
|
38
|
+
is not, see below.
|
|
39
|
+
3. **Content sourcing & drafting** — for every planned page, find where its content
|
|
40
|
+
actually lives (don't assume — a repo with no `README` at all still has an API surface,
|
|
41
|
+
a CLI, a config schema) and draft it. See `reference/content-sourcing.md`. Draft a rough
|
|
42
|
+
home page early from whatever one-line description exists; treat it as unfinished.
|
|
43
|
+
4. **Maintenance loop** — re-run this skill whenever code grows a new surface (exported
|
|
44
|
+
function, CLI command, config key) with nothing documenting it, whenever nav no longer
|
|
45
|
+
matches the modules that exist, or periodically to refresh the home page once enough
|
|
46
|
+
content exists to summarize well. See `reference/maintenance-loop.md`.
|
|
47
|
+
|
|
48
|
+
## What this skill does not opinionate about
|
|
49
|
+
|
|
50
|
+
Where in the repo the "real" information lives is entirely up to the repo itself — a
|
|
51
|
+
doc-comment, a type signature, a schema file, a test, a `--help` string, an existing
|
|
52
|
+
`README.md`, are all fair game and equally valid sources. This skill does not prescribe a
|
|
53
|
+
required location or format for source material; it only prescribes _that_ every
|
|
54
|
+
documented surface is traceable to something real, and _where in `AGENTS.md`_ that
|
|
55
|
+
traceability is recorded (see `reference/maintenance-loop.md`).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Content sourcing
|
|
2
|
+
|
|
3
|
+
Once the structure is planned (`structure-planning.md`), every page needs real content
|
|
4
|
+
from somewhere. This is deliberately not prescriptive about _where_ — a repo with a rich
|
|
5
|
+
`docs/` wiki export and a repo with nothing but source code both need to end up
|
|
6
|
+
documented, through different paths.
|
|
7
|
+
|
|
8
|
+
## Priority order
|
|
9
|
+
|
|
10
|
+
For each planned page, look in this order and use the first thing that actually exists:
|
|
11
|
+
|
|
12
|
+
1. **Existing docs** — a pre-existing `docs/` tree, wiki export, Notion/Confluence dump
|
|
13
|
+
committed somewhere, or hand-written prose already sitting in the repo. Adapt it into
|
|
14
|
+
the page structure/blocks from `writing-docs-pages`, don't just paste it verbatim if the
|
|
15
|
+
shape doesn't fit (e.g. a wall of prose where a `[tabs]` or ordered steps would serve
|
|
16
|
+
the reader better).
|
|
17
|
+
2. **README / CONTRIBUTING / inline package docs** — often covers getting-started and
|
|
18
|
+
contributing ground well, rarely covers the full API/reference surface.
|
|
19
|
+
3. **The code itself, directly** — when neither of the above exists, or doesn't cover a
|
|
20
|
+
given surface, read the actual repo to derive the page. This is the case worth
|
|
21
|
+
designing for, not treating as a fallback edge case:
|
|
22
|
+
- exported functions/classes and their doc-comments (JSDoc/TSDoc, docstrings, godoc,
|
|
23
|
+
rustdoc, whatever the language uses) → `reference` pages, one per public symbol or
|
|
24
|
+
coherent group of them
|
|
25
|
+
- CLI command definitions, `--help` output, argument parsers → `guides`/`reference`
|
|
26
|
+
entries for CLI usage
|
|
27
|
+
- config schema files, typed config objects, environment variable reads in code →
|
|
28
|
+
`configuration` pages
|
|
29
|
+
- OpenAPI/GraphQL/protobuf definitions → `reference` pages, one per
|
|
30
|
+
endpoint/type/service or a sensible grouping of them
|
|
31
|
+
- tests and examples in the repo → real, working usage patterns worth lifting into a
|
|
32
|
+
tutorial or reference page's "Usage" section, since they're the most likely to be
|
|
33
|
+
accurate and up to date
|
|
34
|
+
4. **Nothing found** — write the page as an explicit stub: enough structure to be useful
|
|
35
|
+
(title, one-line description, an empty section per anticipated topic) plus a visible
|
|
36
|
+
`TODO` note of what's missing and what would need to be true in the repo for the note to
|
|
37
|
+
go away (e.g. "TODO: document once this CLI subcommand exists / is exported").
|
|
38
|
+
|
|
39
|
+
Don't force step 3 to imitate step 1/2's tone if there's nothing to imitate — a
|
|
40
|
+
code-derived reference page reads differently from a hand-written guide, and that's fine.
|
|
41
|
+
|
|
42
|
+
## No fixed assumption about location
|
|
43
|
+
|
|
44
|
+
Never assume "the code lives here" or "the API surface is always in `src/`" — every repo
|
|
45
|
+
is laid out differently. Look at what's actually there (package manifests, build config,
|
|
46
|
+
directory structure, language-appropriate entry points) rather than pattern-matching
|
|
47
|
+
against one expected shape.
|
|
48
|
+
|
|
49
|
+
## Recording what a page is based on
|
|
50
|
+
|
|
51
|
+
Once a page is drafted from the code itself (step 3 above, not steps 1/2/4), record it in
|
|
52
|
+
`AGENTS.md`'s documentation-state ledger — see `maintenance-loop.md` for the exact shape.
|
|
53
|
+
This is what lets a later pass tell "still matches the code" apart from "needs a look"
|
|
54
|
+
without re-deriving every page from scratch each time, and what stops a later pass from
|
|
55
|
+
overwriting a page a human has since hand-edited.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Maintenance loop
|
|
2
|
+
|
|
3
|
+
This skill is meant to be re-entered, not run once and abandoned. This file is how a later
|
|
4
|
+
pass picks up where an earlier one left off, without re-deriving everything from zero.
|
|
5
|
+
|
|
6
|
+
## The documentation-state ledger, in `AGENTS.md`
|
|
7
|
+
|
|
8
|
+
`AGENTS.md` (this repo's own copy, at the repository root) carries a `## Documentation
|
|
9
|
+
state` section — a table of every page this skill has drafted from the code itself, what
|
|
10
|
+
it was derived from, and its last-known status:
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
## Documentation state
|
|
14
|
+
|
|
15
|
+
<!-- maintained by the documenting-your-repo skill — do not hand-edit structure, only content -->
|
|
16
|
+
|
|
17
|
+
| doc page | derived from | status |
|
|
18
|
+
| --------------------- | ------------------------- | ------- |
|
|
19
|
+
| reference/client.adoc | src/api/client.ts exports | current |
|
|
20
|
+
| guides/cli-usage.adoc | src/cli/*.ts command defs | current |
|
|
21
|
+
| index.adoc (home) | manual (hand-written) | — |
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Rules for this table:
|
|
25
|
+
|
|
26
|
+
- Add a row **only** for pages sourced from the repo's code (content-sourcing.md's step
|
|
27
|
+
3). A page sourced from existing docs/README, or written by hand, gets `derived from:
|
|
28
|
+
manual` and `status: —` — this marks it as human-owned; never regenerate it from code
|
|
29
|
+
without being asked.
|
|
30
|
+
- `derived from` should be specific enough that a future pass can check whether it's still
|
|
31
|
+
accurate — a file path, an export list, a schema file, a command name — not just "the
|
|
32
|
+
code".
|
|
33
|
+
- `status` is one of: `current` (checked recently, still matches), `stale` (the source has
|
|
34
|
+
changed since this page was last touched), `new` (a source exists with no page yet — see
|
|
35
|
+
below).
|
|
36
|
+
- This skill is the only thing that edits this section. If a human directly edits a
|
|
37
|
+
code-derived page's prose, that's fine and expected — but flip its `status` to something
|
|
38
|
+
worth re-checking next time rather than silently trusting the table, since the ledger
|
|
39
|
+
itself won't have seen the edit.
|
|
40
|
+
|
|
41
|
+
## What counts as drift, on re-entry
|
|
42
|
+
|
|
43
|
+
On each re-entry, before drafting anything new:
|
|
44
|
+
|
|
45
|
+
1. Re-scan the repo's surface the same way `content-sourcing.md` step 3 describes —
|
|
46
|
+
exports, CLI commands, config keys, API definitions.
|
|
47
|
+
2. Diff that surface against the ledger's `derived from` entries: a new export/command/key
|
|
48
|
+
with no matching row is `new` (undocumented); a row whose source has materially changed
|
|
49
|
+
(signature changed, command removed, config key renamed) is `stale`.
|
|
50
|
+
3. Also check `nav.adoc` against the modules/pages that actually exist — a module or page
|
|
51
|
+
present in the ledger or on disk but absent from `nav.adoc` is unreachable, not just
|
|
52
|
+
undocumented (see `docs-internals`).
|
|
53
|
+
4. Handle `new` and `stale` rows before anything else; leave `current` and `manual` rows
|
|
54
|
+
alone.
|
|
55
|
+
|
|
56
|
+
## Revisiting the home page
|
|
57
|
+
|
|
58
|
+
The home page is drafted early (rough) and deliberately left unfinished — see
|
|
59
|
+
`structure-planning.md`. Revisit and tighten it:
|
|
60
|
+
|
|
61
|
+
- once every planned module/page from the first structure pass exists with real content,
|
|
62
|
+
not stubs, or
|
|
63
|
+
- whenever a re-entry adds or removes a whole module (the home page's "key capabilities"
|
|
64
|
+
section should reflect what the site now actually covers).
|
|
65
|
+
|
|
66
|
+
There is no ledger row requirement for the home page itself when it's substantially
|
|
67
|
+
hand-written — mark it `manual` once someone has actually rewritten its prose, same as any
|
|
68
|
+
other hand-authored page.
|