Transform hub-guide from a single-skill Hub monorepo guide into a comprehensive programming best-practice plugin covering all situations. Skills (26): - Core: engineering-principles, clean-code, clean-architecture, design-patterns, testing, error-handling, security, api-design, git-workflow, documentation, logging-observability, performance - Languages: typescript, python, rust, go - Frameworks: react-frontend, elysiajs, hono-backend, drizzle-database, nextjs - Infrastructure: docker, ci-cd, monitoring - Monorepo: monorepo, hub-guide (existing) Hooks: - SessionStart: auto-detect project type and activate relevant skills - PreToolUse (Write|Edit): inject language-specific rules per file type Reference files for deep dives: - clean-architecture/references/solid.md (SOLID + component principles) - design-patterns/references/catalog.md (full GoF catalog with examples) - testing/references/mocks.md (test double taxonomy) Restructure plugin to modern skills/ directory format.
4.9 KiB
name, description
| name | description |
|---|---|
| documentation | Best practices for software documentation — README, API docs, ADRs, inline comments, changelogs, and knowledge base organization. Use when writing README files, designing documentation strategy, adding inline comments, or whenever the user mentions "documentation," "README," "ADR," "changelog," "docstring," "wiki," "documentation as code," or "docs." |
Documentation Best Practices
The Minimalist Philosophy
"Produce no document unless its need is immediate and significant." — Robert C. Martin
Documentation has ongoing cost: maintenance, outdated content, reader trust erosion. Write less, maintain ruthlessly.
Rule: If a document would be wrong within 6 months, don't write it — automate it or make the code self-explanatory.
Documentation Types (by audience)
1. README — for newcomers
Every project needs one. Answers 4 questions in order:
- What is this? — one-paragraph description
- Why does it exist? — what problem it solves
- How do I run it? — quickstart: install → configure → run
- Where do I go for help? — link to issues, docs, chat
# project-name
Brief description (1-2 sentences).
## Quickstart
```bash
npm install
cp .env.example .env
npm run dev
Configuration
Key environment variables, config files.
API
Link to OpenAPI spec or API docs.
Development
Testing, linting, building, contributing guide.
**README anti-patterns:**
- ❌ Outdated setup steps (worse than no setup guide)
- ❌ Long architecture essays (put in ADR or docs/)
- ❌ Contributor lists (git log handles this)
- ❌ Badges from tools you don't use
### 2. ADRs (Architecture Decision Records) — for maintainers
Record *why* a decision was made, not *what* was decided (that's in the code).
docs/adr/ ├── 001-use-postgres-for-primary-store.md ├── 002-use-dapr-for-pub-sub.md └── 003-migrate-to-biome-from-eslint.md
**Template:**
```markdown
# ADR-001: Use PostgreSQL for Primary Store
**Date:** 2024-01-15
**Status:** Accepted | Proposed | Deprecated | Superseded
## Context
Why this decision was needed, what alternatives were considered.
## Decision
What was decided and why over alternatives.
## Consequences
What becomes easier, harder, or needs migration.
3. API Documentation — for consumers
- REST: OpenAPI 3.x spec. Generate from code (Hono Zod OpenAPI, FastAPI Swagger).
- GraphQL: Schema is documentation — auto-generated from SDL.
- Libraries: API reference (JSDoc, rustdoc, godoc, pydoc).
- Include: endpoint/method, params, request/response schema, errors, example, auth.
4. Inline Comments — for future developers
Good comments (rare but valuable):
// WHY: This ordering ensures we process the oldest items first
// so failed retries don't starve newer entries. Priorities > 5
// are reserved for system-internal events.
Bad comments (delete on sight):
// ❌ Redundant
i++ // increment i
// ❌ Misleading (out of date)
// This function validates input (it no longer does)
// ❌ Mumbling
// handle the thing
// ❌ Journal
// 2024-01-15: fixed the bug
// ❌ Commented-out code
// const old = calcTotal(items);
5. CHANGELOG.md — for users
Auto-generated from commits (release-please, changie, git-cliff). Never manual.
# Changelog
## [1.2.0] - 2025-06-15
### Added
- feat(auth): Google OAuth sign-in
- feat(ui): dark mode toggle
### Fixed
- fix(billing): handle null currency in invoice generation
- fix(api): rate-limit headers on error responses
### Changed
- chore(deps): update TypeScript to 5.5
6. How-to Guides — for specific tasks
- Focused, task-oriented. One guide = one task.
- "How to add a new service" not "architecture overview."
- Keep in
docs/directory alongside the code.
Architecture (for docs/)
docs/
├── add-new-app.md # How-to guide
├── deployment.md # Deployment guide
├── adr/ # Architecture Decision Records
├── diagrams/ # Architecture diagrams (keep simple)
└── runbooks/ # Incident response procedures
Automation
- Pre-commit check — warn if README has no quickstart.
- CI check — verify ADR links are valid.
- OpenAPI validation — CI validates spec file is up to date.
- Dependabot/Renovate — keeps dependency docs fresh automatically.
Documentation Anti-patterns
- ❌ Rotting docs — outdated docs are worse than no docs. Delete or update.
- ❌ Copy-paste docs — duplicated content across files. Cross-reference instead.
- ❌ Epic README — README that tries to document everything. Split into
docs/. - ❌ Documenting the obvious —
// This function saves a user - ❌ No code examples — abstract docs without concrete usage are useless.
- ❌ No tone — documentation can be clear without being dry. A little personality helps.