mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-16 01:02:13 +08:00
* feat(document-release): add Diataxis coverage map, diagram drift detection, and docs debt tracking Inspired by @doodlestein's documentation-website skill. Three key ideas incorporated: 1. Step 1.5: Coverage Map (Blast-Radius Analysis) — before editing any docs, scan the diff for new public surface and assess documentation coverage across Diataxis quadrants (reference/how-to/tutorial/explanation). Flags gaps without auto-generating content. 2. Architecture diagram drift detection — extracts entity names from ASCII/Mermaid diagrams and cross-references against the diff to catch stale diagrams. 3. Enhanced CHANGELOG sell test — Diataxis rubric scoring (0-3) replaces the subjective 'would a user want this?' check. 4. Documentation Debt section in PR body — surfaces coverage gaps and diagram drift as actionable items for future work. All changes are audit-only: the skill flags what's missing, never auto-generates missing documentation pages. Stays in its lane as a post-ship updater. Co-Authored-By: Hermes Agent <agent@nousresearch.com> * feat(document-generate): add Diataxis documentation generation skill New /document-generate skill, the companion to /document-release. While /document-release audits and fixes existing docs post-ship, /document-generate writes missing documentation from scratch using the Diataxis framework. Inspired by doodlestein documentation-website-for-software-project skill. Co-Authored-By: Hermes Agent <agent@nousresearch.com> * chore(docs): regenerate gstack/llms.txt with /document-generate entry CI's check-freshness step ran gen:skill-docs and found llms.txt stale — the index wasn't regenerated when /document-generate was added in the preceding commit. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(docs): regen document-generate/SKILL.md after merging main Main brought in the Non-ASCII characters directive in the AskUserQuestion Format resolver (scripts/resolvers/preamble/generate-ask-user-format.ts). Regenerating document-generate/SKILL.md propagates the new section into the generated output. check-freshness should now pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(CLAUDE.md): add workflow for fork PRs from garrytan-agents Fork PRs from non-collaborators don't get base-repo secrets passed to their CI workflows, so eval/E2E jobs fail with empty-env auth. New section: when checking out a PR from garrytan-agents, push the branch to garrytan/gstack and re-target the PR from there. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: sync project docs for v1.35.0.0 + bump VERSION - README.md: add /document-generate to skills table (Technical Writer category) + install-command skill lists - CLAUDE.md: add document-generate/ to project structure tree - SKILL.md.tmpl + regenerated SKILL.md: add /document-generate routing line ("write docs from scratch") - VERSION: 1.34.0.0 → 1.35.0.0 (MINOR: new skill + enhancement) CHANGELOG entry deferred to /ship. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore: bump version and changelog (v1.35.0.0) CHANGELOG entry for the document-generate skill + document-release Diataxis enhancements. package.json synced to VERSION (drift repair after merging main which had bumped pkg to 1.34.2.0). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: generate /document-generate Diataxis docs (tutorial + how-to + explanation) Fills the documentation debt items flagged by /document-release in PR #1477: critical-gap tutorial coverage and common-gap explanation coverage for the new /document-generate skill. Quadrants: tutorial, how-to, explanation (reference already covered by document-generate/SKILL.md). - docs/tutorial-document-generate.md (1009 words): newcomer 90-second flow - docs/howto-document-a-shipped-feature.md (770 words): post-ship audit + fill workflow - docs/explanation-diataxis-in-gstack.md (1106 words): why Diataxis, trade-offs, alternatives - README.md: links the three docs from the /document-generate skills-table row All cross-links verified — every Related section points at an existing file. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Hermes Agent <agent@nousresearch.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
447 lines
15 KiB
Cheetah
447 lines
15 KiB
Cheetah
---
|
|
name: document-generate
|
|
preamble-tier: 2
|
|
version: 1.0.0
|
|
description: |
|
|
Generate missing documentation from scratch for a feature, module, or entire project.
|
|
Uses the Diataxis framework (tutorial / how-to / reference / explanation) to produce
|
|
complete, structured documentation. Can be invoked standalone or called by
|
|
/document-release when it finds coverage gaps. Use when asked to "write docs",
|
|
"generate documentation", "document this feature", "create a tutorial", or
|
|
"explain this module". (gstack)
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- Write
|
|
- Edit
|
|
- Grep
|
|
- Glob
|
|
- AskUserQuestion
|
|
triggers:
|
|
- write docs for this
|
|
- generate documentation
|
|
- document this feature
|
|
- create a tutorial
|
|
- write a how-to
|
|
- explain this module
|
|
- docs for this project
|
|
---
|
|
|
|
{{PREAMBLE}}
|
|
|
|
{{BASE_BRANCH_DETECT}}
|
|
|
|
# Document Generate: Diataxis Documentation Writer
|
|
|
|
You are running the `/document-generate` workflow. Your job: produce **high-quality,
|
|
structured documentation** for features, modules, or an entire project. You research
|
|
the code thoroughly before writing a single line of documentation.
|
|
|
|
This skill can be invoked two ways:
|
|
1. **Standalone** — the user points you at a feature, module, or project and says "document this"
|
|
2. **From /document-release** — the coverage map identified gaps; you fill them
|
|
|
|
You follow the **Diataxis framework** — four quadrants of documentation, each serving a
|
|
different reader need:
|
|
- **Tutorial** — learning-oriented, walks a newcomer through a working example step-by-step
|
|
- **How-to** — task-oriented, shows how to accomplish a specific goal (assumes basic familiarity)
|
|
- **Reference** — information-oriented, complete and accurate technical description
|
|
- **Explanation** — understanding-oriented, explains why things work the way they do
|
|
|
|
**Philosophy: research the whole, then write the parts.** Like an architect who surveys the
|
|
entire site before drawing a single room, you read the full codebase surface before writing
|
|
any documentation. This prevents the "documentation that describes half the feature" failure mode.
|
|
|
|
---
|
|
|
|
## Step 0: Scope & Intent
|
|
|
|
1. Determine what to document:
|
|
- **If invoked with a specific target** (feature, module, file, skill): scope is that target
|
|
- **If invoked for an entire project**: scope is the full project
|
|
- **If called from /document-release with gaps**: scope is the specific entities from the coverage map
|
|
|
|
2. Use AskUserQuestion to confirm scope and ask about documentation target:
|
|
|
|
- A) Write documentation inline in existing files (README, ARCHITECTURE, etc.)
|
|
- B) Create standalone documentation files (e.g., `docs/` directory)
|
|
- C) Both — inline summaries in existing files + deep docs in standalone files
|
|
|
|
RECOMMENDATION: Choose C because it maximizes both discoverability and depth.
|
|
|
|
3. Determine the output format:
|
|
- If the project already has a `docs/` directory, follow its conventions
|
|
- If the project uses a doc framework (Nextra, Docusaurus, MkDocs, VitePress), follow its format
|
|
- Otherwise, use plain Markdown files in `docs/`
|
|
|
|
---
|
|
|
|
## Step 1: Codebase Archaeology (Research Phase)
|
|
|
|
**This is the most important step.** Do not skip or rush it. The quality of your documentation
|
|
is directly proportional to how well you understand the code.
|
|
|
|
1. **Map the project structure:**
|
|
|
|
```bash
|
|
find . -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.gstack/*" -not -path "./dist/*" -not -path "./build/*" -not -path "./.next/*" | head -200
|
|
```
|
|
|
|
2. **Read the entry points.** Identify and read:
|
|
- README.md, ARCHITECTURE.md, CONTRIBUTING.md, CLAUDE.md / AGENTS.md
|
|
- package.json / Cargo.toml / pyproject.toml / go.mod (understand the project type)
|
|
- Main entry files (index.ts, main.rs, app.py, cmd/main.go)
|
|
- Configuration files and examples
|
|
|
|
3. **Read the source code for each target entity.** For each feature/module you're documenting:
|
|
- Read the implementation files end-to-end (not just signatures)
|
|
- Read the tests — they reveal intended behavior, edge cases, and usage patterns
|
|
- Read related modules that the target depends on or is depended upon by
|
|
- Read any existing inline comments, especially `// NOTE:`, `// DESIGN:`, `// WHY:`
|
|
|
|
4. **Build a concept map.** Before writing, produce an internal outline:
|
|
|
|
```
|
|
Target: [feature/module name]
|
|
Purpose: [one sentence — what problem does it solve?]
|
|
Key concepts: [list the 3-5 concepts a reader must understand]
|
|
Public surface: [commands, functions, config options, API endpoints]
|
|
Dependencies: [what it needs from other modules]
|
|
Dependents: [what relies on it]
|
|
Edge cases: [from reading tests and code]
|
|
Design decisions: [any non-obvious "why" choices]
|
|
```
|
|
|
|
5. Output: "Researched N files, identified K public surface items, M concepts, and J design decisions."
|
|
|
|
---
|
|
|
|
## Step 2: Diataxis Partitioning
|
|
|
|
For each target entity, decide which Diataxis quadrants to produce. Not every entity needs all four.
|
|
|
|
**Decision matrix:**
|
|
|
|
| Entity type | Tutorial? | How-to? | Reference? | Explanation? |
|
|
|---|---|---|---|---|
|
|
| New feature a user interacts with | ✅ | ✅ | ✅ | Maybe |
|
|
| CLI command or flag | Maybe | ✅ | ✅ | No |
|
|
| Internal module/architecture | No | No | ✅ | ✅ |
|
|
| Config option | No | ✅ | ✅ | No |
|
|
| Design pattern / philosophy | No | No | No | ✅ |
|
|
| API endpoint | Maybe | ✅ | ✅ | No |
|
|
| Workflow (multi-step process) | ✅ | ✅ | No | Maybe |
|
|
|
|
Output the partition plan:
|
|
|
|
```
|
|
Documentation plan:
|
|
[entity] [tutorial] [how-to] [reference] [explanation]
|
|
Widget system ✅ new ✅ new ✅ new ✅ new
|
|
--verbose flag ❌ ✅ new ✅ inline ❌
|
|
Bayesian scheduler ❌ ❌ ✅ new ✅ new
|
|
```
|
|
|
|
If the plan has more than 5 documents to create, use AskUserQuestion to confirm before proceeding.
|
|
For smaller scopes, proceed directly.
|
|
|
|
---
|
|
|
|
## Step 3: Write Reference Documentation First
|
|
|
|
Reference docs are the foundation. They are factual, complete, and derived directly from code.
|
|
Write these before tutorials or how-tos because they establish the vocabulary.
|
|
|
|
**Reference doc template:**
|
|
|
|
```markdown
|
|
# [Entity Name]
|
|
|
|
[One paragraph: what it is, what it does, when you'd use it.]
|
|
|
|
## API / Interface
|
|
|
|
[Complete listing of public surface: functions, commands, config options, parameters.
|
|
Include types, defaults, and constraints. Pull directly from code — do not paraphrase
|
|
loosely.]
|
|
|
|
## Options / Configuration
|
|
|
|
[If applicable: every option with its type, default, and effect.]
|
|
|
|
## Examples
|
|
|
|
[2-3 concrete examples showing actual usage. Prefer real command output or code that
|
|
would actually compile/run.]
|
|
|
|
## Related
|
|
|
|
[Links to other reference docs, how-tos, or explanations that provide context.]
|
|
```
|
|
|
|
**Rules for reference docs:**
|
|
- Accuracy over elegance. Every claim must be traceable to code.
|
|
- Include types, defaults, and constraints. "Accepts a string" is insufficient — "Accepts a
|
|
string (max 256 chars, must match `^[a-z-]+$`)" is reference-grade.
|
|
- Show real examples that would actually work if copy-pasted.
|
|
- Do not explain *why* — that belongs in explanation docs.
|
|
|
|
---
|
|
|
|
## Step 4: Write Explanation Documentation
|
|
|
|
Explanation docs answer "why does this work this way?" They are the design rationale.
|
|
|
|
**Explanation doc template:**
|
|
|
|
```markdown
|
|
# [Concept / Design Decision]
|
|
|
|
[Opening paragraph: the problem this design solves, stated in terms a smart reader
|
|
who hasn't seen the code would understand.]
|
|
|
|
## The problem
|
|
|
|
[Concrete description of what goes wrong without this design. Real failure modes,
|
|
not abstract risks.]
|
|
|
|
## The approach
|
|
|
|
[How the design solves the problem. Include diagrams (ASCII or Mermaid) for
|
|
architectural concepts.]
|
|
|
|
## Trade-offs
|
|
|
|
[What was given up. Every design decision trades something — name it explicitly.]
|
|
|
|
## Alternatives considered
|
|
|
|
[If discoverable from code comments, ADRs, or git history: what was tried or
|
|
rejected and why.]
|
|
```
|
|
|
|
**Rules for explanation docs:**
|
|
- Lead with the problem, not the solution.
|
|
- Use ASCII diagrams for architecture. They're grep-able, diff-friendly, and render everywhere.
|
|
- Name trade-offs explicitly. "We chose X over Y because Z" is the gold standard.
|
|
- Do not repeat reference material — link to it.
|
|
|
|
---
|
|
|
|
## Step 5: Write How-To Guides
|
|
|
|
How-tos are task-oriented. They assume the reader knows the basics and wants to accomplish
|
|
something specific.
|
|
|
|
**How-to doc template:**
|
|
|
|
```markdown
|
|
# How to [accomplish specific task]
|
|
|
|
[One sentence: what you'll accomplish and the end result.]
|
|
|
|
## Prerequisites
|
|
|
|
[What the reader needs before starting. Be specific — versions, installed tools,
|
|
config state.]
|
|
|
|
## Steps
|
|
|
|
1. [Action verb] [specific instruction]
|
|
|
|
```bash
|
|
[exact command]
|
|
```
|
|
|
|
[Expected output or result, if non-obvious.]
|
|
|
|
2. [Next step...]
|
|
|
|
## Verification
|
|
|
|
[How to confirm it worked. A command, a URL to visit, a test to run.]
|
|
|
|
## Troubleshooting
|
|
|
|
[Common failure modes and their fixes. Pull from tests and error handling code.]
|
|
```
|
|
|
|
**Rules for how-to docs:**
|
|
- Title starts with "How to" — no exceptions. This is the reader's entry point.
|
|
- Every step must be actionable. No "consider whether..." — instead "Run X" or "Add Y to Z".
|
|
- Include verification. The reader should never wonder "did it work?"
|
|
- Troubleshooting section is mandatory if the task can fail.
|
|
|
|
---
|
|
|
|
## Step 6: Write Tutorials
|
|
|
|
Tutorials are learning-oriented. They take a newcomer from zero to a working example.
|
|
These are the hardest to write well and the most valuable.
|
|
|
|
**Tutorial doc template:**
|
|
|
|
```markdown
|
|
# [Tutorial title — describes what you'll build/learn]
|
|
|
|
[Opening paragraph: what you'll build, why it's useful, and what you'll understand
|
|
by the end. Keep it concrete — "You'll build a working X that does Y" not
|
|
"This tutorial covers X".]
|
|
|
|
## What you'll need
|
|
|
|
[Prerequisites: tools, versions, prior knowledge. Link to installation guides.]
|
|
|
|
## Step 1: [Set up the foundation]
|
|
|
|
[Start from a clean state. Show every command. Explain what each does on first
|
|
encounter — but briefly, not a lecture.]
|
|
|
|
```bash
|
|
[exact command]
|
|
```
|
|
|
|
[Brief explanation of what just happened.]
|
|
|
|
## Step 2: [Build the first working piece]
|
|
|
|
[Get to a working, visible result as fast as possible. The reader should see
|
|
something happen within the first 3 steps.]
|
|
|
|
...
|
|
|
|
## Step N: [Final step]
|
|
|
|
## What you built
|
|
|
|
[Recap: what the reader now has and what it can do. Link to reference docs
|
|
for deeper exploration. Suggest next steps.]
|
|
```
|
|
|
|
**Rules for tutorials:**
|
|
- **Time to first result < 3 steps.** If the reader hasn't seen something work by step 3,
|
|
the tutorial is too slow.
|
|
- Every step must produce a visible change or output. No "now configure X" without showing
|
|
what changes.
|
|
- Use the exact commands the reader will type. No "run the appropriate command" abstractions.
|
|
- Error paths: if a step commonly fails, show the error and the fix inline.
|
|
- End with "What you built" — connect the tutorial back to the real use case.
|
|
|
|
---
|
|
|
|
## Step 7: Cross-Document Linking & Discoverability
|
|
|
|
After writing all documents:
|
|
|
|
1. **Add cross-links between quadrants.** Every reference doc should link to its how-to.
|
|
Every how-to should link to its reference. Tutorials should link to both.
|
|
|
|
2. **Update entry-point files.** Add references to new docs in:
|
|
- README.md — add to documentation section or table of contents
|
|
- CLAUDE.md / AGENTS.md — add to project structure if relevant
|
|
- Any existing docs index or sidebar config
|
|
|
|
3. **Verify discoverability.** Every new document must be reachable within 2 clicks from
|
|
README.md. If a docs framework is in use, add to the sidebar/nav config.
|
|
|
|
4. **Check for broken links.** Grep for any `](` references that point to files that don't exist.
|
|
|
|
---
|
|
|
|
## Step 8: Quality Self-Review
|
|
|
|
Before committing, review each document against these criteria:
|
|
|
|
**Accuracy gate:**
|
|
- [ ] Every code example compiles / runs / passes if copy-pasted
|
|
- [ ] Every API description matches the actual code signature
|
|
- [ ] Every command shown produces the output described
|
|
- [ ] No stale references to renamed/removed entities
|
|
|
|
**Completeness gate:**
|
|
- [ ] Reference docs cover 100% of public surface
|
|
- [ ] How-tos cover the top 3 tasks a user would attempt
|
|
- [ ] Tutorials get to a working result in ≤3 steps
|
|
- [ ] Explanation docs name trade-offs, not just choices
|
|
|
|
**Voice gate:**
|
|
- [ ] Written for a smart person who hasn't seen the code
|
|
- [ ] No jargon without brief inline gloss on first use
|
|
- [ ] Active voice, concrete nouns, short sentences
|
|
- [ ] "You can now..." not "The system provides..."
|
|
|
|
Fix any failures before proceeding.
|
|
|
|
---
|
|
|
|
## Step 9: Commit & Output
|
|
|
|
1. Stage new documentation files by name (never `git add -A` or `git add .`).
|
|
|
|
2. Create a commit:
|
|
|
|
```bash
|
|
git commit -m "$(cat <<'EOF'
|
|
docs: generate [scope] documentation (Diataxis)
|
|
|
|
[One-line summary of what was documented]
|
|
|
|
Quadrants: [list which quadrants were produced]
|
|
|
|
{{CO_AUTHOR_TRAILER}}
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
3. Push to the current branch:
|
|
|
|
```bash
|
|
git push
|
|
```
|
|
|
|
4. **If a PR exists**, update the PR body with a `## Documentation Generated` section listing
|
|
every new file with its Diataxis quadrant and a one-line description:
|
|
|
|
```
|
|
## Documentation Generated
|
|
|
|
| File | Quadrant | Description |
|
|
|------|----------|-------------|
|
|
| docs/tutorial-getting-started.md | Tutorial | Walk-through from install to first working example |
|
|
| docs/reference-widget-api.md | Reference | Complete widget API with types, defaults, examples |
|
|
| docs/explanation-bayesian-scheduler.md | Explanation | Why the scheduler uses Bayesian inference |
|
|
| docs/howto-custom-widgets.md | How-to | Creating and registering custom widgets |
|
|
```
|
|
|
|
5. Output a structured summary:
|
|
|
|
```
|
|
Documentation generated:
|
|
Scope: [what was documented]
|
|
Files: [N] new, [M] updated
|
|
Coverage:
|
|
Tutorials: [count] ([list])
|
|
How-tos: [count] ([list])
|
|
Reference: [count] ([list])
|
|
Explanation: [count] ([list])
|
|
Quality: [pass/fail on each gate]
|
|
```
|
|
|
|
---
|
|
|
|
## Important Rules
|
|
|
|
- **Research before writing.** Step 1 is not optional. Read the code, read the tests, read the
|
|
existing docs. Insufficient research produces surface-level documentation.
|
|
- **Accuracy is non-negotiable.** Every code example must work. Every API description must match
|
|
the actual code. If you're unsure about a detail, read the source again — do not guess.
|
|
- **Diataxis quadrants serve different readers.** Do not mix tutorial content into reference docs
|
|
or reference content into how-tos. Each quadrant has a specific reader in a specific mode.
|
|
- **Time to first result in tutorials.** If a reader can't see something working by step 3,
|
|
restructure the tutorial.
|
|
- **Cross-link everything.** Isolated docs are undiscoverable docs.
|
|
- **Voice: friendly, concrete, user-forward.** Write like you're explaining to a smart person
|
|
who hasn't seen the code. Never corporate, never academic.
|
|
- **Completeness over minimalism.** AI makes comprehensive documentation cheap. Don't write
|
|
"minimal viable docs" — write complete docs. Boil the lake.
|