| name | documentation-creation |
| description | Create a comprehensive project documentation suite from scratch by analyzing the codebase and verifying every claim against it. Use when setting up INITIAL documentation for a project or building a complete docs/ suite where none exists. NOT for updating existing docs (use documentation-sync instead). Covers project analysis, documentation structure, templates, and verification. |
Documentation Creation Skill
Profile keys consumed
project.name
project.repo
php.version
framework.name
framework.version
framework.api_platform
framework.graphql
persistence.mapper
persistence.engine
architecture.source_root
architecture.bounded_contexts
architecture.shared_context
make.ci
make.start
make.tests
make.e2e
make.load_tests
quality.phpinsights.complexity
quality.infection_msi
capabilities.load_testing
Overview
This skill guides the creation of comprehensive project documentation
from scratch by analyzing the project codebase against the project
profile and applying consistent documentation patterns. It ensures
documentation accurately reflects the actual project implementation.
Use this skill for: initial documentation creation from scratch
Use documentation-sync for: updating existing documentation when
code changes
Context (Input)
- Need to create documentation for a project from scratch
- Want consistent style across the whole documentation suite
- Need to ensure documentation accuracy against the actual codebase
- Project has no existing comprehensive documentation
Task (Function)
Create comprehensive, accurate project documentation by:
- Analyzing the project codebase thoroughly, starting from the profile
- Creating documentation using the established templates
- Verifying all references against the actual codebase
- Ensuring consistent style and cross-linking
Success criteria:
- All documentation files created with consistent structure
- All code references verified against the actual project structure
- All directory paths and file mentions exist in the codebase
- All links between documentation files work correctly
- Technology stack accurately reflected (no false claims)
Quick Start: Documentation Creation Workflow
Step 1: Analyze Project Structure
The profile declares what the project claims to be; the codebase shows
what it is. Read the profile first, then verify each claim. In the
commands below, $SRC is architecture.source_root and $CTX iterates
architecture.bounded_contexts plus architecture.shared_context
(when not null).
ls -la "$SRC"/
cat composer.json | grep -A5 "require"
cat Dockerfile
cat docker-compose.yml
for CTX in <each architecture.bounded_contexts entry, plus architecture.shared_context>; do
ls -la "$SRC/$CTX/" 2>/dev/null || echo "Profile drift: $SRC/$CTX missing"
done
find "$SRC" -path "*/Entity/*.php"
find "$SRC" -name "*Command.php" | head -20
find "$SRC" -name "*Handler.php" | head -20
Key items to document:
Step 2: Create Technology Stack Summary
Verify the profile's stack claims against the repository before
documenting them:
grep -i "php:" Dockerfile
grep '"php"' composer.json
grep -i "<framework.name>" composer.json
grep -iE "mysql|mariadb|postgres|mongo" docker-compose.yml
grep -E "^[a-zA-Z][a-zA-Z0-9_-]*:" Makefile | head -30
Create a technology summary table sourced from the verified profile
values:
| Component | Technology | Version |
|---|
| Language | PHP | php.version |
| Runtime | {from Dockerfile} | - |
| Framework | framework.name | framework.version |
| Database | persistence.engine | {from docker-compose} |
| Mapper | persistence.mapper | - |
| Web Server | {from docker-compose} | - |
Step 3: Create Documentation Files
Create each documentation file following this order:
- main.md - Project overview and design principles
- getting-started.md - Installation and quick start
- design-and-architecture.md - Architectural decisions and patterns
- developer-guide.md - Code structure and development workflow
- api-endpoints.md - REST API documentation; include a GraphQL
section only when
framework.graphql is true, and API Platform
specifics only when framework.api_platform is a version string
- testing.md - Testing strategy and commands
- glossary.md - Domain terminology and naming conventions
- user-guide.md - API usage examples
- advanced-configuration.md - Environment and configuration
- performance.md - Benchmarks and optimization; cover load testing
only when
capabilities.load_testing is true, documenting the
Makefile target mapped by make.load_tests
- security.md - Security measures and practices
- operational.md - Operational considerations
- onboarding.md - New contributor guide
- community-and-support.md - Support channels
- legal-and-licensing.md - License and dependencies
- release-notes.md - Release process
- versioning.md - Versioning policy
Add project-specific docs as needed (e.g. a runtime-specific
performance page when the project uses a non-standard PHP runtime)
Step 4: Write Each Documentation File
For each documentation file:
-
Use the appropriate template (see Documentation Templates below)
-
Fill in project-specific content:
- Project name: use
project.name consistently throughout
- Repository links: build from
project.repo
(https://github.com/<project.repo>)
- Entity names from the codebase
- Bounded context names from
architecture.bounded_contexts
-
Verify all references:
- Directory paths exist under
architecture.source_root
- Every documented make invocation uses the actual target name the
profile
make map points at (e.g. the target mapped by make.ci)
and that target exists in the Makefile. A null mapping means the
capability is absent: do not document it; note the gap instead
- Entity names match the codebase
-
Add cross-links to related documentation
-
Quality thresholds: where testing.md or performance.md cite
quality bars, take values only from the profile quality.* keys —
canonical defaults are complexity 94 (quality.phpinsights.complexity)
and MSI 100 (quality.infection_msi). Thresholds are raise-only:
never document a bar lower than the shipped default
Step 5: Verify Accuracy
Run comprehensive verification (full checklist below):
-
Technology Stack Verification:
grep -i "php" Dockerfile
grep -i "<framework.name>" composer.json
grep -iE "mysql|mariadb|postgres|mongo" docker-compose.yml
-
Directory Structure Verification:
for dir in $(ls "$SRC"/); do
ls -la "$SRC/$dir/" 2>/dev/null || echo "Check: $SRC/$dir"
done
-
Command Verification — for every non-null make.* mapping
documented (at minimum the targets mapped by make.ci, make.start,
make.tests, make.e2e):
for cmd in <each documented target name from the profile make map>; do
grep -q "^$cmd:" Makefile && echo "Found: $cmd" || echo "Missing: $cmd"
done
-
Link Verification:
- Check all internal markdown links resolve
- Verify external links (including
project.repo links) are accurate
Worked example against the upstream reference service:
ls -la src/User/ src/OAuth/ src/Shared/
grep -i mongo docker-compose.yml
for cmd in ci tests e2e-tests; do grep -q "^$cmd:" Makefile && echo "Found: $cmd"; done
Documentation Templates
Overview Document (main.md)
# {project.name}
Welcome to the **{project.name}** documentation...
## Design Principles
{List project's core design principles}
## Technology Stack
| Component | Technology | Version |
| --------- | -------------------- | ------------------- |
| Language | PHP | {php.version} |
| Framework | {framework.name} | {framework.version} |
| Database | {persistence.engine} | X.Y |
Getting Started (getting-started.md)
# Getting Started
## Prerequisites
{List required software with versions}
## Installation
{Step-by-step installation commands; boot the service via the target
mapped by make.start}
## Verification
{Commands to verify installation}
Derive the remaining files from the structure in Format (Output) below,
keeping headings and tone consistent with these two templates.
Constraints
NEVER
- Include references to non-existent directories or files
- Claim features or technologies the project doesn't use (e.g. a GraphQL
page when
framework.graphql is false)
- Leave placeholder text unreplaced
- Skip the verification step after creating documentation
- Document make targets that don't exist in the Makefile, or logical
profile key names (
make.ci) as if they were target names — always
document the mapped target
- Document quality thresholds below the profile
quality.* values
ALWAYS
- Verify every directory path mentioned exists
- Confirm the technology stack matches both the profile and the repo
- Test command examples work in the project
- Update all cross-references to point to correct files
- Maintain consistent terminology throughout;
project.name is the only
name used for the project
- Add a Table of Contents to longer documents (100+ lines)
Verification Checklist
After creating documentation:
Technology Accuracy
Structure Accuracy
Command Accuracy
Link Accuracy
Content Consistency
Common Pitfalls
Technology Mismatch
Problem: Documenting technologies the project doesn't use
Solution:
grep -i "fpm\|franken" Dockerfile
cat docker-compose.yml
Missing Directories
Problem: Documenting directories that don't exist under the source
root
Solution:
ls -la "$SRC"/
Outdated Commands
Problem: Documenting non-existent make targets, or writing logical
key names instead of the mapped targets
Solution:
grep -E "^[a-zA-Z][a-zA-Z0-9_-]*:" Makefile
Missing Table of Contents
Problem: Long documents hard to navigate
Solution: Add a TOC to documents over 100 lines:
## Table of Contents
- [Section 1](#section-1)
- [Section 2](#section-2)
- [Section 3](#section-3)
---
Format (Output)
Expected Documentation Structure
docs/
├── main.md # Project overview
├── getting-started.md # Installation guide
├── design-and-architecture.md # Architecture patterns
├── developer-guide.md # Development workflow
├── api-endpoints.md # REST (and GraphQL, when enabled) docs
├── testing.md # Testing strategy
├── glossary.md # Domain terminology
├── user-guide.md # API usage examples
├── advanced-configuration.md # Environment config
├── performance.md # Benchmarks
├── security.md # Security measures
├── operational.md # Operations guide
├── onboarding.md # Contributor guide
├── community-and-support.md # Support channels
├── legal-and-licensing.md # License info
├── release-notes.md # Release process
└── versioning.md # Versioning policy
Expected Verification Result
All verification checks pass:
- Technology stack matches reality (and the profile)
- All directory paths exist
- All commands work
- All links resolve
Related Skills
Skill Relationship:
- documentation-creation (this skill): create initial documentation
from scratch
- documentation-sync: keep existing documentation updated when code
changes
Quick Commands
ls -laR "$SRC"/ | head -50
find "$SRC" -path "*/Entity/*.php"
find "$SRC" -name "*Command.php"
grep -E "^[a-zA-Z][a-zA-Z0-9_-]*:" Makefile
grep -i "fpm\|franken" Dockerfile
grep -iE "mysql|mariadb|postgres|mongo" docker-compose.yml
grep -i "php:" Dockerfile
grep -i "<framework.name>" composer.json