[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M755P6M7GRPS9XMAEYFF1SAS":3,"skill-same:01M755P6M7GRPS9XMAEYFF1SAS":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":37,"ownerDescription":38,"updatedAt":39,"install":40,"resources":52},"01M755P6M7GRPS9XMAEYFF1SAS","x-generate-docs",null,"Documentation automation v2: stack-aware generation consuming documentation.targets from ProjectConfig. Detects documentation type needed (API, README, ADR, changelog, system-architecture) from code changes and stack config, delegates to specialized skills or generates inline. Invokes x-update-system-architecture on architectural change detection.","review-bench\u002Federcnj_ia-dev-environment","review-bench","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F286778065?v=4","01M7517F9NTEPDZDAXJBR30FWT","ReviewBench","01M7517FAC9F4P7TGWCNJ8VYVW",0,"MIT","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-neo4j\u002F.claude\u002Fskills\u002Fx-generate-docs\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: x-generate-docs\ndescription: \"Documentation automation v2: stack-aware generation consuming documentation.targets from ProjectConfig. Detects documentation type needed (API, README, ADR, changelog, system-architecture) from code changes and stack config, delegates to specialized skills or generates inline. Invokes x-update-system-architecture on architectural change detection.\"\nuser-invocable: true\nmodel: sonnet\nallowed-tools: Read, Write, Edit, Bash, Grep, Glob, Skill\nargument-hint: \"[--type api|readme|adr|changelog|all] [--scope path] [--force] [--dry-run] [--legacy-v1]\"\ncontext-budget: medium\nrequires-capabilities: [governance.doc-as-dod]\n---\n\n## Global Output Policy\n\n- **Language**: English ONLY.\n- **Tone**: Technical, Direct, and Concise.\n- **Efficiency**: Remove all conversational fillers and greetings to save tokens.\n\n# Skill: Documentation Automation v2\n\n## Purpose\n\nSingle entry point for generating and updating all project documentation for {{PROJECT_NAME}}. Operates in two modes:\n\n- **`--target-stack-aware` (default, v2):** Reads `documentation.targets` from ProjectConfig (story-0071-0001) and generates only targets relevant to the project stack. Invokes `x-update-system-architecture` (EPIC-0070) when architectural changes are detected.\n- **`--legacy-v1` (deprecated, removed in 2 releases):** Original behavior — uniform auto-detection from `git diff` without stack awareness. Emits visible deprecation warning.\n\n## Triggers\n\n- `\u002Fx-generate-docs` — stack-aware auto-detect from `documentation.targets` (v2 default)\n- `\u002Fx-generate-docs --type api` — generate or update API documentation (OpenAPI\u002FAsyncAPI\u002FgRPC)\n- `\u002Fx-generate-docs --type readme` — update project README.md\n- `\u002Fx-generate-docs --type adr` — delegate to `x-generate-adr`\n- `\u002Fx-generate-docs --type changelog` — delegate to `x-generate-release-changelog`\n- `\u002Fx-generate-docs --type all` — process all applicable documentation targets\n- `\u002Fx-generate-docs --type all --force` — regenerate all regardless of change status\n- `\u002Fx-generate-docs --dry-run` — list what would be updated, without writing\n- `\u002Fx-generate-docs --legacy-v1` — **DEPRECATED** v1 behavior (uniform auto-detect, no stack awareness)\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `--type` | Enum | No | Documentation type: `api`, `readme`, `adr`, `changelog`, `all`. Default: auto-detect from stack config + git diff. |\n| `--scope` | String | No | Path to limit change analysis (e.g., `src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fapi\u002F`). |\n| `--force` | Flag | No | Regenerate even if no changes detected. |\n| `--dry-run` | Flag | No | List what would be updated without writing any file. |\n| `--target-stack-aware` | Flag | No | **(default)** Reads `documentation.targets` from ProjectConfig and generates only targets relevant to the project stack. Invokes `x-update-system-architecture` when architectural changes detected. |\n| `--legacy-v1` | Flag | No | **DEPRECATED** — emits WARNING: \"v1 behavior deprecated; will be removed in 2 releases\". Mutually exclusive with `--target-stack-aware`. |\n\n**Flag conflict:** passing both `--legacy-v1` and `--target-stack-aware` in the same invocation exits with `FLAG_CONFLICT` and lists both flags as mutually exclusive.\n\n## Workflow\n\n```\n1. PARSE      -> Parse arguments; detect mode (v2 default vs --legacy-v1)\n2. LOAD       -> Load documentation.targets from ProjectConfig YAML\n3. DETECT     -> Analyze git diff filtered by active targets\n4. ARCH       -> Detect architectural changes; invoke x-update-system-architecture if needed\n5. DISPATCH   -> Delegate to specialized skills or generate inline\n6. VERIFY     -> Idempotency check (skip if identical)\n7. REPORT     -> Summary of documentation actions taken\n```\n\n### Step 1 — Parse Arguments\n\nDetect mode:\n\n1. If `--legacy-v1` AND `--target-stack-aware` both present → exit `FLAG_CONFLICT` immediately.\n2. If `--legacy-v1` → emit to stderr:\n   ```\n   WARN [x-generate-docs] --legacy-v1 behavior deprecated (EPIC-0071, Rule 19 §Skill Renaming).\n        Will be removed in 2 releases. Remove --legacy-v1 to use stack-aware v2 default.\n   ```\n   Then proceed with v1 workflow (§v1 Fallback below).\n3. Default (no flag or `--target-stack-aware`) → proceed with v2 stack-aware workflow.\n\n### Step 2 — Load documentation.targets (v2 mode)\n\nRead the `documentation` block from project YAML (`iadev.yaml` or `profile.yaml`):\n\n```bash\ncat iadev.yaml 2>\u002Fdev\u002Fnull | grep -A 20 \"^documentation:\" | head -20\n```\n\nIf `documentation.targets` is empty or YAML not found → apply auto-detect defaults based on stack:\n\n| Stack indicator | Auto-detected targets |\n|-----------------|----------------------|\n| `interfaces[].spec=openapi` | `readme`, `openapi`, `adr`, `skill-docs`, `system-architecture`* |\n| `interfaces[].broker` present | `readme`, `asyncapi`, `adr`, `skill-docs`, `system-architecture`* |\n| `interfaces[].spec=proto3` | `readme`, `grpc-proto`, `adr`, `skill-docs`, `system-architecture`* |\n| CLI-only | `readme`, `adr`, `skill-docs`, `system-architecture`* |\n\n*`system-architecture` only auto-detected when `docs\u002Farchitecture\u002Fsystem.md` exists.\n\n**Security validation:** reject any target containing `..` or absolute path. Exit `OPERATIONAL_ERROR` if path traversal detected in targets list.\n\n### Step 3 — Detect Changes (stack-filtered)\n\n```bash\ngit diff --name-only HEAD 2>\u002Fdev\u002Fnull\ngit diff --name-only --cached\ngit ls-files --others --exclude-standard\n```\n\nFilter changed files to only those relevant to active targets. If `--scope` is specified, further limit to that path prefix. If `--force` is NOT set and no relevant changes found → log \"No documentation updates needed for active targets\" and exit 0.\n\n### Step 4 — Architectural Change Detection\n\nDetect new architectural components added in the diff:\n\n```bash\n# New subdirectories in architectural layers\ngit diff --name-only HEAD | grep -E \"^src\u002F.*(application\u002F|domain\u002F|adapter\u002Finbound\u002F|adapter\u002Foutbound\u002F)\" | \\\n  awk -F'\u002F' '{print $1\"\u002F\"$2\"\u002F\"$3\"\u002F\"$4}' | sort -u\n```\n\nA **new architectural component** is: a new subdirectory (not previously in `git log HEAD~1`) under `application\u002F`, `domain\u002F`, `adapter\u002Finbound\u002F\u003Cprotocol>\u002F`, or `adapter\u002Foutbound\u002F\u003Ctechnology>\u002F` containing ≥ 1 file matching `*.java|*.ts|*.py|*.go`.\n\nExclude rename-only moves (detect via `git diff --diff-filter=R`).\n\n**If new architectural component detected AND `system-architecture` is in active targets:**\n\nInvoke `x-update-system-architecture` via INLINE-SKILL (Rule 13 Pattern 1):\n\n```\nInvoke the `x-update-system-architecture` skill via the Skill tool:\n\n    Skill(skill: \"x-update-system-architecture\", model: \"sonnet\", args: \"--component {new_component_name}\")\n```\n[conditional: flag.arch_change_detected]\n\nIf `x-update-system-architecture` is unavailable (skill not found, EPIC-0070 not present):\n```\nWARN [x-generate-docs] x-update-system-architecture unavailable — system.md not updated. Install EPIC-0070 to enable.\n```\nProceed without blocking.\n\n### Step 5 — Dispatch Documentation Generation\n\n#### 5A — Changelog (`--type changelog`)\n\nInvoke `x-generate-release-changelog` via the Skill tool:\n\n```\nInvoke the `x-generate-release-changelog` skill via the Skill tool:\n\n    Skill(skill: \"x-generate-release-changelog\", model: \"sonnet\", args: \"--unreleased\")\n```\n[required]\n\n#### 5B — ADR (`--type adr`)\n\nInvoke `x-generate-adr` via the Skill tool:\n\n```\nInvoke the `x-generate-adr` skill via the Skill tool:\n\n    Skill(skill: \"x-generate-adr\", model: \"sonnet\", args: \"{architecture-plan-path} {story-id}\")\n```\n[optional]\n\nIf no architecture plan found: log \"No architecture plan found for ADR generation\".\n\n#### 5C — API Documentation (`--type api`)\n\nGenerate or update API documentation based on active targets:\n\n**OpenAPI** (when `openapi` in active targets):\n1. Detect new REST endpoints in diff (Spring: `@GetMapping`, `@PostMapping`, `@RequestMapping`; Express: `app.get()`, `app.post()`).\n2. For each new endpoint, check if it appears in `openapi.yaml` \u002F `openapi.json` \u002F `docs\u002Fapi\u002F*.yaml`.\n3. If missing: add the endpoint stub to the OpenAPI spec.\n\n**AsyncAPI** (when `asyncapi` in active targets):\n1. Detect new event publishers\u002Fconsumers (`@KafkaListener`, `@RabbitListener`, `publish()`, `emit()`).\n2. Verify or add event schema entries in `asyncapi.yaml` \u002F `docs\u002Fevents\u002F*.yaml`.\n\n**gRPC Proto** (when `grpc-proto` in active targets):\n1. Detect new service methods in `*.proto` files or gRPC service classes.\n2. Update or create the corresponding `.proto` service definition.\n\n**Security:** Normalize all file paths. Never follow symlinks. Reject paths with `..`.\n\n#### 5D — README (`--type readme`)\n\nUpdate project README.md:\n1. Read current README.md (create from template if missing).\n2. Detect what changed: new skills → update Skills section; new endpoints → update API section; new config → update Configuration section.\n3. Apply targeted updates without removing existing content.\n4. Idempotency: compare before writing — skip if no change.\n\n#### 5E — All (`--type all`)\n\nProcess all active documentation targets. For each target in `documentation.targets` (or auto-detected list), dispatch as described above. Skip targets with no applicable changes (unless `--force`).\n\n### Step 6 — Verify (Idempotency)\n\nAfter each generation:\n1. Confirm no duplicate content was introduced.\n2. Confirm files were actually modified (or correctly skipped).\n3. For markdown files: basic structural validation (no broken headings, no unclosed code blocks).\n\n### Step 7 — Report\n\n```\nDocumentation generation complete:\n  Mode:          stack-aware (v2) | legacy-v1 DEPRECATED\n  Targets:       {active targets list}\n  Files updated:\n    - {relative\u002Fpath\u002Ffile.md} ({type})\n  Delegated to:\n    - x-generate-release-changelog (changelog)\n    - x-generate-adr (adr)\n    - x-update-system-architecture (system-architecture)\n  Skipped:       {types skipped with reason}\n  Warnings:      {any warnings emitted}\n  Duration:      {time}s\n```\n\n## v1 Fallback (`--legacy-v1` mode)\n\nWhen `--legacy-v1` is active, the skill uses the original v1 detection logic:\n\n1. Run `git diff --name-only` for all files (no stack filtering).\n2. Apply original auto-detection rules:\n\n| File Pattern | Inferred Type |\n|-------------|---------------|\n| `*Controller*`, `*Resource*`, `*Handler*`, `*Endpoint*`, `*Route*` | `api` |\n| `*ADR*`, `*Decision*`, `architecture*`, `*adr*` | `adr` |\n| Any commits since last tag (Conventional Commits) | `changelog` |\n| `SKILL.md`, `README*`, `config*`, `setup*`, `*.yaml` (config) | `readme` |\n| No matches | No action |\n\n3. Process all detected types (no stack filter, no `x-update-system-architecture`).\n4. No Highlights block in changelog (v1 format only).\n\nThe `--legacy-v1` flag and v1 code path will be **removed in 2 releases** per Rule 19 §Skill Renaming. Operators on automated pipelines should migrate to the v2 default before the removal release.\n\n## Error Handling\n\n| Scenario | Action |\n|----------|--------|\n| No git repository | Exit `OPERATIONAL_ERROR: not a git repository` |\n| `--legacy-v1` and `--target-stack-aware` both present | Exit `FLAG_CONFLICT` listing both flags |\n| Project YAML not found | Use auto-detect mode with WARN |\n| Delegated skill not available | Log warning, skip that type, continue |\n| Path traversal in `documentation.targets` | Exit `PATH_TRAVERSAL_REJECTED` |\n| Symlink encountered | Skip, log WARN, never follow |\n| Target file is read-only | Report error for that file, continue with others |\n| `x-update-system-architecture` unavailable | Log WARN, continue without arch update |\n\n## Performance Contract\n\n- Total generation time: \u003C 60s for projects with 20+ targets and 10+ skill files.\n- `--dry-run` adds no I\u002FO overhead (read-only diff analysis).\n\n## Integration Notes\n\n| Skill | Relationship | Context |\n|-------|-------------|---------|\n| `x-generate-release-changelog` | delegates-to | Changelog generation is fully delegated |\n| `x-generate-adr` | delegates-to | ADR generation from architecture plans |\n| `x-update-system-architecture` | delegates-to (conditional) | On architectural change detection; EPIC-0070 |\n| `x-validate-docs` | followed-by (Phase 3) | generate runs first; validate confirms freshness |\n| `x-implement-story` | called-by | Phase 3 (Documentation) — story-0071-0006 wires both generate + validate |\n","## Global Output Policy\n\n- **Language**: English ONLY.\n- **Tone**: Technical, Direct, and Concise.\n- **Efficiency**: Remove all conversational fillers and greetings to save tokens.\n\n# Skill: Documentation Automation v2\n\n## Purpose\n\nSingle entry point for generating and updating all project documentation for {{PROJECT_NAME}}. Operates in two modes:\n\n- **`--target-stack-aware` (default, v2):** Reads `documentation.targets` from ProjectConfig (story-0071-0001) and generates only targets relevant to the project stack. Invokes `x-update-system-architecture` (EPIC-0070) when architectural changes are detected.\n- **`--legacy-v1` (deprecated, removed in 2 releases):** Original behavior — uniform auto-detection from `git diff` without stack awareness. Emits visible deprecation warning.\n\n## Triggers\n\n- `\u002Fx-generate-docs` — stack-aware auto-detect from `documentation.targets` (v2 default)\n- `\u002Fx-generate-docs --type api` — generate or update API documentation (OpenAPI\u002FAsyncAPI\u002FgRPC)\n- `\u002Fx-generate-docs --type readme` — update project README.md\n- `\u002Fx-generate-docs --type adr` — delegate to `x-generate-adr`\n- `\u002Fx-generate-docs --type changelog` — delegate to `x-generate-release-changelog`\n- `\u002Fx-generate-docs --type all` — process all applicable documentation targets\n- `\u002Fx-generate-docs --type all --force` — regenerate all regardless of change status\n- `\u002Fx-generate-docs --dry-run` — list what would be updated, without writing\n- `\u002Fx-generate-docs --legacy-v1` — **DEPRECATED** v1 behavior (uniform auto-detect, no stack awareness)\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `--type` | Enum | No | Documentation type: `api`, `readme`, `adr`, `changelog`, `all`. Default: auto-detect from stack config + git diff. |\n| `--scope` | String | No | Path to limit change analysis (e.g., `src\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002Fapi\u002F`). |\n| `--force` | Flag | No | Regenerate even if no changes detected. |\n| `--dry-run` | Flag | No | List what would be updated without writing any file. |\n| `--target-stack-aware` | Flag | No | **(default)** Reads `documentation.targets` from ProjectConfig and generates only targets relevant to the project stack. Invokes `x-update-system-architecture` when architectural changes detected. |\n| `--legacy-v1` | Flag | No | **DEPRECATED** — emits WARNING: \"v1 behavior deprecated; will be removed in 2 releases\". Mutually exclusive with `--target-stack-aware`. |\n\n**Flag conflict:** passing both `--legacy-v1` and `--target-stack-aware` in the same invocation exits with `FLAG_CONFLICT` and lists both flags as mutually exclusive.\n\n## Workflow\n\n```\n1. PARSE      -> Parse arguments; detect mode (v2 default vs --legacy-v1)\n2. LOAD       -> Load documentation.targets from ProjectConfig YAML\n3. DETECT     -> Analyze git diff filtered by active targets\n4. ARCH       -> Detect architectural changes; invoke x-update-system-architecture if needed\n5. DISPATCH   -> Delegate to specialized skills or generate inline\n6. VERIFY     -> Idempotency check (skip if identical)\n7. REPORT     -> Summary of documentation actions taken\n```\n\n### Step 1 — Parse Arguments\n\nDetect mode:\n\n1. If `--legacy-v1` AND `--target-stack-aware` both present → exit `FLAG_CONFLICT` immediately.\n2. If `--legacy-v1` → emit to stderr:\n   ```\n   WARN [x-generate-docs] --legacy-v1 behavior deprecated (EPIC-0071, Rule 19 §Skill Renaming).\n        Will be removed in 2 releases. Remove --legacy-v1 to use stack-aware v2 default.\n   ```\n   Then proceed with v1 workflow (§v1 Fallback below).\n3. Default (no flag or `--target-stack-aware`) → proceed with v2 stack-aware workflow.\n\n### Step 2 — Load documentation.targets (v2 mode)\n\nRead the `documentation` block from project YAML (`iadev.yaml` or `profile.yaml`):\n\n```bash\ncat iadev.yaml 2>\u002Fdev\u002Fnull | grep -A 20 \"^documentation:\" | head -20\n```\n\nIf `documentation.targets` is empty or YAML not found → apply auto-detect defaults based on stack:\n\n| Stack indicator | Auto-detected targets |\n|-----------------|----------------------|\n| `interfaces[].spec=openapi` | `readme`, `openapi`, `adr`, `skill-docs`, `system-architecture`* |\n| `interfaces[].broker` present | `readme`, `asyncapi`, `adr`, `skill-docs`, `system-architecture`* |\n| `interfaces[].spec=proto3` | `readme`, `grpc-proto`, `adr`, `skill-docs`, `system-architecture`* |\n| CLI-only | `readme`, `adr`, `skill-docs`, `system-architecture`* |\n\n*`system-architecture` only auto-detected when `docs\u002Farchitecture\u002Fsystem.md` exists.\n\n**Security validation:** reject any target containing `..` or absolute path. Exit `OPERATIONAL_ERROR` if path traversal detected in targets list.\n\n### Step 3 — Detect Changes (stack-filtered)\n\n```bash\ngit diff --name-only HEAD 2>\u002Fdev\u002Fnull\ngit diff --name-only --cached\ngit ls-files --others --exclude-standard\n```\n\nFilter changed files to only those relevant to active targets. If `--scope` is specified, further limit to that path prefix. If `--force` is NOT set and no relevant changes found → log \"No documentation updates needed for active targets\" and exit 0.\n\n### Step 4 — Architectural Change Detection\n\nDetect new architectural components added in the diff:\n\n```bash\n# New subdirectories in architectural layers\ngit diff --name-only HEAD | grep -E \"^src\u002F.*(application\u002F|domain\u002F|adapter\u002Finbound\u002F|adapter\u002Foutbound\u002F)\" | \\\n  awk -F'\u002F' '{print $1\"\u002F\"$2\"\u002F\"$3\"\u002F\"$4}' | sort -u\n```\n\nA **new architectural component** is: a new subdirectory (not previously in `git log HEAD~1`) under `application\u002F`, `domain\u002F`, `adapter\u002Finbound\u002F\u003Cprotocol>\u002F`, or `adapter\u002Foutbound\u002F\u003Ctechnology>\u002F` containing ≥ 1 file matching `*.java|*.ts|*.py|*.go`.\n\nExclude rename-only moves (detect via `git diff --diff-filter=R`).\n\n**If new architectural component detected AND `system-architecture` is in active targets:**\n\nInvoke `x-update-system-architecture` via INLINE-SKILL (Rule 13 Pattern 1):\n\n```\nInvoke the `x-update-system-architecture` skill via the Skill tool:\n\n    Skill(skill: \"x-update-system-architecture\", model: \"sonnet\", args: \"--component {new_component_name}\")\n```\n[conditional: flag.arch_change_detected]\n\nIf `x-update-system-architecture` is unavailable (skill not found, EPIC-0070 not present):\n```\nWARN [x-generate-docs] x-update-system-architecture unavailable — system.md not updated. Install EPIC-0070 to enable.\n```\nProceed without blocking.\n\n### Step 5 — Dispatch Documentation Generation\n\n#### 5A — Changelog (`--type changelog`)\n\nInvoke `x-generate-release-changelog` via the Skill tool:\n\n```\nInvoke the `x-generate-release-changelog` skill via the Skill tool:\n\n    Skill(skill: \"x-generate-release-changelog\", model: \"sonnet\", args: \"--unreleased\")\n```\n[required]\n\n#### 5B — ADR (`--type adr`)\n\nInvoke `x-generate-adr` via the Skill tool:\n\n```\nInvoke the `x-generate-adr` skill via the Skill tool:\n\n    Skill(skill: \"x-generate-adr\", model: \"sonnet\", args: \"{architecture-plan-path} {story-id}\")\n```\n[optional]\n\nIf no architecture plan found: log \"No architecture plan found for ADR generation\".\n\n#### 5C — API Documentation (`--type api`)\n\nGenerate or update API documentation based on active targets:\n\n**OpenAPI** (when `openapi` in active targets):\n1. Detect new REST endpoints in diff (Spring: `@GetMapping`, `@PostMapping`, `@RequestMapping`; Express: `app.get()`, `app.post()`).\n2. For each new endpoint, check if it appears in `openapi.yaml` \u002F `openapi.json` \u002F `docs\u002Fapi\u002F*.yaml`.\n3. If missing: add the endpoint stub to the OpenAPI spec.\n\n**AsyncAPI** (when `asyncapi` in active targets):\n1. Detect new event publishers\u002Fconsumers (`@KafkaListener`, `@RabbitListener`, `publish()`, `emit()`).\n2. Verify or add event schema entries in `asyncapi.yaml` \u002F `docs\u002Fevents\u002F*.yaml`.\n\n**gRPC Proto** (when `grpc-proto` in active targets):\n1. Detect new service methods in `*.proto` files or gRPC service classes.\n2. Update or create the corresponding `.proto` service definition.\n\n**Security:** Normalize all file paths. Never follow symlinks. Reject paths with `..`.\n\n#### 5D — README (`--type readme`)\n\nUpdate project README.md:\n1. Read current README.md (create from template if missing).\n2. Detect what changed: new skills → update Skills section; new endpoints → update API section; new config → update Configuration section.\n3. Apply targeted updates without removing existing content.\n4. Idempotency: compare before writing — skip if no change.\n\n#### 5E — All (`--type all`)\n\nProcess all active documentation targets. For each target in `documentation.targets` (or auto-detected list), dispatch as described above. Skip targets with no applicable changes (unless `--force`).\n\n### Step 6 — Verify (Idempotency)\n\nAfter each generation:\n1. Confirm no duplicate content was introduced.\n2. Confirm files were actually modified (or correctly skipped).\n3. For markdown files: basic structural validation (no broken headings, no unclosed code blocks).\n\n### Step 7 — Report\n\n```\nDocumentation generation complete:\n  Mode:          stack-aware (v2) | legacy-v1 DEPRECATED\n  Targets:       {active targets list}\n  Files updated:\n    - {relative\u002Fpath\u002Ffile.md} ({type})\n  Delegated to:\n    - x-generate-release-changelog (changelog)\n    - x-generate-adr (adr)\n    - x-update-system-architecture (system-architecture)\n  Skipped:       {types skipped with reason}\n  Warnings:      {any warnings emitted}\n  Duration:      {time}s\n```\n\n## v1 Fallback (`--legacy-v1` mode)\n\nWhen `--legacy-v1` is active, the skill uses the original v1 detection logic:\n\n1. Run `git diff --name-only` for all files (no stack filtering).\n2. Apply original auto-detection rules:\n\n| File Pattern | Inferred Type |\n|-------------|---------------|\n| `*Controller*`, `*Resource*`, `*Handler*`, `*Endpoint*`, `*Route*` | `api` |\n| `*ADR*`, `*Decision*`, `architecture*`, `*adr*` | `adr` |\n| Any commits since last tag (Conventional Commits) | `changelog` |\n| `SKILL.md`, `README*`, `config*`, `setup*`, `*.yaml` (config) | `readme` |\n| No matches | No action |\n\n3. Process all detected types (no stack filter, no `x-update-system-architecture`).\n4. No Highlights block in changelog (v1 format only).\n\nThe `--legacy-v1` flag and v1 code path will be **removed in 2 releases** per Rule 19 §Skill Renaming. Operators on automated pipelines should migrate to the v2 default before the removal release.\n\n## Error Handling\n\n| Scenario | Action |\n|----------|--------|\n| No git repository | Exit `OPERATIONAL_ERROR: not a git repository` |\n| `--legacy-v1` and `--target-stack-aware` both present | Exit `FLAG_CONFLICT` listing both flags |\n| Project YAML not found | Use auto-detect mode with WARN |\n| Delegated skill not available | Log warning, skip that type, continue |\n| Path traversal in `documentation.targets` | Exit `PATH_TRAVERSAL_REJECTED` |\n| Symlink encountered | Skip, log WARN, never follow |\n| Target file is read-only | Report error for that file, continue with others |\n| `x-update-system-architecture` unavailable | Log WARN, continue without arch update |\n\n## Performance Contract\n\n- Total generation time: \u003C 60s for projects with 20+ targets and 10+ skill files.\n- `--dry-run` adds no I\u002FO overhead (read-only diff analysis).\n\n## Integration Notes\n\n| Skill | Relationship | Context |\n|-------|-------------|---------|\n| `x-generate-release-changelog` | delegates-to | Changelog generation is fully delegated |\n| `x-generate-adr` | delegates-to | ADR generation from architecture plans |\n| `x-update-system-architecture` | delegates-to (conditional) | On architectural change detection; EPIC-0070 |\n| `x-validate-docs` | followed-by (Phase 3) | generate runs first; validate confirms freshness |\n| `x-implement-story` | called-by | Phase 3 (Documentation) — story-0071-0006 wires both generate + validate |\n",{"name":5,"model":24,"description":7,"allowed-tools":25,"argument-hint":26,"context-budget":27,"user-invocable":28,"requires-capabilities":29},"sonnet","Read, Write, Edit, Bash, Grep, Glob, Skill","[--type api|readme|adr|changelog|all] [--scope path] [--force] [--dry-run] [--legacy-v1]","medium",true,[30],"governance.doc-as-dod","main","952a630c6f38d193a349d86fa18db1de8843e837","src\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-neo4j\u002F.claude\u002Fskills\u002Fx-generate-docs",1,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment","https:\u002F\u002Fgithub.com\u002Freview-bench","https:\u002F\u002Freview-bench.ai","An open benchmark for AI code review.","2026-10-27 06:56:37",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":28},[42,45,48],{"tool":43,"command":44},"npx","npx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-generate-docs",{"tool":46,"command":47},"bunx","bunx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-generate-docs",{"tool":49,"command":50},"pnpm","pnpm dlx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-generate-docs","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-neo4j\u002F.claude\u002Fskills\u002Fx-generate-docs\u002FSKILL.md",[53],{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"README.md","REFERENCE","参考文档",3286,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-neo4j\u002F.claude\u002Fskills\u002Fx-generate-docs\u002FREADME.md",[60,67,74,81,88,95],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M757M8J48TQ1Y3X25GSJBXAS","x-parallel-eval","Detects and classifies file-collision risks between work units (tasks, stories, or epic phases) before parallel execution. Reads ## File Footprint blocks produced by x-task-plan \u002F x-story-plan, applies the parallelism-heuristics knowledge pack (hard \u002F regen \u002F soft categories + hotspot overrides), and emits a collision matrix + serialization recommendation in Markdown (default) or JSON.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fx-parallel-eval\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M757M57XMR9546S69466HDWT","parallelism-heuristics","Canonical catalog of file-collision heuristics for parallel task, story, and epic execution. Defines the File Footprint block format, the three Conflict Categories (hard \u002F regen \u002F soft), a hotspot list of high-contention paths, and the degrade-with-warning policy. Consumed by x-task-plan, x-story-plan, x-epic-map, x-parallel-eval, and x-dev-*-implement.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fparallelism-heuristics\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M757M11SZ8P1VCQABT08QVYA","x-watch-pr-ci","Polls a PR's CI checks and Copilot review status, blocking until checks complete or timeout. Returns one of 8 stable exit codes (SUCCESS=0, CI_PENDING_PROCEED=10, CI_FAILED=20, TIMEOUT=30, PR_ALREADY_MERGED=40, NO_CI_CONFIGURED=50, PR_CLOSED=60, PR_NOT_FOUND=70). Writes a versioned state-file for session resume.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-watch-pr-ci\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M757KW53K8KFPGADFB4PH949","x-validate-docs","Documentation freshness gate: validates 6 dimensions (readme, api-specs, grpc-proto, adr, skill-docs, system-architecture) against code changes in a PR. Stack-aware — only validates targets declared\u002Fauto-detected from ProjectConfig.documentation.targets. Returns exit non-zero on staleness; produces structured report.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-validate-docs\u002FSKILL.md",[],[],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":19},"01M757KQZHSA10MKC0CR571D60","x-update-system-architecture","Incrementally updates docs\u002Farchitecture\u002Fsystem.md after an epic completes. Appends new entries to the Decision Log (§11) using x-internal-write-report --append (dedup by ## ID: marker) and surgically inserts component\u002Fintegration changes into sections 1-10 via Edit. Idempotent: re-running with the same epic produces a byte-identical system.md.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-update-system-architecture\u002FSKILL.md",[],[],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":19},"01M757KKBT5Q1SVF8DMJBVF46M","x-update-architecture","Incrementally updates the service architecture document with changes from architecture plans. Adds new components, integrations, flows, and ADR references without rewriting existing content. Use after implementation to keep architecture documentation current.","https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002Fplatform-claude-code\u002F.claude\u002Fskills\u002Fx-update-architecture\u002FSKILL.md",[],[]]