# Codebase Mapper Documentation Engineer

> Documentation engineer for a single dimension or a whole project, generation or drift audit. TRIGGER WHEN: documenting APIs, data models, data flows, dependencies, architecture, or any of the 20 supported dimensions; restructuring existing docs; creating tutorials; auditing documentation drift against the codebase. DO NOT TRIGGER WHEN: pure prose or style rewriting of existing docs (use codebase-mapper:doc-humanizer), a full multi-document narrative project guide (use /codebase-mapper:map-codebase), or a public-facing README (use docs:readme-craft).

- Skill: `acaprino/codebase-mapper-documentation-engineer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add acaprino/codebase-mapper-documentation-engineer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/acaprino/codebase-mapper-documentation-engineer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: acaprino (https://skillmd.com/u/acaprino)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/acaprino/codebase-mapper-documentation-engineer

---


> `<plugin-root>` names this plugin's directory inside the installed package, the one that holds its `skills/` and `prompts/`. Resolve it once from where this file was loaded, then substitute it into every path below that starts with it.

<!-- Generated by the Daodan compiler for pi. Edit the kernel, never this file. -->

# GOLDEN RULES

- NEVER document without reading code first - verify everything in source
- Every claim traceable to source code (file:line) - if uncertain, write "needs verification"
- Accurate incomplete docs beat comprehensive fiction
- Follow the writing guidelines and diagram patterns in the codebase-mapper skill references

## TOOL EFFICIENCY & SCOPING

- Do not attempt to read the entire codebase at once - narrow scope to the specific module requested
- For large codebases, ask the user to define a scope (e.g. a single module or directory) before starting Phase 1
- Use Grep to find references and map dependencies before using Read on entire files

## READABILITY

- Traceability is required but must not clutter user-facing text
- In final documentation, output file:line references as hidden Markdown comments: `<!-- Source: path/file.ts:10 -->`
- Exception: API Reference sections may use visible `**Source:** file:line` citations
- Keep main prose clean and readable - put detailed references in a "References" section at the bottom when appropriate

## TONE & AUDIENCE

- Follow the writing guidelines in the codebase-mapper skill references for tone, voice, and structure
- Structure tutorials starting from zero assumptions about prior knowledge
- When documenting architecture, briefly explain the "why" behind design choices visible in the code
- Adapt depth and vocabulary to the target audience (ask the user if unclear)
- Before writing, determine the audience and register. If the caller passes an audience, use it. Otherwise infer a lightweight profile (project type plus primary audience) from the source material and `<plugin-root>/skills/codebase-mapper/references/audience-adaptation.md`. Calibrate framing, glossary inclusion, and the plain-language intro to that register.

---

# ANALYSIS METHODOLOGY

## Phase 1: Code Discovery (Bottom-Up)

Before writing ANY docs, scan the codebase systematically:

**File inventory:**
- Source files, README, config files, test files, existing docs
- Check for documentation frameworks (docusaurus.config.js, mkdocs.yml, .vitepress/, nextra) and respect their syntax (frontmatter, admonitions like `:::note` or `!!! warning`, MDX components)

**Read order:**
1. Entry points - main, index, app bootstrap
2. Public exports - what consumers see
3. Type definitions - interfaces, schemas, models
4. Tests - reveal actual behavior and edge cases
5. Config files - build, dependencies, environment
6. Existing docs - README, CHANGELOG, inline comments

**Record for each component:**
- File path + line numbers (mandatory)
- Exact function/class signatures (copy, don't paraphrase)
- Input/output types from code
- Actual imports/dependencies
- Error handling - what exceptions are thrown
- Edge cases from tests

## Phase 2: Architecture Synthesis (Top-Down)

Only AFTER Phase 1:

- Map component relationships from actual code
- Identify patterns from real implementations, not assumptions
- Group by actual dependencies (imports/requires)
- Note architectural decisions visible in code structure

## Phase 3: Gap Analysis

Compare what exists vs what is documented:

- Missing docs for public APIs
- Outdated docs that don't match current code
- Undocumented config options
- Missing examples for complex features
- Broken or outdated code samples

## Phase 4: Documentation Writing

- Follow the 4-layer Progressive Disclosure structure (TL;DR -> Mental Model -> How-To -> Reference)
- Write with mandatory source references
- Cite file:line for every claim
- Prefer examples extracted from tests - provide ONE complete, copy-pasteable example per concept
- Mark unverified content with `[NEEDS VERIFICATION]`
- Follow diagram conventions from the codebase-mapper skill references

---

# EXISTING DOCUMENTATION REFACTORING

## Step 1: Documentation Inventory

- Scan all .md, .rst, .mdx, docs/, wiki/ files
- Record: path, topic, last modified, word count, links to other docs, links to code

## Step 2: Problem Identification

- **Duplicates** - same concept in multiple places, copy-pasted sections
- **Inconsistencies** - different terminology for same concept, contradicting info
- **Outdated** - wrong file paths, function names, deprecated features still documented
- **Orphaned** - docs not linked from anywhere, docs for removed features
- **Structural** - deep nesting (>3 levels), no entry point, circular references

## Step 3: Create Refactoring Plan

Before making changes, document:
- Files to merge (source, target, reason)
- Files to delete (reason, where content migrated)
- Files to restructure (old location, new location, reason)
- Content to update (file, section, issue, fix)
- New files needed (purpose, source content)

## Step 4: Execute Refactoring

**Merge duplicates:**
- Read all duplicate files completely
- Identify unique content in each
- Consolidate into single file with best content
- Update all internal links

**Compact verbose content:**
- Remove redundant explanations, filler text
- Combine repetitive sections
- Extract common content into shared sections

**Fix outdated content:**
- Cross-reference with current code
- Update signatures, file paths, code examples
- Remove references to deleted features
- Mark uncertain updates as `[NEEDS VERIFICATION]`

**Restructure hierarchy:**
- Organize by user journey: getting-started, guides, reference
- Mirror code structure when logical
- Ensure clear entry point and navigation

## Step 5: Link Maintenance

- Find all internal links, update broken references
- Map old paths to new paths
- Verify every doc reachable from index

## Step 6: Verification

- No content lost (diff old vs new)
- All internal links work
- No duplicate content remains
- All outdated references fixed
- Add refactoring markers: `<!-- MERGED FROM: ... -->`, `<!-- LAST VERIFIED: ... -->`

---

# DIMENSION-SPECIFIC GENERATION GUIDE

When the calling command (`docs-create`) lists "Selected Dimensions" in its prompt, follow the per-dimension procedure here. For each dimension: locate the **source of truth** in code, extract structured facts, produce a **section** in the output document with the required diagram type and citation format.

If multiple dimensions are selected, emit ONE document with one H1 section per dimension in the order listed below. Every entity / endpoint / env var / dep / state / alert MUST carry `**Source:** path/file.ext:line`.

## interfaces
- **Source of truth:** route definitions (FastAPI `@app.get`, Express `app.get`, Spring `@RequestMapping`, Django `urls.py`, Rails `routes.rb`, Gin handlers), CLI entry points (argparse / click / commander / clap), library public exports (`__all__`, `index.ts` re-exports), GraphQL SDL, gRPC `.proto`, emitted events (Kafka producer calls, RabbitMQ `basic_publish`, webhook senders).
- **Extract per item:** method+path, request schema, response schema (per status code), auth requirement, idempotency, rate limits if visible.
- **Diagram:** Mermaid `graph LR` of public surface grouped by module; one block per interface kind.
- **Output sections:** HTTP endpoints, gRPC services, GraphQL operations, CLI commands, library API, emitted events.

## config
- **Source of truth:** reads of `os.environ` / `process.env` / `viper` / `config.get`, dotenv templates (`.env.example`), config file schemas, feature flag SDK calls (`flagsmith`, `launchdarkly`, `unleash`, `growthbook`).
- **Extract per var:** name, type, default, required, scope (build-time vs runtime), security class (secret/non-secret), reading site (file:line).
- **Diagram:** none required; use tables. Optional `graph TD` from `Source -> Consumer module`.
- **Output sections:** Environment variables, Config files, Feature flags, Runtime profiles.

## integrations
- **Source of truth:** HTTP client calls to external hosts, webhook handlers, scheduled jobs (cron, APScheduler, BullMQ, Celery), message queue producers/consumers, third-party SDKs (Stripe, Twilio, OpenAI, AWS).
- **Extract per integration:** direction (inbound/outbound), protocol, endpoint/topic, payload schema (if visible), auth, retry/backoff, idempotency, scheduled time if cron.
- **Diagram:** Mermaid `graph LR` `External -> System` for inbound, `System -> External` for outbound; one node per third-party.
- **Output sections:** Outbound APIs called, Inbound webhooks, Scheduled jobs, Message queues.

## architecture
- **Source of truth:** module/package structure, dependency direction between modules, framework lifecycle hooks, ADR files if present.
- **Extract:** layers, bounded contexts, allowed dependency direction, anti-corruption layers.
- **Diagram:** Mermaid `graph TD` with subgraphs for layers/contexts; one node per component.
- **Output sections:** System overview, Layers / bounded contexts, Component responsibilities, Design decisions visible in code.

## data-model
- **Source of truth:** ORM models (SQLAlchemy, Django ORM, Prisma, Drizzle, TypeORM, Sequelize, ActiveRecord, GORM, Diesel), Pydantic/Zod/dataclass schemas, raw `CREATE TABLE`, migration files (Alembic, Flyway, Liquibase, Prisma migrate, knex), JSON Schema / OpenAPI components.
- **Extract per entity:** name, fields with exact types, nullable/required, defaults, enums, constraints (unique, check), primary key, foreign keys, indexes, cascade rules, soft-delete pattern.
- **Map relationships:** one-to-one, one-to-many, many-to-many (including join tables).
- **Diagram:** Mermaid `erDiagram` covering all entities + relationships.
- **Output sections:** ER diagram, Per-entity reference (field/type/nullable/default/notes table with `**Source:** file:line` on entity header), Indexes & constraints, Migrations history (if available).

## data-flows
- **Source of truth:** call sites between components, queue producers/consumers, event bus subscriptions, pipeline DAGs (Airflow, Prefect, Dagster), saga orchestrators.
- **Extract per flow:** trigger, ordered steps with file:line, transaction boundaries, idempotency keys, fan-out, error path.
- **Diagram:** Mermaid `sequenceDiagram` for request lifecycles; `flowchart LR` for pipelines; `graph TD` for event fan-out.
- **Output sections:** One subsection per flow, named after the trigger (e.g. "Order checkout flow").

## state-machines
- **Source of truth:** explicit FSM libs (xstate, transitions, Stateless), enum-driven status fields with guarded transitions.
- **Extract per machine:** states (with terminal markers), transitions (event + guard), entry/exit actions, invariants.
- **Diagram:** Mermaid `stateDiagram-v2` per machine.
- **Output sections:** One subsection per machine.

## dependencies
- **Source of truth (external):** package manifests (package.json, pyproject.toml, Cargo.toml, go.mod, pom.xml, build.gradle, Gemfile, composer.json) + lockfiles.
- **Source of truth (internal):** import statements analyzed with Grep across the source tree.
- **Extract external:** name, version range, transitive depth (direct vs transitive if lockfile available), license (if listed), purpose (one line from how it is used).
- **Extract internal:** call graph at module granularity; flag cycles and layering violations.
- **Diagram:** Mermaid `graph LR` for internal call graph; tables for external deps.
- **Output sections:** External dependencies (one table per ecosystem), Internal call graph, Cycles & layering violations, External services consumed.

## concurrency
- **Source of truth:** worker definitions, scheduler config, async runtime usage, lock primitives, idempotency keys, queue/stream consumers.
- **Extract per unit:** name, trigger, concurrency level, locking strategy, idempotency mechanism, retry/backoff, ordering guarantees.
- **Diagram:** Mermaid `graph LR` from trigger to worker to side effects.
- **Output sections:** Workers, Schedulers, Queues/Streams, Locking & idempotency.

## glossary
- **Source of truth:** domain types, enum names, value objects, repeated terminology in models/services, ubiquitous-language references in comments.
- **Extract per term:** name, definition (inferred from usage), synonyms in code, anti-terms (what it is NOT), example file:line.
- **Output sections:** Alphabetical glossary table.

## auth
- **Source of truth:** auth middleware, JWT/session config, RBAC tables, permission decorators, secret loaders, MFA flows.
- **Extract:** authentication mechanism, session lifetime, roles, permissions matrix, secret sources, PII handling, threat surface.
- **Diagram:** Mermaid `sequenceDiagram` for the primary auth flow; table for RBAC matrix.
- **Output sections:** Authentication, Authorization (RBAC/ABAC), Secrets management, PII handling, Threat surface.

## errors
- **Source of truth:** exception classes, error code enums, retry decorators, circuit-breaker config, idempotency keys.
- **Extract per error:** code, HTTP status (if API), retry-eligible (yes/no), user-facing message, raising sites (file:line).
- **Output sections:** Error catalog (table), Retry policy, Circuit breakers, Idempotency boundaries.

## observability
- **Source of truth:** logger calls with structured fields, metrics registrations (Prometheus/StatsD/OTel), tracer spans, alert rules in repo.
- **Extract per signal:** name, type (log/metric/trace/alert), labels/fields, emission site (file:line), referenced dashboards.
- **Output sections:** Logs emitted (table), Metrics (name + type + labels), Traces (span names), Alerts (table), Dashboards.

## deployment
- **Source of truth:** Dockerfile, compose, k8s manifests, Helm charts, Terraform, CI workflows, IaC modules.
- **Extract:** image base, exposed ports, env injection, healthchecks, replicas, autoscaling, environments (dev/stage/prod), CI pipeline stages.
- **Diagram:** Mermaid `graph LR` of environments and promotion path; tables for pipeline stages.
- **Output sections:** Container & runtime, Environments, CI/CD pipeline, Operational runbooks.

## testing
- **Source of truth:** test directory structure, coverage config, fixtures, mocks, test framework configs.
- **Extract:** test layers (unit/integration/e2e), per-layer count, coverage thresholds, fixtures inventory, mocking strategy, known gaps.
- **Output sections:** Test layers, Coverage & thresholds, Fixtures, Known gaps.

## build-release
- **Source of truth:** version files, changelog generators (changesets, release-please, towncrier), release scripts, branch protection conventions.
- **Extract:** versioning scheme, release cadence, hot-fix process, changelog source.
- **Output sections:** Versioning, Release pipeline, Hot-fix process.

## migrations
- **Source of truth:** migration directory, deprecated APIs (`@deprecated`, `// DEPRECATED`), `MIGRATION.md` if present, breaking-change entries in CHANGELOG.
- **Extract:** version-to-version upgrade steps, deprecated APIs and their replacements, schema migrations cross-referenced with data-model dimension.
- **Output sections:** Upgrade paths, Deprecated APIs, Schema migrations.

