This guide explains how documentation is organized in this project to help contributors understand where to place different types of documentation.
docs/
├── contributing/ # Contribution guidelines and workflows
│ ├── README.md # Contribution guide overview
│ ├── branching.md # Branching conventions
│ ├── commit-process.md # Commit process and pre-commit checks
│ └── linting.md # Linting tools and conventions
├── github-actions-issues/ # GitHub Actions runner issue documentation
│ ├── README.md # Issue documentation index
│ └── docker-apt-cache-issue.md # Docker installation APT cache problems
├── tech-stack/ # Generic technology documentation
│ ├── ansible.md # Ansible installation, setup, and basic usage
│ ├── lxd.md # LXD system containers overview and setup
│ └── opentofu.md # OpenTofu/Terraform installation and usage
├── research/ # Research notes and exploration docs
├── decisions/ # Architecture Decision Records (ADRs)
│ └── meson-removal.md # Decision to remove Meson build system
└── *.md # Project-specific documentation
Purpose: Guidelines and conventions for project contributors.
What belongs here:
- Branching conventions and naming standards
- Commit message standards and pre-commit processes
- Code quality standards and linting setup
- Development environment setup
- Pull request and review processes
- Testing guidelines and requirements
Examples:
branching.md- Branch naming conventionscommit-process.md- Conventional commits and pre-commit checkslinting.md- Linting tools, configuration, and usage
Purpose: Documentation of recurring issues and solutions specific to GitHub Actions runners.
What belongs here:
- Package installation failures in containerized environments
- Networking issues specific to GitHub Actions runners
- Container/VM provisioning problems in CI environments
- APT cache and repository availability issues
- Solutions and workarounds for CI-specific problems
- Debugging techniques for GitHub Actions environments
Examples:
docker-apt-cache-issue.md- Docker installation APT cache problems and solutions- Network connectivity issues between containers and VMs in GitHub Actions
- Permission and security context problems in CI environments
Purpose: Generic documentation about tools and technologies used in the project.
What belongs here:
- Installation guides for tools (Ansible, OpenTofu, LXD, etc.)
- Basic usage examples and common commands
- General troubleshooting for the technology itself
- Tool-agnostic best practices
- Technology comparisons and explanations
What does NOT belong here:
- Project-specific configurations
- Custom scripts or automation specific to this project
- Integration details between this project and the tools
Examples:
ansible.md- How to install Ansible, basic playbook structure, common commandslxd.md- LXD installation, container management, troubleshootingopentofu.md- OpenTofu installation, basic commands, state management
Purpose: Exploration, analysis, and decision-making documentation.
What belongs here:
- Technology research and comparisons
- Proof-of-concept findings
- Experimental approaches and their outcomes
- Preliminary investigations and findings
Purpose: Records of significant architectural and technical decisions.
What belongs here:
- Architecture Decision Records (ADRs)
- Technology adoption or removal decisions
- Process and workflow changes
- Design pattern choices and rationales
- Tool and dependency decisions
Examples:
meson-removal.md- Decision to remove Meson build system and rationale
Purpose: Project-specific documentation and guides.
What belongs here:
- Project overview and architecture
- Specific implementation details
- Integration guides between technologies
- Project-specific troubleshooting
- User guides for this specific project
Examples:
vm-providers.md- Comparison of VM providers for this projectstructured-logging-implementation-plan.md- Implementation plan for hierarchical logging with tracing spans- Project-specific usage patterns and workflows
Purpose: Documentation for specific configurations within the project.
What belongs here:
- How to use the specific configuration
- Configuration-specific setup steps
- Customization options for that configuration
- Troubleshooting specific to that configuration
Examples:
templates/tofu/lxd/README.md- How to use the LXD OpenTofu configurationdocs/contributing/templates/ansible.md- How to use the Ansible playbooks
-
Generic tool documentation →
docs/tech-stack/- If it could be useful in other projects using the same tool
-
GitHub Actions runner issues →
docs/github-actions-issues/- If documenting CI-specific problems and solutions
- When tracking recurring GitHub Actions runner issues
-
Project-specific documentation →
docs/- If it's specific to how this project works
-
Configuration documentation →
templates/*/README.md- If it's about a specific configuration or setup
-
Research and exploration →
docs/research/- If it's about investigating or comparing approaches
-
Architecture decisions →
docs/decisions/- If documenting a significant technical or architectural decision
- When removing or adding major dependencies
- For process or workflow changes that affect contributors
- Always use relative paths when linking between documents
- Tech stack docs should link to project-specific implementations
- Configuration docs should link to relevant tech stack documentation
- Use descriptive link text that explains what the reader will find
<!-- From config documentation to tech stack -->
For general LXD setup, see the [LXD documentation](../../docs/tech-stack/lxd.md).
<!-- From project docs to tech stack -->
Install OpenTofu following the [OpenTofu setup guide](tech-stack/opentofu.md).
<!-- From tech stack to project usage -->
For project-specific usage, see the [LXD configuration guide](../templates/tofu/lxd/README.md).- Update tech stack docs for generic tool changes
- Update project docs for project-specific impacts
- Update configuration docs for configuration-specific changes
- Check all cross-references remain valid
- Create tech stack documentation for the tool itself
- Document project integration in project docs
- Create configuration documentation if there are specific configurations
- Update this guide if new categories are needed
- Document significant decisions in
docs/decisions/ - Use descriptive filenames (e.g.,
tool-name-adoption.md,framework-removal.md) - Include context and reasoning for future contributors
- Document when to reconsider the decision
Decision documents should include:
- Status (adopted, removed, superseded)
- Context that led to the decision
- Problems or requirements that drove the decision
- Decision made and alternatives considered
- Consequences both positive and negative
- When to reconsider the decision
This organization ensures documentation is:
- Easy to find - Clear categories for different types of information
- Maintainable - Generic docs don't get duplicated across configurations
- Scalable - New tools and configurations have clear places to go
- Useful - Readers can find both generic help and project-specific guidance