Paths: File paths (shared/, references/, ../ln-*) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.
DevOps Documentation Creator
L3 Worker that creates infrastructure.md and runbook.md. Infrastructure inventory is always created; runbook is conditional on Docker presence.
Purpose & Scope
- Creates infrastructure.md (always) — declarative inventory: WHAT is deployed WHERE
- Creates runbook.md (if hasDocker) — procedural guide: HOW to deploy/restart/troubleshoot
- Receives Context Store from ln-110-project-docs-coordinator
- Never gathers context itself; uses coordinator input
Invocation (who/when)
- ln-110-project-docs-coordinator: ALWAYS invoked (infrastructure.md is unconditional)
- Never called directly by users
Inputs
From coordinator:
contextStore: Context Store with DevOps-specific data
- DOCKER_COMPOSE_DEV (development setup)
- DOCKER_COMPOSE_PROD (production setup)
- ENV_VARIABLES (from .env.example)
- STARTUP_SEQUENCE (services order)
- DEPLOYMENT_TARGET (AWS, Vercel, Heroku)
- CI_CD_PIPELINE (from .github/workflows)
- DOCKER_SERVICES (parsed from docker-compose.yml services)
- DEPLOYMENT_SCALE ("single" | "multi" | "auto-scaling" | "gpu-based")
- DEVOPS_CONTACTS (from CODEOWNERS, package.json author, git log)
- HAS_GPU (detected from docker-compose nvidia runtime)
- SERVER_INVENTORY (from SSH config, deploy targets)
- DOMAIN_DNS (from docker-compose VIRTUAL_HOST vars, nginx configs)
- ARTIFACT_REPOSITORY (from .env registry URLs, .npmrc, pip.conf)
- HOST_REQUIREMENTS (from docker-compose deploy.resources.limits)
targetDir: Project root directory
flags: { hasDocker }
Documents Created (2: 1 always + 1 conditional)
| File |
Condition |
Questions |
Auto-Discovery |
| docs/project/infrastructure.md |
Always |
Q52-Q55 |
Medium |
| docs/project/runbook.md |
hasDocker |
Q46-Q51 |
High |
Workflow
Phase 1: Check Conditions
- Parse flags from coordinator
- infrastructure.md: ALWAYS proceeds (no condition check)
- runbook.md: Create ONLY if
hasDocker=true
- If target file already exists: skip that file (idempotent)
Phase 2a: Create infrastructure.md (unconditional)
- Check if
docs/project/infrastructure.md exists
- If exists: skip with log
- If not exists:
- Copy
references/templates/infrastructure_template.md
- Replace placeholders with Context Store values
- Populate Server Inventory from SERVER_INVENTORY
- Populate Port Allocation from DOCKER_SERVICES port mappings
- Populate Deployed Services from DOCKER_SERVICES
- Populate CI/CD Pipeline from CI_CD_PIPELINE
- Mark
[TBD: X] for missing data
- Conditional Section Pruning:
- If no CI/CD detected: mark CI/CD Pipeline section as
[TBD: Configure CI/CD]
- If no ARTIFACT_REPOSITORY: mark Artifact Repository as
[TBD: Configure registry]
- If single server / no SERVER_INVENTORY: simplify to single-column table
- If !HAS_GPU: remove GPU column from Server Inventory and Deployed Services
- Populate Deployed Services ONLY from DOCKER_SERVICES (no generic examples)
Phase 2b: Create runbook.md (conditional)
- If
!hasDocker: skip entirely
- Check if
docs/project/runbook.md exists
- If exists: skip with log
- If not exists:
- Copy
references/templates/runbook_template.md
- Replace placeholders with Context Store values
- Populate setup steps from package.json scripts
- Extract env vars from .env.example
- Mark
[TBD: X] for missing data
- Conditional Section Pruning:
- If DEPLOYMENT_SCALE != "multi" or "auto-scaling": Remove scaling/load balancer sections
- If !HAS_GPU: Remove GPU-related sections (nvidia runtime, CUDA)
- If service not in DOCKER_SERVICES: Remove that service's examples
- If DEVOPS_CONTACTS empty: Mark as
[TBD: Provide DevOps team contacts via Q50]
- Populate service dependencies ONLY from DOCKER_SERVICES
- Populate port mapping ONLY from docker-compose.yml ports section
Phase 3: Self-Validate
For infrastructure.md:
- Check SCOPE tag
- Validate sections: Server Inventory, Port Allocation, Deployed Services
- Check no procedural content leaked (belongs in runbook.md)
- Check Maintenance section
For runbook.md (if created):
- Check SCOPE tag
- Validate sections: Local Development Setup, Deployment, Troubleshooting
- Check env vars documented
- Check Maintenance section
Phase 4: Return Status
{
"created": ["docs/project/infrastructure.md", "docs/project/runbook.md"],
"skipped": [],
"tbd_count": 3,
"validation": "OK"
}
Critical Notes
Core Rules
- infrastructure.md: Always created, no condition
- runbook.md: Conditional on hasDocker
- Heavy auto-discovery: Most data from docker-compose.yml, .env.example, package.json, SSH config
- Reproducible: Setup steps must be testable and repeatable
- Idempotent: Never overwrite existing files
NO_CODE_EXAMPLES Rule (MANDATORY)
Both documents describe inventory/procedures, NOT implementations:
- FORBIDDEN: Full Docker configs, CI/CD pipelines (>5 lines), full nginx configs
- ALLOWED: Command examples (1-3 lines), env var tables, step lists, verification commands
- INSTEAD OF CODE: "See docker-compose.yml"
Stack Adaptation Rule (MANDATORY)
- Commands must match project stack (npm vs pip vs go)
- Link to correct cloud provider docs (AWS/Azure/GCP)
- Never mix stack references (no npm commands in Python project)
Format Priority (MANDATORY)
Tables (env vars, ports, services, servers) > Lists (setup steps) > Text
Definition of Done
- infrastructure.md created (always)
- runbook.md created if hasDocker
- Infrastructure: server inventory, ports, services documented
- Runbook: setup steps, deployment, troubleshooting documented
- All env vars from .env.example included in runbook
- Actuality verified: all document facts match current code (paths, functions, APIs, configs exist and are accurate)
- Status returned to coordinator
Reference Files
- Templates:
references/templates/infrastructure_template.md, references/templates/runbook_template.md
- Questions:
references/questions_devops.md (Q46-Q51 runbook, Q52-Q55 infrastructure)
Version: 2.0.0
Last Updated: 2025-01-12
1---2name: ln-115-devops-docs-creator3description: Creates infrastructure.md (always) and runbook.md (if hasDocker). DevOps documentation worker.4license: MIT5---67> **Paths:** File paths (`shared/`, `references/`, `../ln-*`) are relative to skills repo root. If not found at CWD, locate this SKILL.md directory and go up one level for repo root.89# DevOps Documentation Creator1011L3 Worker that creates infrastructure.md and runbook.md. Infrastructure inventory is always created; runbook is conditional on Docker presence.1213## Purpose & Scope14- Creates infrastructure.md (always) — declarative inventory: WHAT is deployed WHERE15- Creates runbook.md (if hasDocker) — procedural guide: HOW to deploy/restart/troubleshoot16- Receives Context Store from ln-110-project-docs-coordinator17- Never gathers context itself; uses coordinator input1819## Invocation (who/when)20- **ln-110-project-docs-coordinator:** ALWAYS invoked (infrastructure.md is unconditional)21- Never called directly by users2223## Inputs24From coordinator:25- `contextStore`: Context Store with DevOps-specific data26 - DOCKER_COMPOSE_DEV (development setup)27 - DOCKER_COMPOSE_PROD (production setup)28 - ENV_VARIABLES (from .env.example)29 - STARTUP_SEQUENCE (services order)30 - DEPLOYMENT_TARGET (AWS, Vercel, Heroku)31 - CI_CD_PIPELINE (from .github/workflows)32 - DOCKER_SERVICES (parsed from docker-compose.yml services)33 - DEPLOYMENT_SCALE ("single" | "multi" | "auto-scaling" | "gpu-based")34 - DEVOPS_CONTACTS (from CODEOWNERS, package.json author, git log)35 - HAS_GPU (detected from docker-compose nvidia runtime)36 - SERVER_INVENTORY (from SSH config, deploy targets)37 - DOMAIN_DNS (from docker-compose VIRTUAL_HOST vars, nginx configs)38 - ARTIFACT_REPOSITORY (from .env registry URLs, .npmrc, pip.conf)39 - HOST_REQUIREMENTS (from docker-compose deploy.resources.limits)40- `targetDir`: Project root directory41- `flags`: { hasDocker }4243## Documents Created (2: 1 always + 1 conditional)4445| File | Condition | Questions | Auto-Discovery |46|------|-----------|-----------|----------------|47| docs/project/infrastructure.md | Always | Q52-Q55 | Medium |48| docs/project/runbook.md | hasDocker | Q46-Q51 | High |4950## Workflow5152### Phase 1: Check Conditions531. Parse flags from coordinator542. infrastructure.md: ALWAYS proceeds (no condition check)553. runbook.md: Create ONLY if `hasDocker=true`564. If target file already exists: skip that file (idempotent)5758### Phase 2a: Create infrastructure.md (unconditional)591. Check if `docs/project/infrastructure.md` exists602. If exists: skip with log613. If not exists:62 - Copy `references/templates/infrastructure_template.md`63 - Replace placeholders with Context Store values64 - Populate Server Inventory from SERVER_INVENTORY65 - Populate Port Allocation from DOCKER_SERVICES port mappings66 - Populate Deployed Services from DOCKER_SERVICES67 - Populate CI/CD Pipeline from CI_CD_PIPELINE68 - Mark `[TBD: X]` for missing data694. **Conditional Section Pruning:**70 - If no CI/CD detected: mark CI/CD Pipeline section as `[TBD: Configure CI/CD]`71 - If no ARTIFACT_REPOSITORY: mark Artifact Repository as `[TBD: Configure registry]`72 - If single server / no SERVER_INVENTORY: simplify to single-column table73 - If !HAS_GPU: remove GPU column from Server Inventory and Deployed Services74 - Populate Deployed Services ONLY from DOCKER_SERVICES (no generic examples)7576### Phase 2b: Create runbook.md (conditional)771. If `!hasDocker`: skip entirely782. Check if `docs/project/runbook.md` exists793. If exists: skip with log804. If not exists:81 - Copy `references/templates/runbook_template.md`82 - Replace placeholders with Context Store values83 - Populate setup steps from package.json scripts84 - Extract env vars from .env.example85 - Mark `[TBD: X]` for missing data865. **Conditional Section Pruning:**87 - If DEPLOYMENT_SCALE != "multi" or "auto-scaling": Remove scaling/load balancer sections88 - If !HAS_GPU: Remove GPU-related sections (nvidia runtime, CUDA)89 - If service not in DOCKER_SERVICES: Remove that service's examples90 - If DEVOPS_CONTACTS empty: Mark as `[TBD: Provide DevOps team contacts via Q50]`91 - Populate service dependencies ONLY from DOCKER_SERVICES92 - Populate port mapping ONLY from docker-compose.yml ports section9394### Phase 3: Self-Validate95**For infrastructure.md:**961. Check SCOPE tag972. Validate sections: Server Inventory, Port Allocation, Deployed Services983. Check no procedural content leaked (belongs in runbook.md)994. Check Maintenance section100101**For runbook.md (if created):**1021. Check SCOPE tag1032. Validate sections: Local Development Setup, Deployment, Troubleshooting1043. Check env vars documented1054. Check Maintenance section106107### Phase 4: Return Status108```json109{110 "created": ["docs/project/infrastructure.md", "docs/project/runbook.md"],111 "skipped": [],112 "tbd_count": 3,113 "validation": "OK"114}115```116117## Critical Notes118119### Core Rules120- **infrastructure.md:** Always created, no condition121- **runbook.md:** Conditional on hasDocker122- **Heavy auto-discovery:** Most data from docker-compose.yml, .env.example, package.json, SSH config123- **Reproducible:** Setup steps must be testable and repeatable124- **Idempotent:** Never overwrite existing files125126### NO_CODE_EXAMPLES Rule (MANDATORY)127Both documents describe **inventory/procedures**, NOT implementations:128- **FORBIDDEN:** Full Docker configs, CI/CD pipelines (>5 lines), full nginx configs129- **ALLOWED:** Command examples (1-3 lines), env var tables, step lists, verification commands130- **INSTEAD OF CODE:** "See [docker-compose.yml](../docker-compose.yml)"131132### Stack Adaptation Rule (MANDATORY)133- Commands must match project stack (npm vs pip vs go)134- Link to correct cloud provider docs (AWS/Azure/GCP)135- Never mix stack references (no npm commands in Python project)136137### Format Priority (MANDATORY)138Tables (env vars, ports, services, servers) > Lists (setup steps) > Text139140## Definition of Done141- infrastructure.md created (always)142- runbook.md created if hasDocker143- Infrastructure: server inventory, ports, services documented144- Runbook: setup steps, deployment, troubleshooting documented145- All env vars from .env.example included in runbook146- **Actuality verified:** all document facts match current code (paths, functions, APIs, configs exist and are accurate)147- Status returned to coordinator148149## Reference Files150- Templates: `references/templates/infrastructure_template.md`, `references/templates/runbook_template.md`151- Questions: `references/questions_devops.md` (Q46-Q51 runbook, Q52-Q55 infrastructure)152153---154**Version:** 2.0.0155**Last Updated:** 2025-01-12