Skip to content

Commit e2b33a2

Browse files
committed
sanitize
1 parent a36c0dd commit e2b33a2

1 file changed

Lines changed: 53 additions & 59 deletions

File tree

skills/doc-check/SKILL.md

Lines changed: 53 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ Check merged PRs in a product's source repo(s) for customer-facing changes. For
77
directory to assess whether coverage already exists, is stale, or is missing entirely. Produce an actionable report,
88
then optionally generate a doc draft.
99

10+
## Setup
11+
12+
Before using this skill, configure it for your organization:
13+
14+
1. **Update the product registry** below with your products, source repos, auth method, and local doc paths.
15+
2. **Set auth environment variables** as needed (see Auth section below).
16+
3. **Update the style guide reference** in step 7 to point to your own documentation style guide.
17+
1018
## Invocation
1119

1220
```
@@ -18,22 +26,20 @@ then optionally generate a doc draft.
1826

1927
- `status` — show a summary table of all products and their last scan results, then exit. Does not fetch any PRs or
2028
update state. Regenerates `STATUS.md` from existing output files.
21-
- `<product>` is one of: `zrok`, `ziti-doc`, `zlan`, `k8s-on-prem-installations`, `platform-doc`, `zrok-connector`
29+
- `<product>` is a product name defined in your registry below
2230
- `--since` overrides the last-checked date from state
23-
- `--draft <owner/repo#PR>` skips the scan and generates a doc draft for a specific PR (e.g., `--draft openziti/ziti#4821`)
31+
- `--draft <owner/repo#PR>` skips the scan and generates a doc draft for a specific PR
2432

2533
## Product registry
2634

2735
Each product has one or more **source repos** (scanned for PRs) and one **local doc path** (searched for coverage).
36+
Replace the example rows below with your own products.
2837

29-
| Product | Source repos | Auth | Local doc path |
30-
|---------------------------|-------------------------------------------------------|-------------------|---------------------------------------------------------|
31-
| zrok | openziti/zrok | gh CLI (public) | /root/nf-docs/zrok/website/docs |
32-
| ziti-doc | openziti/ziti, openziti/ziti-console | gh CLI (public) | /root/nf-docs/ziti-doc/docusaurus/docs |
33-
| zlan | netfoundry/zlan | gh CLI (private) | /root/nf-docs/zlan/docusaurus/docs |
34-
| k8s-on-prem-installations | netfoundry/k8s-on-prem-installations | BB_EMAIL+BB_TOKEN | /root/nf-docs/k8s-on-prem-installations/docusaurus/docs |
35-
| platform-doc | netfoundry/netfoundry-ui, netfoundry/core-management, netfoundry/gateway, netfoundry/customer-connect *(in dev)*, netfoundry/integrations, netfoundry/network-auth | BB_EMAIL+BB_TOKEN | /root/nf-docs/platform-doc/docusaurus/docs |
36-
| zrok-connector | netfoundry/zrok-connector | BB_EMAIL+BB_TOKEN | /root/nf-docs/zrok-connector/docusaurus/docs |
38+
| Product | Source repos | Auth | Local doc path |
39+
|------------|-----------------------|--------------|---------------------------------------|
40+
| product-a | your-org/repo-a | gh CLI | /path/to/product-a/docs |
41+
| product-b | your-org/repo-b | GH_TOKEN | /path/to/product-b/docs |
42+
| product-c | your-org/repo-c | BB_EMAIL+BB_TOKEN | /path/to/product-c/docs |
3743