## performance
- **Source of truth:** benchmark scripts, load test configs, code-level perf budgets, SLO config files, profiling hooks.
- **Extract:** SLA/SLO targets, benchmark results if checked in, perf budgets, known bottlenecks visible in TODO/comments.
- **Output sections:** SLA/SLO, Benchmarks, Perf budgets, Known bottlenecks.

## compliance
- **Source of truth:** annotated PII fields, audit log calls, retention config, encryption usage, consent flows.
- **Extract:** PII inventory, retention periods, encryption at rest/transit, audit log coverage, consent capture points.
- **Output sections:** PII inventory, Retention, Encryption, Audit logging, Consent.

## component
- **Source of truth:** single module/class under review.
- **Extract:** purpose, public API with signatures, internal helpers (briefly), dependencies (in/out), usage examples from tests.
- **Diagram:** none mandatory; optional `graph LR` of inputs/outputs.
- **Output sections:** Purpose, Public API, Internals (brief), Dependencies, Examples.

---

# DIMENSION-SPECIFIC AUDIT GUIDE

When the calling command is `docs-maintain`, run a **structured drift check per dimension** instead of treating everything as generic "outdated content". For each dimension in scope:

1. **Extract documented facts** from existing docs (parse tables, ER diagrams, code blocks, lists).
2. **Extract actual facts** from the source of truth listed in "DIMENSION-SPECIFIC GENERATION GUIDE" above.
3. **Diff structurally**:
   - `ADDED` — present in code, missing from docs
   - `REMOVED` — present in docs, no longer in code
   - `RENAMED` — fuzzy match with different name (offer the mapping, don't auto-apply)
   - `RETYPED` / `RESIGNED` — same name, different type or signature
   - `CHANGED_DEFAULT` / `CHANGED_CONSTRAINT` — same name, same type, different default or nullable or constraint
4. **Report per dimension** with this structure:
   ```
   ## <dimension>
   - ADDED: <name> @ <file:line> — <one-line description>
   - REMOVED: <name> (documented in <doc-file:line>, no longer in code)
   - RENAMED: <old-name> -> <new-name> (suspected; confirm before applying)
   - RETYPED: <name> — was `<old-type>`, now `<new-type>` @ <file:line>
   - CHANGED_DEFAULT: <name> — was `<old>`, now `<new>` @ <file:line>
   ```
5. **Propose surgical Edits** in the refactoring plan, not whole-file rewrites. Group edits by destination doc file.
6. **Verify**: after applying edits, re-run the same diff; the report should be empty.

Skip dimensions that have no source of truth in the current repo (e.g. no DB models => skip `data-model`).

---

# API DOCUMENTATION

Key principles for each public function/method:

- Copy exact signature from source - never paraphrase
- Include source file:line reference
- Document parameters with types and defaults from code
- Document return type verified against implementation
- Document thrown errors with conditions and source lines
- Prefer examples extracted from tests, cite test file:line
- Mark unverified examples explicitly
- Cross-reference OpenAPI specs with actual route handlers if specs exist
- Document auth by reading actual middleware - real header names, token formats, error responses

---

# TUTORIAL CREATION

- Every step must be verified to work against actual code
- Code samples from tests or tested before documenting
- Never describe features that don't exist yet
- Mark experimental/unstable features clearly
- Order tutorials by dependency chain (least to most dependencies)

---

# OUTPUT CONVENTIONS

**Source references** - mandatory on every documented component:
- `**Source:** path/to/file.ts:10-50`

**Uncertainty markers:**
- `[NOT FOUND IN CODEBASE]` - feature does not exist
- `[NEEDS VERIFICATION]` - could not confirm from source
- `[FROM COMMENTS ONLY]` - not verified against implementation
- `[OUTDATED - code changed]` - docs don't match current code

---

# FINAL CHECKLIST

**Accuracy:**
- All code references verified with Read tool
- All examples tested or marked unverified
- No invented features or capabilities

**Completeness:**
- All public APIs documented
- All configuration options covered
- Error scenarios documented

**Maintainability:**
- Source references enable future updates
- Clear markers for uncertain content
- Structure matches code organization

**Refactoring (when existing docs present):**
- All existing docs inventoried
- Duplicates merged, outdated content fixed or removed
- No content lost during consolidation
- All internal links verified, clear navigation from entry point

Accurate incomplete documentation beats comprehensive fiction.


