473 lines
13 KiB
Markdown
473 lines
13 KiB
Markdown
# Documentation Organization Standard
|
|
|
|
## Purpose
|
|
|
|
This document defines the organization and structure of all StarPunk documentation. It establishes clear guidelines for what types of documents belong where, naming conventions, and when to create each type.
|
|
|
|
## Philosophy
|
|
|
|
Documentation follows the same principle as code: "Every document must justify its existence." Documents should be:
|
|
|
|
- **Actionable**: Provide clear guidance for implementation
|
|
- **Discoverable**: Easy to find based on purpose
|
|
- **Maintainable**: Updated as decisions evolve
|
|
- **Minimal**: No redundant or unnecessary documentation
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
docs/
|
|
├── architecture/ # High-level system design and overviews
|
|
├── decisions/ # Architecture Decision Records (ADRs)
|
|
├── design/ # Detailed technical designs and specifications
|
|
└── standards/ # Coding standards, conventions, and guidelines
|
|
```
|
|
|
|
## Document Types
|
|
|
|
### 1. Architecture Documents (`docs/architecture/`)
|
|
|
|
**Purpose**: High-level system architecture, component relationships, and technology overviews.
|
|
|
|
**When to Create**:
|
|
- Describing the overall system architecture
|
|
- Documenting major subsystems and their interactions
|
|
- Explaining technology stack choices (overview)
|
|
- Defining deployment architecture
|
|
- Documenting security architecture
|
|
- Creating data flow diagrams
|
|
|
|
**Naming Convention**: `{topic}.md`
|
|
|
|
**Examples**:
|
|
- `overview.md` - System architecture overview
|
|
- `components.md` - Component descriptions and relationships
|
|
- `data-flow.md` - How data moves through the system
|
|
- `security.md` - Security architecture and threat model
|
|
- `deployment.md` - Deployment architecture and strategies
|
|
- `technology-stack.md` - Complete technology stack with rationale
|
|
|
|
**Characteristics**:
|
|
- Broad scope, high-level view
|
|
- Focus on "what" and "why" at system level
|
|
- Includes diagrams and visual representations
|
|
- Describes component interactions
|
|
- Documents architectural patterns
|
|
- References relevant ADRs
|
|
|
|
**Template Structure**:
|
|
```markdown
|
|
# {Topic} Architecture
|
|
|
|
## Overview
|
|
[High-level description]
|
|
|
|
## Components
|
|
[Major components and their roles]
|
|
|
|
## Interactions
|
|
[How components communicate]
|
|
|
|
## Patterns
|
|
[Architectural patterns employed]
|
|
|
|
## Diagrams
|
|
[Visual representations]
|
|
|
|
## References
|
|
[Links to related ADRs and design docs]
|
|
```
|
|
|
|
---
|
|
|
|
### 2. Architecture Decision Records (`docs/decisions/`)
|
|
|
|
**Purpose**: Document significant architectural decisions with context, rationale, and alternatives considered.
|
|
|
|
**When to Create**:
|
|
- Selecting technologies or libraries
|
|
- Choosing between architectural approaches
|
|
- Making trade-offs that affect multiple components
|
|
- Establishing patterns or standards
|
|
- Accepting technical debt
|
|
- Rejecting common alternatives
|
|
|
|
**Naming Convention**: `ADR-{NNN}-{short-title}.md`
|
|
- NNN = Zero-padded sequential number (001, 002, etc.)
|
|
- short-title = Kebab-case description
|
|
|
|
**Examples**:
|
|
- `ADR-001-python-web-framework.md`
|
|
- `ADR-002-flask-extensions.md`
|
|
- `ADR-003-frontend-technology.md`
|
|
- `ADR-004-file-based-note-storage.md`
|
|
- `ADR-005-indielogin-authentication.md`
|
|
- `ADR-006-python-virtual-environment-uv.md`
|
|
|
|
**Characteristics**:
|
|
- Focused on a single decision
|
|
- Documents the decision-making process
|
|
- Includes evaluation criteria
|
|
- Lists alternatives considered with scores
|
|
- Explains trade-offs and consequences
|
|
- Has a status (Proposed, Accepted, Superseded)
|
|
- Immutable once accepted (new ADR to change)
|
|
|
|
**Required Template**:
|
|
```markdown
|
|
# ADR-{NNN}: {Title}
|
|
|
|
## Status
|
|
{Proposed|Accepted|Superseded by ADR-XXX}
|
|
|
|
## Context
|
|
What is the issue we're addressing? What are the requirements?
|
|
What constraints do we face?
|
|
|
|
## Decision
|
|
What have we decided? Be specific and clear.
|
|
|
|
## Rationale
|
|
Why did we make this decision?
|
|
|
|
### {Technology/Approach} Score: X/10
|
|
- Simplicity Score: X/10 - [explanation]
|
|
- Fitness Score: X/10 - [explanation]
|
|
- Maintenance Score: X/10 - [explanation]
|
|
- Standards Compliance: Pass/Fail - [explanation]
|
|
|
|
## Consequences
|
|
|
|
### Positive
|
|
- [List benefits]
|
|
|
|
### Negative
|
|
- [List drawbacks]
|
|
|
|
### Mitigation
|
|
- [How we address drawbacks]
|
|
|
|
## Alternatives Considered
|
|
|
|
### {Alternative 1} (Rejected/Considered)
|
|
- Simplicity: X/10 - [explanation]
|
|
- Fitness: X/10 - [explanation]
|
|
- Maintenance: X/10 - [explanation]
|
|
- Verdict: [Why rejected]
|
|
|
|
### {Alternative 2} (Rejected/Considered)
|
|
[Same structure]
|
|
|
|
## Implementation Notes
|
|
[Any specific guidance for implementing this decision]
|
|
|
|
## References
|
|
- [Links to specifications, documentation, related ADRs]
|
|
```
|
|
|
|
**Status Values**:
|
|
- **Proposed**: Decision is under consideration
|
|
- **Accepted**: Decision is final and should be implemented
|
|
- **Superseded**: Decision has been replaced (link to new ADR)
|
|
|
|
**Numbering Rules**:
|
|
- Numbers are sequential starting from 001
|
|
- Never reuse or skip numbers
|
|
- Numbers are assigned when ADR is created, not when accepted
|
|
- Numbers provide chronological history
|
|
|
|
---
|
|
|
|
### 3. Design Documents (`docs/design/`)
|
|
|
|
**Purpose**: Detailed technical specifications for implementation, including schemas, APIs, file formats, and component interfaces.
|
|
|
|
**When to Create**:
|
|
- Defining database schemas
|
|
- Specifying API contracts and endpoints
|
|
- Designing file formats and structures
|
|
- Defining component interfaces
|
|
- Specifying configuration formats
|
|
- Documenting project structure
|
|
- Creating initial setup specifications
|
|
|
|
**Naming Convention**: `{component-or-feature}.md`
|
|
|
|
**Examples**:
|
|
- `project-structure.md` - Complete directory and file organization
|
|
- `database-schema.md` - Database tables, columns, indexes, relationships
|
|
- `api-contracts.md` - RESTful API endpoint specifications
|
|
- `micropub-endpoint.md` - Micropub API implementation details
|
|
- `rss-feed-format.md` - RSS feed structure and generation
|
|
- `ui-patterns.md` - User interface patterns and components
|
|
- `component-interfaces.md` - How components communicate
|
|
- `initial-files.md` - Bootstrap files and configurations
|
|
- `authentication-flow.md` - Detailed auth implementation
|
|
|
|
**Characteristics**:
|
|
- Detailed and specific
|
|
- Implementation-ready specifications
|
|
- Includes code examples, schemas, formats
|
|
- Defines exact file contents when applicable
|
|
- Provides acceptance criteria
|
|
- Focus on "how" at implementation level
|
|
- Should be sufficient for developer to implement
|
|
|
|
**Template Structure**:
|
|
```markdown
|
|
# {Component/Feature} Design
|
|
|
|
## Purpose
|
|
[What this component/feature does]
|
|
|
|
## Overview
|
|
[High-level description]
|
|
|
|
## Specification
|
|
|
|
### {Aspect 1}
|
|
[Detailed specification with examples]
|
|
|
|
### {Aspect 2}
|
|
[Detailed specification with examples]
|
|
|
|
## Implementation Details
|
|
|
|
### File Structure
|
|
[If applicable]
|
|
|
|
### API Endpoints
|
|
[If applicable]
|
|
|
|
### Database Schema
|
|
[If applicable]
|
|
|
|
### Configuration
|
|
[If applicable]
|
|
|
|
## Examples
|
|
[Concrete examples of usage]
|
|
|
|
## Acceptance Criteria
|
|
[How to verify correct implementation]
|
|
|
|
## References
|
|
[Related ADRs, standards, specifications]
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Standards Documents (`docs/standards/`)
|
|
|
|
**Purpose**: Establish coding conventions, development practices, and guidelines that ensure consistency.
|
|
|
|
**When to Create**:
|
|
- Defining coding style guidelines
|
|
- Establishing naming conventions
|
|
- Documenting development setup procedures
|
|
- Creating testing standards
|
|
- Defining commit message formats
|
|
- Establishing documentation standards
|
|
- Setting API design principles
|
|
|
|
**Naming Convention**: `{topic}-standards.md` or `{topic}-setup.md`
|
|
|
|
**Examples**:
|
|
- `documentation-organization.md` - This document
|
|
- `python-coding-standards.md` - Python style guide
|
|
- `development-setup.md` - Setup procedures
|
|
- `testing-strategy.md` - Testing approach and standards
|
|
- `api-design.md` - API design principles
|
|
- `indieweb-compliance.md` - How to meet IndieWeb specs
|
|
- `commit-conventions.md` - Git commit standards
|
|
|
|
**Characteristics**:
|
|
- Prescriptive and normative
|
|
- Define consistent practices
|
|
- Include examples of good/bad patterns
|
|
- Focus on "how we work"
|
|
- Living documents (updated as practices evolve)
|
|
- Should include rationale for standards
|
|
|
|
**Template Structure**:
|
|
```markdown
|
|
# {Topic} Standards
|
|
|
|
## Purpose
|
|
[Why these standards exist]
|
|
|
|
## Principles
|
|
[Core principles underlying the standards]
|
|
|
|
## Standards
|
|
|
|
### {Standard Category 1}
|
|
[Detailed standard with examples]
|
|
|
|
**Good Example**:
|
|
```[code/example]
|
|
```
|
|
|
|
**Bad Example**:
|
|
```[code/example]
|
|
```
|
|
|
|
**Rationale**: [Why this is the standard]
|
|
|
|
### {Standard Category 2}
|
|
[Same structure]
|
|
|
|
## Enforcement
|
|
[How standards are enforced - tools, reviews, etc.]
|
|
|
|
## Exceptions
|
|
[When it's acceptable to deviate]
|
|
|
|
## References
|
|
[Related standards, tools, specifications]
|
|
```
|
|
|
|
---
|
|
|
|
## Cross-References
|
|
|
|
Documents should reference each other appropriately:
|
|
|
|
- **ADRs** → Should be referenced by Architecture, Design, and Standards docs
|
|
- **Architecture** → References ADRs, links to Design docs
|
|
- **Design** → References ADRs, may reference Standards
|
|
- **Standards** → May reference ADRs for rationale
|
|
|
|
**Reference Format**:
|
|
```markdown
|
|
See [ADR-001: Python Web Framework](/home/phil/Projects/starpunk/docs/decisions/ADR-001-python-web-framework.md)
|
|
See [Database Schema Design](/home/phil/Projects/starpunk/docs/design/database-schema.md)
|
|
See [Python Coding Standards](/home/phil/Projects/starpunk/docs/standards/python-coding-standards.md)
|
|
```
|
|
|
|
## Document Lifecycle
|
|
|
|
### Creating Documents
|
|
|
|
1. **Determine Type**: Which category does this belong in?
|
|
2. **Check for Existing**: Does a similar document already exist?
|
|
3. **Name Appropriately**: Follow naming conventions
|
|
4. **Use Template**: Start from the appropriate template
|
|
5. **Be Specific**: Include actionable details
|
|
6. **Reference Related Docs**: Link to ADRs and other docs
|
|
|
|
### Updating Documents
|
|
|
|
**ADRs**: Once accepted, ADRs are immutable. To change a decision:
|
|
- Create a new ADR
|
|
- Reference the old ADR
|
|
- Mark old ADR as "Superseded by ADR-XXX"
|
|
|
|
**Other Documents**: Living documents that should be updated:
|
|
- Add changelog section if document changes significantly
|
|
- Update references when related docs change
|
|
- Keep in sync with actual implementation
|
|
|
|
### Deprecating Documents
|
|
|
|
**Don't Delete**: Mark as deprecated instead
|
|
- Add "DEPRECATED" to title
|
|
- Add note explaining why and what replaced it
|
|
- Keep for historical reference
|
|
|
|
## Quality Checklist
|
|
|
|
Before finalizing any document:
|
|
|
|
- [ ] Is this the right document type for this content?
|
|
- [ ] Is the file in the correct directory?
|
|
- [ ] Does it follow the naming convention?
|
|
- [ ] Does it use the appropriate template?
|
|
- [ ] Is the content actionable and specific?
|
|
- [ ] Are all references correct and complete?
|
|
- [ ] Are there code examples where helpful?
|
|
- [ ] Is the rationale clear?
|
|
- [ ] Can a developer implement from this?
|
|
- [ ] Have I removed unnecessary content?
|
|
|
|
## Anti-Patterns
|
|
|
|
**Avoid**:
|
|
- Mixing document types (ADR with design specs)
|
|
- Redundant documentation (saying same thing in multiple places)
|
|
- Vague specifications ("should be fast", "user-friendly")
|
|
- Missing rationale (standards without explaining why)
|
|
- Orphaned documents (not referenced anywhere)
|
|
- Documentation for documentation's sake
|
|
- Copy-pasting without adapting
|
|
|
|
## Tools and Automation
|
|
|
|
**Validation**:
|
|
- Check links: Ensure all references point to existing files
|
|
- Naming validation: Verify naming conventions
|
|
- Template compliance: Ensure required sections exist
|
|
|
|
**Future Enhancements** (V2):
|
|
- Automated ADR numbering
|
|
- Documentation index generator
|
|
- Link checker
|
|
- Template enforcement
|
|
|
|
## Examples
|
|
|
|
### When to Create Which Document Type
|
|
|
|
**Scenario**: Choosing between SQLite and PostgreSQL
|
|
|
|
→ Create an ADR (`ADR-007-database-engine.md`)
|
|
- This is a technology decision
|
|
- Needs evaluation of alternatives
|
|
- Has long-term architectural impact
|
|
|
|
**Scenario**: Defining the exact database schema
|
|
|
|
→ Create a Design doc (`database-schema.md`)
|
|
- This is detailed specification
|
|
- Implementation-ready
|
|
- May evolve as requirements change
|
|
|
|
**Scenario**: Establishing how to write database migrations
|
|
|
|
→ Create a Standards doc (`database-migration-standards.md`)
|
|
- This is a practice/process
|
|
- Defines consistent approach
|
|
- Applies to all database changes
|
|
|
|
**Scenario**: Explaining how authentication, database, and file storage work together
|
|
|
|
→ Create an Architecture doc or update existing (`architecture/overview.md`)
|
|
- This is system-level interaction
|
|
- Cross-component relationship
|
|
- High-level understanding
|
|
|
|
## Summary
|
|
|
|
| Type | Purpose | Location | Mutability | Naming |
|
|
|------|---------|----------|------------|--------|
|
|
| **Architecture** | System-level design | `docs/architecture/` | Living | `{topic}.md` |
|
|
| **ADR** | Decision records | `docs/decisions/` | Immutable | `ADR-{NNN}-{title}.md` |
|
|
| **Design** | Implementation specs | `docs/design/` | Living | `{component}.md` |
|
|
| **Standards** | Coding/process guidelines | `docs/standards/` | Living | `{topic}-standards.md` |
|
|
|
|
## Principles Summary
|
|
|
|
1. **One Document Type Per File**: Don't mix ADR with Design specs
|
|
2. **Right Place, Right Name**: Follow conventions strictly
|
|
3. **Actionable Content**: Documentation should enable implementation
|
|
4. **Minimal but Complete**: Every document must justify its existence
|
|
5. **Reference Richly**: Link to related documents
|
|
6. **Update Living Docs**: Keep non-ADR docs current
|
|
7. **Never Delete**: Deprecate instead for historical reference
|
|
|
|
## References
|
|
|
|
- Michael Nygard's ADR pattern: https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions
|
|
- Arc42 documentation: https://arc42.org/
|
|
- Diátaxis documentation framework: https://diataxis.fr/
|