docs-architect
Project documentation system — a folder-per-doc-type docs/ tree (ADRs, backlog, ideas, plans, designs, reviews, changes, guides), mandatory frontmatter, lifecycle by moving files, weekly/monthly routi
SKILL.mdskills/workflows/docs-architect/SKILL.md
GitHubDocs Architect
A docs/ convention where the folder is the doc type, the frontmatter is the state, and moving a file is a state change. One source of truth per item and per decision. Companion to grill-with-docs (owns CONTEXT.md and the ADR threshold) and feature-planner (produces the plans this tree stores). Schemas in FRONTMATTER.md, backlog rules in BACKLOG.md, templates in TEMPLATES.md, the classify/migrate procedure in MIGRATION.md.
Suggestion-mode: the tree is a default. Adopt the folders a project actually needs.
1. Modes
- Scaffold — no
docs/yet. Createdocs/README.mdanddocs/templates/; create every other folder lazily, when its first doc exists. - Write-doc — pick the folder by the doc's job (§2), copy the template, fill the frontmatter, link it to its origin.
- Migrate — a
docs/exists in another shape. Classify, propose moves and renames, wait for approval, then move (MIGRATION.md).
2. Where a doc goes
| Folder | Job | Name | Edited after writing? |
|---|---|---|---|
adr/ |
One decision: context, options, decision, consequences | 0001-slug.md |
Body never; status and superseded_by only |
ideas/ |
Not yet a plan | YYYY-MM-DD-project-topic.md |
Yes, while draft |
plans/ |
Scope, phases, exit criteria | dated | Yes |
designs/ |
How it is built; links ADRs instead of repeating them | dated | Yes |
reviews/ |
Findings of one review or audit — a snapshot | dated | No |
changes/ |
What changed and why — migrations, impact | dated | No |
guides/ |
Current procedures and runbooks | topic.md |
Yes, always current |
methodology/ |
Working rules and standards | topic.md |
Yes |
backlog/ |
inbox.md, <project>.md, done/YYYY-MM.md |
see BACKLOG.md | Yes |
archive/ |
Finished or obsolete | keeps its name | No |
guides/ and methodology/ are living documents and carry no date; everything else describes a moment and does. Reviews and changes are history — never rewrite them, add a new one.
3. Flow
inbox → ideas → plans → designs → adr (only if a real architecture decision) → backlog Next → Doing → done/. Reviews and changes feed new backlog items, each linked to its origin.
- Capture in
backlog/inbox.md, one line, no format. - Weekly triage: drop it, move it to a project backlog, or grow it in
ideas/. - A mature idea becomes a plan with scope and exit criteria.
- The plan yields a design; each non-trivial decision becomes an ADR.
- The approved design leaves linked items in
Next. - On close the item moves to
done/YYYY-MM.md; the doc becomesstatus: done, then moves toarchive/.
4. ADRs
- One decision per ADR, one page: Context, Options considered, Decision, Consequences.
- Numbering is sequential and never reused. Take the next number by scanning
adr/. - Whether something deserves an ADR is decided by the three-part test in ADR_FORMAT.md (hard to reverse, surprising, real trade-off). This skill adds the mandatory frontmatter and the supersede mechanics on top of it.
- Changing a decision: write a new ADR with
supersedes: N, then set the old one tostatus: supersededand fill itssuperseded_by. That is the only edit an accepted ADR gets. - ADRs are cross-cutting: a decision spanning projects uses
project: global. Keepadr/flat — the number already orders it. - Designs link ADRs (
[ADR 0002](../adr/0002-slug.md)) instead of restating the reasoning.
5. Links and frontmatter
Every doc except README.md, inbox.md and templates/ carries frontmatter (FRONTMATTER.md): status, project, date, related. ADRs use their own schema.
- Use relative markdown links (
../adr/0003-slug.md). They resolve on GitHub, in editors and for agents. Wikilinks only if the project already standardises on an Obsidian-style vault. relatedlists paths relative todocs/. A doc nothing links to is an orphan; the linter reports it.
6. Routine
| When | What | Time |
|---|---|---|
| Daily | Capture in inbox.md |
0 |
| Weekly | Triage the inbox; review Next |
10 min |
| Monthly | Prune Later, close to done/, archive obsolete, resolve drafts older than 2 months |
15 min |
A draft older than 2 months is promoted or deleted. A backlog item sitting in Later for 2–3 months is deleted or demoted to Someday — prune, don't archive. If the project tracks work in GitHub Issues, the backlog lives there and only the docs stay here.
7. Scale rules
- A per-project subfolder inside a type (
designs/<project>/) only after ~10 files of that type. Never foradr/. - Several repos:
docs/per repo by default; a central docs repo only when projects cross-reference heavily. Thenproject:is mandatory and filters the views. - Keep
CLAUDE.md/AGENTS.mdshort and pointing atdocs/— snippet in TEMPLATES.md. Do not duplicate the conventions there.
8. Linter
python3 scripts/docs_lint.py [docs-dir] — stdlib only, read-only, exit code 1 on errors. Checks frontmatter schema and enums, ADR numbering and supersede symmetry, broken relative links, orphans, drafts older than 60 days, backlog size limits. --index prints a generated index to stdout. Run it before declaring a docs change done and in the monthly routine.
9. Output naming
Docs this skill generates use kebab-case, lowercase, no accents: 0004-use-nats.md, 2026-10-20-agent-verification.md, inbox.md. The skill's own support files stay UPPER_SNAKE_CASE.
10. Out of scope
CONTEXT.mdglossary and when to offer an ADR → grill-with-docs- Requirement → design → slices → feature-planner
- Commit messages and
CHANGELOG.mdwording → commit-author - Root
README.md/CHANGELOG.mdauthoring — the user-facing entry points are not generated here;changes/entries may link a changelog line.