3844
**Note on source repos vs. doc repos**: The source repos are the *product code* repositories — that's where
3945
customer-facing changes originate. The local doc path is a separate, locally cloned *documentation* repository used
@@ -45,16 +51,17 @@ Use with `BB_EMAIL` (the account's email address) as basic auth credentials.
4551

4652
**GitHub auth**: Use the `gh` CLI. Run `gh auth status` to confirm it's authenticated before running a scan.
4753
If `gh` is not available or the user explicitly requests token-based fallback, use a personal access token via
48-
`-H "Authorization: token $GH_TOKEN"` in curl — but prefer `gh`.
54+
`GH_TOKEN` env variable in curl — but prefer `gh`. For private repos that require a specific token, set the
55+
token variable name in the Auth column of your registry and use `GH_TOKEN=<your-token-variable>` when calling `gh`.
4956

5057
## State file
5158

5259
State is stored at `~/.claude/doc-check-state.json`. One entry per **product** (not per source repo). Format:
5360

5461
```json
5562
{
56-
"zrok": { "last_checked": "2026-03-20T15:00:00Z" },
57-
"ziti-doc": { "last_checked": "2026-03-25T17:00:00Z" }
63+
"product-a": { "last_checked": "2026-03-20T15:00:00Z" },
64+
"product-b": { "last_checked": "2026-03-25T17:00:00Z" }
5865
}
5966
```
6067

@@ -103,30 +110,21 @@ Filter results in Python to PRs where `mergedAt` is after the since date (when d
103110
```bash
104111
# Date-based:
105112
curl -s -u "$BB_EMAIL:$BB_TOKEN" \
106-
"https://api.bitbucket.org/2.0/repositories/netfoundry/<slug>/pullrequests?state=MERGED&sort=-updated_on&pagelen=50"
113+
"https://api.bitbucket.org/2.0/repositories/<your-org>/<slug>/pullrequests?state=MERGED&sort=-updated_on&pagelen=50"
107114

108115
# First run: fetch last 5 only
109116
curl -s -u "$BB_EMAIL:$BB_TOKEN" \
110-
"https://api.bitbucket.org/2.0/repositories/netfoundry/<slug>/pullrequests?state=MERGED&sort=-updated_on&pagelen=5"
117+
"https://api.bitbucket.org/2.0/repositories/<your-org>/<slug>/pullrequests?state=MERGED&sort=-updated_on&pagelen=5"
111118
```
112119

113120
Filter to PRs where `updated_on` is after the since date (when date-based).
114121

115122
**When a product has multiple source repos**, collect all results into one list, then apply the 10-PR hard cap to the
116123
combined total (most recent first across repos). In the report, prefix each PR with its source repo:
117-
`openziti/ziti#4821`, `openziti/ziti-console#512`, etc.
118-
119-
**Special case — `netfoundry/netfoundry-ui`**: This is a monorepo hosting both the NF Console UI (V7/V8) and the
120-
Frontdoor UI. When scanning it, read the PR title, description, and diff to determine which product it belongs to
121-
before assessing doc coverage:
122-
123-
- PRs touching Frontdoor UI code → cross-reference against `zrok-connector/docusaurus/docs`
124-
- PRs touching NF Console UI code → cross-reference against `platform-doc/docusaurus/docs`
125-
- PRs touching shared infrastructure (build tooling, design system, auth scaffolding) → mark as **internal**
124+
`your-org/repo-a#42`, `your-org/repo-b#17`, etc.
126125

127-
When running `/doc-check platform-doc`, skip any `netfoundry-ui` PRs that are clearly Frontdoor-only — note them in
128-
the report as "Skipped (Frontdoor — run `/doc-check zrok-connector`)". When running `/doc-check zrok-connector`,
129-
apply the same logic in reverse.
126+
**Monorepos**: If a source repo hosts multiple products, read the PR title, description, and diff to determine which
127+
product it belongs to before assessing doc coverage. Mark PRs for other products as skipped with a note.
130128

131129
### 3. Assess each PR: customer-facing or internal?
132130

@@ -145,7 +143,7 @@ response (fields `source.commit.hash` and `destination.commit.hash`) and constru
145143

146144
```bash
147145
curl -s -u "$BB_EMAIL:$BB_TOKEN" \
148-
"https://api.bitbucket.org/2.0/repositories/netfoundry/<slug>/diff/netfoundry/<slug>:<src_hash>%0D<dst_hash>?from_pullrequest_id=<id>&topic=true"
146+
"https://api.bitbucket.org/2.0/repositories/<your-org>/<slug>/diff/<your-org>/<slug>:<src_hash>%0D<dst_hash>?from_pullrequest_id=<id>&topic=true"
149147
```
150148

151149
Mark as **customer-facing** (proceed to step 4) if the diff contains:
@@ -190,30 +188,30 @@ Dismiss **covered** PRs from the flagged list entirely (move them to a "no actio
190188
### 5. Output the report
191189

192190
```
193-
## doc-check: ziti-doc (since 2026-03-18)
191+
## doc-check: product-a (since 2026-03-18)
194192
195-
Sources: openziti/ziti (6 PRs), openziti/ziti-console (4 PRs) — 10 total · 2 need doc work · 1 already covered · 7 skipped (internal)
193+
Sources: your-org/repo-a (6 PRs), your-org/repo-b (4 PRs) — 10 total · 2 need doc work · 1 already covered · 7 skipped (internal)
196194
197195
### Needs doc work
198196
199-
**openziti/ziti#4821 — Add --output flag to ziti edge list** (merged 2026-03-20) · MISSING
200-
- New `--output json|yaml|table` flag on all `ziti edge list` subcommands
197+
**your-org/repo-a#42 — Add --output flag to CLI** (merged 2026-03-20) · MISSING
198+
- New `--output json|yaml|table` flag on all list subcommands
201199
- No existing doc found for output formatting options
202200
- Suggested location: reference/cli section
203-
- `/doc-check ziti-doc --draft openziti/ziti#4821` to generate a draft
201+
- `/doc-check product-a --draft your-org/repo-a#42` to generate a draft
204202
205-
**openziti/ziti-console#512 — Dark mode toggle** (merged 2026-03-19) · STALE
206-
- New dark/light mode toggle in ZAC settings panel
207-
- Existing doc: `reference/zac-overview.md` — covers UI layout but not appearance settings
208-
- `/doc-check ziti-doc --draft openziti/ziti-console#512` to generate a draft
203+
**your-org/repo-b#17 — Dark mode toggle** (merged 2026-03-19) · STALE
204+
- New dark/light mode toggle in settings panel
205+
- Existing doc: `reference/ui-overview.md` — covers UI layout but not appearance settings
206+
- `/doc-check product-a --draft your-org/repo-b#17` to generate a draft
209207
210208
### Already covered
211-
- openziti/ziti#4815 — TLS cert rotation: `operations/certificates.md` covers this area and appears current
209+
- your-org/repo-a#38 — TLS cert rotation: `operations/certificates.md` covers this area and appears current
212210
213211
### Skipped (internal)
214-
- openziti/ziti#4818 — Fix race condition in router reconnect (internal bug fix)
215-
- openziti/ziti#4816 — Go 1.22 bump (build tooling)
216-
- openziti/ziti-console#509 — Cypress test updates (tests only)
212+
- your-org/repo-a#40 — Fix race condition in reconnect logic (internal bug fix)
213+
- your-org/repo-a#39 — Go 1.22 bump (build tooling)
214+
- your-org/repo-b#15 — Cypress test updates (tests only)
217215
```
218216

219217
### 6. Offer to draft
@@ -230,11 +228,10 @@ When `--draft <owner/repo#PR>` is passed:
230228
3. If the status was **missing**, write a new file from scratch
231229
4. Identify what changed from a user perspective
232230
5. Determine the appropriate doc type (how-to, reference, concept explanation) using Diátaxis
233-
6. Write the draft following the NetFoundry style guide:
231+
6. Write the draft following your organization's documentation style guide:
234232
- Sentence-style headers; imperative verb phrases for how-to titles
235-
- Active voice, "you/your", no "please"
233+
- Active voice, second person ("you/your")
236234
- Backticks for CLI flags, commands, config keys, code tokens
237-
- Short descriptive alt text for images (no underscores, no filenames as alt text)
238235
- 120-character line length limit
239236
7. Present the full draft inline in the terminal, followed by the suggested file path, then prompt the user with these
240237
options:
@@ -249,13 +246,13 @@ When `--draft <owner/repo#PR>` is passed:
249246

250247
#### Drafts folder
251248

252-
Drafts are saved to `output/<product>/drafts/` under the doc-check output directory:
249+
Drafts are saved to `output/<product>/drafts/` under the doc-check skill folder:
253250

254251
```
255-
/root/nf-docs/.claude/skills/doc-check/output/<product>/drafts/<repo>-<PR>-<slug>.md
252+
<skills-dir>/doc-check/output/<product>/drafts/<repo>-<PR>-<slug>.md
256253
```
257254

258-
Example: `output/platform-doc/drafts/netfoundry-ui-2479-download-usage-report.md`
255+
Example: `output/product-a/drafts/repo-a-42-add-output-flag.md`
259256

260257
Each draft file includes a frontmatter block for traceability:
261258

@@ -275,7 +272,7 @@ for the product that was checked (one entry per product, shared across all its s
275272
### 9. Save output
276273

277274
After completing a scan (not `--draft` mode), save the full report to a dated file in a per-product subdirectory
278-
under `/root/nf-docs/.claude/skills/doc-check/output/<product>/`. Create the directory if it doesn't exist.
275+
under `<skills-dir>/doc-check/output/<product>/`. Create the directory if it doesn't exist.
279276

280277
Filename format: `YYYY-MM-DD.md` (use today's date). If a file with that name already exists, append a counter:
281278
`YYYY-MM-DD-2.md`, etc.
@@ -288,10 +285,10 @@ Write the report in the same markdown format shown in step 5, with a one-line he
288285

289286
### 10. Update STATUS.md
290287

291-
After saving the report, regenerate `STATUS.md` at the root of the skills/doc-check folder:
288+
After saving the report, regenerate `STATUS.md` at the root of the doc-check skill folder:
292289

293290
```
294-
/root/nf-docs/.claude/skills/doc-check/STATUS.md
291+
<skills-dir>/doc-check/STATUS.md
295292
```
296293

297294
To build it, scan the output directory for all products. For each product subdirectory, find the most recent dated
@@ -303,21 +300,18 @@ report file and parse it for:
303300
- **Skipped**: count of PRs in the "Skipped (internal)" section
304301

305302
Produce a table sorted by last-checked date descending (most recently checked first), followed by any products in the
306-
registry that have no output yet (listed as "Never run"):
303+
registry that have no output yet (listed as "never"):
307304

308305
```markdown
309306
# Doc coverage status
310307

311308
Last updated: YYYY-MM-DD
312309

313-
| Product | Last checked | Needs work | Covered | Skipped |
314-
|:--------------------------|:-------------|:-----------|:--------|:--------|
315-
| zrok | 2026-04-06 | 2 | 1 | 5 |
316-
| platform-doc | 2026-04-01 | 0 | 3 | 8 |
317-
| ziti-doc | 2026-03-25 | 1 | 2 | 6 |
318-
| zlan | never ||||
319-
| k8s-on-prem-installations | never ||||
320-
| zrok-connector | never ||||
310+
| Product | Last checked | Needs work | Covered | Skipped |
311+
|:----------|:-------------|:-----------|:--------|:--------|
312+
| product-a | 2026-04-06 | 2 | 1 | 5 |
313+
| product-b | 2026-04-01 | 0 | 3 | 8 |
314+
| product-c | never ||||
321315
```
322316

323317
Overwrite `STATUS.md` completely on each run — it is always regenerated from the output files, never manually edited.

0 commit comments

Comments
 (0)