[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M754RMB7WM2T4XCEZ9BECT45":3,"skill-same:01M754RMB7WM2T4XCEZ9BECT45":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":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M754RMB7WM2T4XCEZ9BECT45","x-internal-load-story-context",null,"Loads a story file, validates predecessor dependencies against execution-state.json, executes artifact pre-checks (mtime-based staleness detection across the 7 planning artifacts), classifies scope (SIMPLE \u002F STANDARD \u002F COMPLEX) from task-count + Gherkin-scenario heuristics, and detects planning mode (PRE_PLANNED \u002F HYBRID \u002F INLINE). Replaces ~140 lines of inline Phase 0 logic previously duplicated inside x-implement-story. Fourth skill in the x-internal-* convention (after x-internal-update-status pilot, x-internal-write-report, and x-internal-normalize-args): internal visibility, non-user-invocable, read-only, subdir scoping under internal\u002Fplan\u002F.","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-fintech-pci\u002F.claude\u002Fskills\u002Fx-internal-load-story-context\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: x-internal-load-story-context\ndescription: \"Loads a story file, validates predecessor dependencies against execution-state.json, executes artifact pre-checks (mtime-based staleness detection across the 7 planning artifacts), classifies scope (SIMPLE \u002F STANDARD \u002F COMPLEX) from task-count + Gherkin-scenario heuristics, and detects planning mode (PRE_PLANNED \u002F HYBRID \u002F INLINE). Replaces ~140 lines of inline Phase 0 logic previously duplicated inside x-implement-story. Fourth skill in the x-internal-* convention (after x-internal-update-status pilot, x-internal-write-report, and x-internal-normalize-args): internal visibility, non-user-invocable, read-only, subdir scoping under internal\u002Fplan\u002F.\"\nvisibility: internal\nuser-invocable: false\nallowed-tools: Bash\nargument-hint: \"--story-id \u003Cstory-XXXX-YYYY> --epic-id \u003CXXXX>\"\ncategory: internal-plan\ncontext-budget: medium\nrequires-capabilities: []\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> 🔒 **INTERNAL SKILL**\n> Esta skill é invocada apenas por outras skills (orquestradores).\n> NÃO é destinada a invocação direta pelo usuário.\n> Caller principal: x-implement-story (Phase 0 carve-out).\n> Quarta skill da convenção `x-internal-*` (após x-internal-update-status\n> pilot 0049-0005, x-internal-write-report 0049-0006, e\n> x-internal-normalize-args 0049-0007). Primeira skill na subdir\n> `internal\u002Fplan\u002F` (as três anteriores vivem em `internal\u002Fops\u002F`): o subdir\n> reflete categoria funcional — esta skill orquestra lógica de planejamento\n> (load+classify), não runtime ops (mutate\u002Fwrite).\n\n# Skill: x-internal-load-story-context\n\n## Purpose\n\nCarve out Phase 0 of `x-implement-story` into a single-responsibility,\nread-only Bash pipeline. The skill:\n\n1. Resolves and reads the story file under\n   `ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-YYYY.md`.\n2. Parses Section 1 (Dependencies) and validates each predecessor story\n   reports status `DONE` (or an accepted synonym: `MERGED` \u002F `COMPLETE`)\n   inside `ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json`.\n3. Globs the 7 planning artifacts under `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` and\n   classifies each as `fresh` (artifact mtime ≥ story mtime),\n   `stale` (artifact mtime \u003C story mtime), or `missing`.\n4. Assesses scope from Section 8 task count + Section 7 Gherkin\n   scenario count: `SIMPLE` (≤ 4 tasks), `STANDARD` (5–7 tasks),\n   `COMPLEX` (≥ 8 tasks).\n5. Derives planning mode from artifact classification:\n   `PRE_PLANNED` (all 7 fresh), `HYBRID` (some fresh, some stale or\n   missing), `INLINE` (zero fresh).\n\nThe output is a single-line JSON envelope consumed by\n`x-implement-story` to drive the subsequent Phase 0.5 \u002F Phase 1 \u002F\nPhase 1.5 branching. The skill **never** mutates the filesystem.\n\n## Convention Anchors (x-internal-*)\n\n| Aspect | Value | Rationale |\n| :--- | :--- | :--- |\n| Path | `internal\u002Fplan\u002Fx-internal-load-story-context\u002F` | `internal\u002F` prefix scopes visibility; `plan\u002F` aligns with sibling planning-category skills (x-plan-story, x-epic-map) and separates from `internal\u002Fops\u002F` siblings that mutate state |\n| Frontmatter `visibility` | `internal` | Generator filters these from `\u002Fhelp` menu |\n| Frontmatter `user-invocable` | `false` | Declarative complement to `visibility: internal` |\n| Body marker | `> 🔒 **INTERNAL SKILL**` block as first non-frontmatter content | Visible to humans browsing the repo; no parsing required |\n| Allowed tools | `Bash` only | Minimal surface; all logic is a read-only shell pipeline built on `jq` + `stat` |\n| Naming | `x-internal-{subject}-{action}` | Mirrors Rule 04 skill taxonomy; `story-load-context` = subject+action |\n\nAudit rule: Rule 22 (Lifecycle Integrity) validates every skill under\n`internal\u002F**` satisfies all 6 anchors above. Violations fail the\n`LifecycleIntegrityAuditTest`.\n\n## Triggers\n\nBare-slash form is intentionally omitted — this skill is never invoked\nby a human typing `\u002Fx-internal-load-story-context` in chat. All\ninvocations follow Rule 13 INLINE-SKILL pattern from a calling\norchestrator:\n\n```markdown\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0011 --epic-id 0049\")\n```\n\n## Parameters\n\n| Parameter | Required | Default | Description |\n| :--- | :--- | :--- | :--- |\n| `--story-id \u003Cid>` | M | — | Story identifier (`story-XXXX-YYYY` canonical form) |\n| `--epic-id \u003Cid>` | M | — | 4-digit epic identifier (`XXXX`) — used to resolve `ai\u002Fepics\u002Fepic-XXXX\u002F` |\n\n## Response Contract\n\nWhen successful, the skill writes a single-line JSON object to stdout:\n\n| Field | Type | Always Present | Description |\n| :--- | :--- | :--- | :--- |\n| `storyFile` | `String` | yes | Absolute path to the resolved story markdown |\n| `storyMtime` | `Number` | yes | Unix epoch seconds of the story file's last modification |\n| `dependencies` | `Array\u003C{id:String, status:String}>` | yes | One entry per Section 1 blocker (empty array when `Blocked By: —`) |\n| `scope` | `String` | yes | `SIMPLE` \u002F `STANDARD` \u002F `COMPLEX` |\n| `planningMode` | `String` | yes | `PRE_PLANNED` \u002F `HYBRID` \u002F `INLINE` |\n| `artifacts` | `{fresh:Array\u003CString>, stale:Array\u003CString>, missing:Array\u003CString>}` | yes | Classification of the 7 planning artifact paths (relative to `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F`) |\n| `taskCount` | `Number` | yes | Count of `### TASK-XXXX-YYYY-NNN:` headers under Section 8 |\n| `scenarioCount` | `Number` | yes | Count of `Cenario:` \u002F `Scenario:` markers under Section 7 |\n\nThe seven planning-artifact basenames scanned under\n`ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` are:\n\n1. `plan-story-XXXX-YYYY.md` (implementation plan)\n2. `arch-story-XXXX-YYYY.md` (architecture plan)\n3. `tests-story-XXXX-YYYY.md` (test plan)\n4. `tasks-story-XXXX-YYYY.md` (task breakdown)\n5. `security-story-XXXX-YYYY.md` (security assessment)\n6. `compliance-story-XXXX-YYYY.md` (compliance assessment)\n7. `task-implementation-map-story-XXXX-YYYY.md` (EPIC-0038 map)\n\n## Exit Codes\n\n| Code | Name | Condition | Message Format |\n| :--- | :--- | :--- | :--- |\n| 0 | SUCCESS | Context loaded and emitted | — |\n| 1 | STORY_NOT_FOUND | `ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-YYYY.md` absent | `Story file not found: \u003Cpath>` |\n| 2 | DEPENDENCY_NOT_DONE | Any Section 1 blocker reports non-`DONE` status | `Blocker \u003Cid> is \u003Cstatus>` |\n| 3 | EPIC_NOT_FOUND | `ai\u002Fepics\u002Fepic-XXXX\u002F` absent | `Epic dir not found: ai\u002Fepics\u002Fepic-\u003Cid>` |\n\n## Workflow\n\n### Step 1 — Argument parsing and path resolution\n\nParse `--story-id` and `--epic-id`; reject unknown flags and missing\nrequired flags with exit 64 (sysexits `EX_USAGE`). Derive:\n\n```bash\nepic_dir=\"ai\u002Fepics\u002Fepic-${epic_id}\"\nstory_file=\"${epic_dir}\u002F${story_id}.md\"\nstate_file=\"${epic_dir}\u002Fexecution-state.json\"\nplans_dir=\"${epic_dir}\u002Fplans\"\n```\n\nWhen `${epic_dir}` is not a directory, exit 3 (`EPIC_NOT_FOUND`).\nWhen `${story_file}` is not a regular file, exit 1 (`STORY_NOT_FOUND`).\n\n### Step 2 — Read story mtime and section markers\n\n```bash\nstory_mtime=$(stat -f '%m' \"${story_file}\" 2>\u002Fdev\u002Fnull \\\n            || stat -c '%Y' \"${story_file}\")\n```\n\nExtract Section 1 (Dependencies) between the `## 1. Dependências` \u002F\n`## 1. Dependencies` header and the next `## ` header; extract\nSection 7 (Acceptance Criteria) and Section 8 (Tasks) likewise. The\nparser is tolerant: accepts both Portuguese (`Dependências`, `Cenario`)\nand English (`Dependencies`, `Scenario`) section titles since current\nstories under `ai\u002Fepics\u002Fepic-XXXX\u002F` are authored in Portuguese.\n\n### Step 3 — Parse dependencies from Section 1\n\nSection 1 is a markdown table with columns `Blocked By | Blocks`. The\n`Blocked By` cell is either `—` (empty) or a comma-separated list of\nstory IDs. Collect IDs; for each, resolve its status via\n`execution-state.json`:\n\n```bash\nstatus=$(jq -r \".stories[\\\"${dep_id}\\\"].status \u002F\u002F \\\"UNKNOWN\\\"\" \\\n         \"${state_file}\")\n```\n\nWhen `state_file` is absent, fall back to parsing the dep story's own\n`**Status:**` header inside its markdown file (supports epics where\nexecution-state.json has not yet been initialized). Accepted synonyms\nfor success: `DONE`, `MERGED`, `COMPLETE`, `Concluída`, `Concluida`.\n\nOn any blocker with non-DONE status, exit 2 (`DEPENDENCY_NOT_DONE`)\nwith the offending ID and status in the error message.\n\n### Step 4 — Artifact freshness classification\n\nFor each of the 7 planning-artifact basenames:\n\n```bash\nartifact=\"${plans_dir}\u002F${name}\"\nif [[ ! -f \"${artifact}\" ]]; then\n  missing+=(\"${name}\")\nelif [[ $(stat -f '%m' \"${artifact}\" 2>\u002Fdev\u002Fnull \\\n          || stat -c '%Y' \"${artifact}\") -ge ${story_mtime} ]]; then\n  fresh+=(\"${name}\")\nelse\n  stale+=(\"${name}\")\nfi\n```\n\nArtifacts not present in the plans directory tree (common in early\nstories) populate `missing`. Artifacts with mtime strictly less than\nthe story's mtime populate `stale`. The rest populate `fresh`.\n\n### Step 5 — Scope assessment\n\nCount Section 8 tasks via `grep -cE '^### TASK-[0-9]{4}-[0-9]{4}-[0-9]{3}:'`.\nClassification:\n\n| Task count | Scope |\n| :--- | :--- |\n| ≤ 4 | `SIMPLE` |\n| 5–7 | `STANDARD` |\n| ≥ 8 | `COMPLEX` |\n\nScenario count is computed for telemetry (Section 7 `grep -cE '^(Cenario|Scenario):'`) but does not influence the scope label in this story; reserved for future tuning per story-0049-0011 §3.2.\n\n### Step 6 — Planning mode detection\n\n| Fresh artifact count | Planning mode |\n| :--- | :--- |\n| 7 (all fresh) | `PRE_PLANNED` |\n| 1–6 (mixed) | `HYBRID` |\n| 0 | `INLINE` |\n\n### Step 7 — Emit response envelope\n\nCompose the response using `jq -n` so the shape is authoritative and\nthe stdout stream is a single line terminated by `\\n`:\n\n```bash\njq -nc \\\n  --arg storyFile \"${story_file}\" \\\n  --argjson storyMtime \"${story_mtime}\" \\\n  --argjson dependencies \"${deps_json}\" \\\n  --arg scope \"${scope}\" \\\n  --arg planningMode \"${mode}\" \\\n  --argjson artifacts \"${artifacts_json}\" \\\n  --argjson taskCount \"${task_count}\" \\\n  --argjson scenarioCount \"${scenario_count}\" \\\n  '{storyFile:$storyFile, storyMtime:$storyMtime,\n    dependencies:$dependencies, scope:$scope,\n    planningMode:$planningMode, artifacts:$artifacts,\n    taskCount:$taskCount, scenarioCount:$scenarioCount}'\n```\n\nExit 0.\n\n## Examples\n\n### Example 1 — Happy path: simple story, no dependencies, no planning yet\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0001 --epic-id 0049\")\n```\n\nOutput:\n```json\n{\"storyFile\":\"ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-0001.md\",\"storyMtime\":1745343600,\"dependencies\":[],\"scope\":\"SIMPLE\",\"planningMode\":\"INLINE\",\"artifacts\":{\"fresh\":[],\"stale\":[],\"missing\":[\"plan-story-XXXX-0001.md\",\"arch-story-XXXX-0001.md\",\"tests-story-XXXX-0001.md\",\"tasks-story-XXXX-0001.md\",\"security-story-XXXX-0001.md\",\"compliance-story-XXXX-0001.md\",\"task-implementation-map-story-XXXX-0001.md\"]},\"taskCount\":3,\"scenarioCount\":4}\n```\nExit: 0.\n\n### Example 2 — Dependency not DONE\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0008 --epic-id 0049\")\n```\n\nStderr:\n```\nBlocker story-0049-0001 is PENDING\n```\nExit: 2.\n\n### Example 3 — Planning mode PRE_PLANNED\n\nGiven all 7 artifacts under `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` with mtime ≥ story\nmtime, output includes `\"planningMode\":\"PRE_PLANNED\"` and every\nartifact in `artifacts.fresh`.\n\nExit: 0.\n\n### Example 4 — Boundary: COMPLEX scope (10 tasks)\n\nOutput contains `\"scope\":\"COMPLEX\"` and `\"taskCount\":10`. Exit: 0.\n\n### Example 5 — Missing story file\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-9999-0001 --epic-id 9999\")\n```\n\nStderr:\n```\nEpic dir not found: ai\u002Fepics\u002Fepic-XXXX\n```\nExit: 3.\n\nWhen the epic directory exists but the story file does not:\n\nStderr:\n```\nStory file not found: ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-9999.md\n```\nExit: 1.\n\n## Outputs\n\n| Artifact | Path | Description |\n| :--- | :--- | :--- |\n| Response envelope | stdout | Single-line JSON matching the Response Contract |\n| Error diagnostic | stderr | Single line, non-empty only on exit ≠ 0 |\n\nNo file is created or modified. The skill is **strictly read-only**\n(enforced by convention and by the `allowed-tools: Bash` frontmatter —\nno `Write` \u002F `Edit` tool is available).\n\n## Error Handling\n\n| Scenario | Action |\n| :--- | :--- |\n| Missing required flag | Print `usage:` banner to stderr; exit 64 (sysexits EX_USAGE) |\n| `jq` absent on PATH | Exit 127 with `jq is required`; abort before any stat |\n| `stat` flavour mismatch (GNU vs BSD) | Try `stat -f %m` (BSD) first, fall back to `stat -c %Y` (GNU) |\n| `execution-state.json` absent | Fall back to parsing each dep story's own `**Status:**` header |\n| Dep story file absent AND state file absent | Treat dep status as `UNKNOWN`; exit 2 |\n| Section 1 table unparseable (malformed markdown) | Treat dependencies as empty; log warning to stderr; continue |\n| Unknown section-title language | Try both `Dependências` \u002F `Dependencies`, `Cenario` \u002F `Scenario`; stop at first hit |\n| `task-implementation-map-*` file name variant (legacy `map-story-*`) | Also accept `map-story-XXXX-YYYY.md` as the 7th artifact when the canonical name is missing |\n\n## Performance Contract\n\nTarget: \u003C 500 ms for a typical epic with 20 stories in\n`execution-state.json` and all 7 planning artifacts present. The\nimplementation reads at most 9 files (1 story, 1 state, 7 artifacts\nvia `stat` only — no body read) and spawns a single `jq` invocation\nfor JSON assembly. No network I\u002FO; no recursive traversal beyond\n`ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F`.\n\n## Testing\n\nThe story ships the following acceptance test scenarios, mirroring\nSection 7 of story-0049-0011:\n\n1. **Degenerate — no dependencies.** `story-0049-0001` reports\n   `dependencies=[]` and valid `scope` \u002F `planningMode`.\n2. **Dependency not DONE.** Ancillary story depends on a blocker with\n   `PENDING` status → exit 2, message `\"Blocker \u003Cid> is PENDING\"`.\n3. **Fresh artifacts → PRE_PLANNED.** Fabricate 7 artifacts with\n   mtime > story; assert `planningMode=PRE_PLANNED`.\n4. **Missing story file.** `--story-id story-9999-0001` with epic\n   dir absent → exit 3; epic dir present but story missing → exit 1.\n5. **Boundary — COMPLEX scope.** Story with 10 tasks → `scope=COMPLEX`.\n\nGoldens under\n`src\u002Ftest\u002Fresources\u002Fgolden\u002Finternal\u002Fplan\u002Fx-internal-load-story-context\u002F`\nlock the SKILL.md rendering. Coverage requirement: ≥ 95% line \u002F\n≥ 90% branch across the invoking Bash codepaths.\n\n## Generator Filter Contract\n\nThe `ia-dev-env` generator MUST exclude skills with\n`visibility: internal` from:\n\n1. The `.claude\u002FREADME.md` skill-inventory table.\n2. The `\u002Fhelp` menu listing surfaced by Claude Code.\n3. User-facing autocomplete in the chat input.\n\nInternal skills are still copied into `.claude\u002Fskills\u002F` (flat layout)\nso `Skill(skill: \"x-internal-...\")` invocations from other skills\nresolve correctly. The invariant: **user cannot see them; orchestrators\ncan invoke them.**\n\n## Telemetry\n\nInternal skills DO NOT emit `phase.start` \u002F `phase.end` markers —\ntelemetry is produced by the invoking orchestrator (the `phase`\nwrapping the orchestrator's own step is the correct aggregation\nboundary). Passive hooks still capture `tool.call` for the underlying\n`Bash` invocation.\n\nReference: Rule 13 (Skill Invocation Protocol), Rule 22 (Lifecycle\nIntegrity Audit), ADR-0010 (Interactive Gates Convention — exempts\ninternal skills from the 3-option menu contract).\n\n## Integration Notes\n\n| Skill | Relationship | Context |\n| :--- | :--- | :--- |\n| `x-implement-story` | caller (primary) | Phase 0 carve-out: the skill's stdout envelope replaces ~140 inline lines previously executed by the orchestrator |\n| `x-implement-epic` | caller (indirect, via story-0049-0019 downstream) | Consumes the same envelope when iterating stories at the epic scope |\n| `x-internal-update-status` | peer | Sibling `x-internal-*` skill; this skill *reads* `execution-state.json`, the other *mutates* it; both acquire the same `\u003Cfile>.lock` when their lifetimes overlap (this skill uses `flock -s` shared lock) |\n| `x-internal-normalize-args` | delegate (optional) | Future refactor: the argument parser in Step 1 can be replaced by a call to `x-internal-normalize-args` once its schema-driven mode covers read-only skills |\n| `x-reconcile-status` | consumer (peer) | Reads the same story `**Status:**` header this skill inspects; no shared mutation |\n\nDownstream stories that depend on this carve-out:\nstory-0049-0019 (orchestrator consumes the envelope and deletes the\ninline Phase 0 block).\n\nFull workflow detail (argument-parser rejection matrix, section-extraction\nregex catalogue, artifact-classification edge cases, and the\nexecution-state.json schema contract) lives in\n[`references\u002Ffull-protocol.md`](references\u002Ffull-protocol.md) per\nADR-0011.\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> 🔒 **INTERNAL SKILL**\n> Esta skill é invocada apenas por outras skills (orquestradores).\n> NÃO é destinada a invocação direta pelo usuário.\n> Caller principal: x-implement-story (Phase 0 carve-out).\n> Quarta skill da convenção `x-internal-*` (após x-internal-update-status\n> pilot 0049-0005, x-internal-write-report 0049-0006, e\n> x-internal-normalize-args 0049-0007). Primeira skill na subdir\n> `internal\u002Fplan\u002F` (as três anteriores vivem em `internal\u002Fops\u002F`): o subdir\n> reflete categoria funcional — esta skill orquestra lógica de planejamento\n> (load+classify), não runtime ops (mutate\u002Fwrite).\n\n# Skill: x-internal-load-story-context\n\n## Purpose\n\nCarve out Phase 0 of `x-implement-story` into a single-responsibility,\nread-only Bash pipeline. The skill:\n\n1. Resolves and reads the story file under\n   `ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-YYYY.md`.\n2. Parses Section 1 (Dependencies) and validates each predecessor story\n   reports status `DONE` (or an accepted synonym: `MERGED` \u002F `COMPLETE`)\n   inside `ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json`.\n3. Globs the 7 planning artifacts under `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` and\n   classifies each as `fresh` (artifact mtime ≥ story mtime),\n   `stale` (artifact mtime \u003C story mtime), or `missing`.\n4. Assesses scope from Section 8 task count + Section 7 Gherkin\n   scenario count: `SIMPLE` (≤ 4 tasks), `STANDARD` (5–7 tasks),\n   `COMPLEX` (≥ 8 tasks).\n5. Derives planning mode from artifact classification:\n   `PRE_PLANNED` (all 7 fresh), `HYBRID` (some fresh, some stale or\n   missing), `INLINE` (zero fresh).\n\nThe output is a single-line JSON envelope consumed by\n`x-implement-story` to drive the subsequent Phase 0.5 \u002F Phase 1 \u002F\nPhase 1.5 branching. The skill **never** mutates the filesystem.\n\n## Convention Anchors (x-internal-*)\n\n| Aspect | Value | Rationale |\n| :--- | :--- | :--- |\n| Path | `internal\u002Fplan\u002Fx-internal-load-story-context\u002F` | `internal\u002F` prefix scopes visibility; `plan\u002F` aligns with sibling planning-category skills (x-plan-story, x-epic-map) and separates from `internal\u002Fops\u002F` siblings that mutate state |\n| Frontmatter `visibility` | `internal` | Generator filters these from `\u002Fhelp` menu |\n| Frontmatter `user-invocable` | `false` | Declarative complement to `visibility: internal` |\n| Body marker | `> 🔒 **INTERNAL SKILL**` block as first non-frontmatter content | Visible to humans browsing the repo; no parsing required |\n| Allowed tools | `Bash` only | Minimal surface; all logic is a read-only shell pipeline built on `jq` + `stat` |\n| Naming | `x-internal-{subject}-{action}` | Mirrors Rule 04 skill taxonomy; `story-load-context` = subject+action |\n\nAudit rule: Rule 22 (Lifecycle Integrity) validates every skill under\n`internal\u002F**` satisfies all 6 anchors above. Violations fail the\n`LifecycleIntegrityAuditTest`.\n\n## Triggers\n\nBare-slash form is intentionally omitted — this skill is never invoked\nby a human typing `\u002Fx-internal-load-story-context` in chat. All\ninvocations follow Rule 13 INLINE-SKILL pattern from a calling\norchestrator:\n\n```markdown\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0011 --epic-id 0049\")\n```\n\n## Parameters\n\n| Parameter | Required | Default | Description |\n| :--- | :--- | :--- | :--- |\n| `--story-id \u003Cid>` | M | — | Story identifier (`story-XXXX-YYYY` canonical form) |\n| `--epic-id \u003Cid>` | M | — | 4-digit epic identifier (`XXXX`) — used to resolve `ai\u002Fepics\u002Fepic-XXXX\u002F` |\n\n## Response Contract\n\nWhen successful, the skill writes a single-line JSON object to stdout:\n\n| Field | Type | Always Present | Description |\n| :--- | :--- | :--- | :--- |\n| `storyFile` | `String` | yes | Absolute path to the resolved story markdown |\n| `storyMtime` | `Number` | yes | Unix epoch seconds of the story file's last modification |\n| `dependencies` | `Array\u003C{id:String, status:String}>` | yes | One entry per Section 1 blocker (empty array when `Blocked By: —`) |\n| `scope` | `String` | yes | `SIMPLE` \u002F `STANDARD` \u002F `COMPLEX` |\n| `planningMode` | `String` | yes | `PRE_PLANNED` \u002F `HYBRID` \u002F `INLINE` |\n| `artifacts` | `{fresh:Array\u003CString>, stale:Array\u003CString>, missing:Array\u003CString>}` | yes | Classification of the 7 planning artifact paths (relative to `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F`) |\n| `taskCount` | `Number` | yes | Count of `### TASK-XXXX-YYYY-NNN:` headers under Section 8 |\n| `scenarioCount` | `Number` | yes | Count of `Cenario:` \u002F `Scenario:` markers under Section 7 |\n\nThe seven planning-artifact basenames scanned under\n`ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` are:\n\n1. `plan-story-XXXX-YYYY.md` (implementation plan)\n2. `arch-story-XXXX-YYYY.md` (architecture plan)\n3. `tests-story-XXXX-YYYY.md` (test plan)\n4. `tasks-story-XXXX-YYYY.md` (task breakdown)\n5. `security-story-XXXX-YYYY.md` (security assessment)\n6. `compliance-story-XXXX-YYYY.md` (compliance assessment)\n7. `task-implementation-map-story-XXXX-YYYY.md` (EPIC-0038 map)\n\n## Exit Codes\n\n| Code | Name | Condition | Message Format |\n| :--- | :--- | :--- | :--- |\n| 0 | SUCCESS | Context loaded and emitted | — |\n| 1 | STORY_NOT_FOUND | `ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-YYYY.md` absent | `Story file not found: \u003Cpath>` |\n| 2 | DEPENDENCY_NOT_DONE | Any Section 1 blocker reports non-`DONE` status | `Blocker \u003Cid> is \u003Cstatus>` |\n| 3 | EPIC_NOT_FOUND | `ai\u002Fepics\u002Fepic-XXXX\u002F` absent | `Epic dir not found: ai\u002Fepics\u002Fepic-\u003Cid>` |\n\n## Workflow\n\n### Step 1 — Argument parsing and path resolution\n\nParse `--story-id` and `--epic-id`; reject unknown flags and missing\nrequired flags with exit 64 (sysexits `EX_USAGE`). Derive:\n\n```bash\nepic_dir=\"ai\u002Fepics\u002Fepic-${epic_id}\"\nstory_file=\"${epic_dir}\u002F${story_id}.md\"\nstate_file=\"${epic_dir}\u002Fexecution-state.json\"\nplans_dir=\"${epic_dir}\u002Fplans\"\n```\n\nWhen `${epic_dir}` is not a directory, exit 3 (`EPIC_NOT_FOUND`).\nWhen `${story_file}` is not a regular file, exit 1 (`STORY_NOT_FOUND`).\n\n### Step 2 — Read story mtime and section markers\n\n```bash\nstory_mtime=$(stat -f '%m' \"${story_file}\" 2>\u002Fdev\u002Fnull \\\n            || stat -c '%Y' \"${story_file}\")\n```\n\nExtract Section 1 (Dependencies) between the `## 1. Dependências` \u002F\n`## 1. Dependencies` header and the next `## ` header; extract\nSection 7 (Acceptance Criteria) and Section 8 (Tasks) likewise. The\nparser is tolerant: accepts both Portuguese (`Dependências`, `Cenario`)\nand English (`Dependencies`, `Scenario`) section titles since current\nstories under `ai\u002Fepics\u002Fepic-XXXX\u002F` are authored in Portuguese.\n\n### Step 3 — Parse dependencies from Section 1\n\nSection 1 is a markdown table with columns `Blocked By | Blocks`. The\n`Blocked By` cell is either `—` (empty) or a comma-separated list of\nstory IDs. Collect IDs; for each, resolve its status via\n`execution-state.json`:\n\n```bash\nstatus=$(jq -r \".stories[\\\"${dep_id}\\\"].status \u002F\u002F \\\"UNKNOWN\\\"\" \\\n         \"${state_file}\")\n```\n\nWhen `state_file` is absent, fall back to parsing the dep story's own\n`**Status:**` header inside its markdown file (supports epics where\nexecution-state.json has not yet been initialized). Accepted synonyms\nfor success: `DONE`, `MERGED`, `COMPLETE`, `Concluída`, `Concluida`.\n\nOn any blocker with non-DONE status, exit 2 (`DEPENDENCY_NOT_DONE`)\nwith the offending ID and status in the error message.\n\n### Step 4 — Artifact freshness classification\n\nFor each of the 7 planning-artifact basenames:\n\n```bash\nartifact=\"${plans_dir}\u002F${name}\"\nif [[ ! -f \"${artifact}\" ]]; then\n  missing+=(\"${name}\")\nelif [[ $(stat -f '%m' \"${artifact}\" 2>\u002Fdev\u002Fnull \\\n          || stat -c '%Y' \"${artifact}\") -ge ${story_mtime} ]]; then\n  fresh+=(\"${name}\")\nelse\n  stale+=(\"${name}\")\nfi\n```\n\nArtifacts not present in the plans directory tree (common in early\nstories) populate `missing`. Artifacts with mtime strictly less than\nthe story's mtime populate `stale`. The rest populate `fresh`.\n\n### Step 5 — Scope assessment\n\nCount Section 8 tasks via `grep -cE '^### TASK-[0-9]{4}-[0-9]{4}-[0-9]{3}:'`.\nClassification:\n\n| Task count | Scope |\n| :--- | :--- |\n| ≤ 4 | `SIMPLE` |\n| 5–7 | `STANDARD` |\n| ≥ 8 | `COMPLEX` |\n\nScenario count is computed for telemetry (Section 7 `grep -cE '^(Cenario|Scenario):'`) but does not influence the scope label in this story; reserved for future tuning per story-0049-0011 §3.2.\n\n### Step 6 — Planning mode detection\n\n| Fresh artifact count | Planning mode |\n| :--- | :--- |\n| 7 (all fresh) | `PRE_PLANNED` |\n| 1–6 (mixed) | `HYBRID` |\n| 0 | `INLINE` |\n\n### Step 7 — Emit response envelope\n\nCompose the response using `jq -n` so the shape is authoritative and\nthe stdout stream is a single line terminated by `\\n`:\n\n```bash\njq -nc \\\n  --arg storyFile \"${story_file}\" \\\n  --argjson storyMtime \"${story_mtime}\" \\\n  --argjson dependencies \"${deps_json}\" \\\n  --arg scope \"${scope}\" \\\n  --arg planningMode \"${mode}\" \\\n  --argjson artifacts \"${artifacts_json}\" \\\n  --argjson taskCount \"${task_count}\" \\\n  --argjson scenarioCount \"${scenario_count}\" \\\n  '{storyFile:$storyFile, storyMtime:$storyMtime,\n    dependencies:$dependencies, scope:$scope,\n    planningMode:$planningMode, artifacts:$artifacts,\n    taskCount:$taskCount, scenarioCount:$scenarioCount}'\n```\n\nExit 0.\n\n## Examples\n\n### Example 1 — Happy path: simple story, no dependencies, no planning yet\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0001 --epic-id 0049\")\n```\n\nOutput:\n```json\n{\"storyFile\":\"ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-0001.md\",\"storyMtime\":1745343600,\"dependencies\":[],\"scope\":\"SIMPLE\",\"planningMode\":\"INLINE\",\"artifacts\":{\"fresh\":[],\"stale\":[],\"missing\":[\"plan-story-XXXX-0001.md\",\"arch-story-XXXX-0001.md\",\"tests-story-XXXX-0001.md\",\"tasks-story-XXXX-0001.md\",\"security-story-XXXX-0001.md\",\"compliance-story-XXXX-0001.md\",\"task-implementation-map-story-XXXX-0001.md\"]},\"taskCount\":3,\"scenarioCount\":4}\n```\nExit: 0.\n\n### Example 2 — Dependency not DONE\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-0049-0008 --epic-id 0049\")\n```\n\nStderr:\n```\nBlocker story-0049-0001 is PENDING\n```\nExit: 2.\n\n### Example 3 — Planning mode PRE_PLANNED\n\nGiven all 7 artifacts under `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F` with mtime ≥ story\nmtime, output includes `\"planningMode\":\"PRE_PLANNED\"` and every\nartifact in `artifacts.fresh`.\n\nExit: 0.\n\n### Example 4 — Boundary: COMPLEX scope (10 tasks)\n\nOutput contains `\"scope\":\"COMPLEX\"` and `\"taskCount\":10`. Exit: 0.\n\n### Example 5 — Missing story file\n\n```bash\nSkill(skill: \"x-internal-load-story-context\",\n      args: \"--story-id story-9999-0001 --epic-id 9999\")\n```\n\nStderr:\n```\nEpic dir not found: ai\u002Fepics\u002Fepic-XXXX\n```\nExit: 3.\n\nWhen the epic directory exists but the story file does not:\n\nStderr:\n```\nStory file not found: ai\u002Fepics\u002Fepic-XXXX\u002Fstory-XXXX-9999.md\n```\nExit: 1.\n\n## Outputs\n\n| Artifact | Path | Description |\n| :--- | :--- | :--- |\n| Response envelope | stdout | Single-line JSON matching the Response Contract |\n| Error diagnostic | stderr | Single line, non-empty only on exit ≠ 0 |\n\nNo file is created or modified. The skill is **strictly read-only**\n(enforced by convention and by the `allowed-tools: Bash` frontmatter —\nno `Write` \u002F `Edit` tool is available).\n\n## Error Handling\n\n| Scenario | Action |\n| :--- | :--- |\n| Missing required flag | Print `usage:` banner to stderr; exit 64 (sysexits EX_USAGE) |\n| `jq` absent on PATH | Exit 127 with `jq is required`; abort before any stat |\n| `stat` flavour mismatch (GNU vs BSD) | Try `stat -f %m` (BSD) first, fall back to `stat -c %Y` (GNU) |\n| `execution-state.json` absent | Fall back to parsing each dep story's own `**Status:**` header |\n| Dep story file absent AND state file absent | Treat dep status as `UNKNOWN`; exit 2 |\n| Section 1 table unparseable (malformed markdown) | Treat dependencies as empty; log warning to stderr; continue |\n| Unknown section-title language | Try both `Dependências` \u002F `Dependencies`, `Cenario` \u002F `Scenario`; stop at first hit |\n| `task-implementation-map-*` file name variant (legacy `map-story-*`) | Also accept `map-story-XXXX-YYYY.md` as the 7th artifact when the canonical name is missing |\n\n## Performance Contract\n\nTarget: \u003C 500 ms for a typical epic with 20 stories in\n`execution-state.json` and all 7 planning artifacts present. The\nimplementation reads at most 9 files (1 story, 1 state, 7 artifacts\nvia `stat` only — no body read) and spawns a single `jq` invocation\nfor JSON assembly. No network I\u002FO; no recursive traversal beyond\n`ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002F`.\n\n## Testing\n\nThe story ships the following acceptance test scenarios, mirroring\nSection 7 of story-0049-0011:\n\n1. **Degenerate — no dependencies.** `story-0049-0001` reports\n   `dependencies=[]` and valid `scope` \u002F `planningMode`.\n2. **Dependency not DONE.** Ancillary story depends on a blocker with\n   `PENDING` status → exit 2, message `\"Blocker \u003Cid> is PENDING\"`.\n3. **Fresh artifacts → PRE_PLANNED.** Fabricate 7 artifacts with\n   mtime > story; assert `planningMode=PRE_PLANNED`.\n4. **Missing story file.** `--story-id story-9999-0001` with epic\n   dir absent → exit 3; epic dir present but story missing → exit 1.\n5. **Boundary — COMPLEX scope.** Story with 10 tasks → `scope=COMPLEX`.\n\nGoldens under\n`src\u002Ftest\u002Fresources\u002Fgolden\u002Finternal\u002Fplan\u002Fx-internal-load-story-context\u002F`\nlock the SKILL.md rendering. Coverage requirement: ≥ 95% line \u002F\n≥ 90% branch across the invoking Bash codepaths.\n\n## Generator Filter Contract\n\nThe `ia-dev-env` generator MUST exclude skills with\n`visibility: internal` from:\n\n1. The `.claude\u002FREADME.md` skill-inventory table.\n2. The `\u002Fhelp` menu listing surfaced by Claude Code.\n3. User-facing autocomplete in the chat input.\n\nInternal skills are still copied into `.claude\u002Fskills\u002F` (flat layout)\nso `Skill(skill: \"x-internal-...\")` invocations from other skills\nresolve correctly. The invariant: **user cannot see them; orchestrators\ncan invoke them.**\n\n## Telemetry\n\nInternal skills DO NOT emit `phase.start` \u002F `phase.end` markers —\ntelemetry is produced by the invoking orchestrator (the `phase`\nwrapping the orchestrator's own step is the correct aggregation\nboundary). Passive hooks still capture `tool.call` for the underlying\n`Bash` invocation.\n\nReference: Rule 13 (Skill Invocation Protocol), Rule 22 (Lifecycle\nIntegrity Audit), ADR-0010 (Interactive Gates Convention — exempts\ninternal skills from the 3-option menu contract).\n\n## Integration Notes\n\n| Skill | Relationship | Context |\n| :--- | :--- | :--- |\n| `x-implement-story` | caller (primary) | Phase 0 carve-out: the skill's stdout envelope replaces ~140 inline lines previously executed by the orchestrator |\n| `x-implement-epic` | caller (indirect, via story-0049-0019 downstream) | Consumes the same envelope when iterating stories at the epic scope |\n| `x-internal-update-status` | peer | Sibling `x-internal-*` skill; this skill *reads* `execution-state.json`, the other *mutates* it; both acquire the same `\u003Cfile>.lock` when their lifetimes overlap (this skill uses `flock -s` shared lock) |\n| `x-internal-normalize-args` | delegate (optional) | Future refactor: the argument parser in Step 1 can be replaced by a call to `x-internal-normalize-args` once its schema-driven mode covers read-only skills |\n| `x-reconcile-status` | consumer (peer) | Reads the same story `**Status:**` header this skill inspects; no shared mutation |\n\nDownstream stories that depend on this carve-out:\nstory-0049-0019 (orchestrator consumes the envelope and deletes the\ninline Phase 0 block).\n\nFull workflow detail (argument-parser rejection matrix, section-extraction\nregex catalogue, artifact-classification edge cases, and the\nexecution-state.json schema contract) lives in\n[`references\u002Ffull-protocol.md`](references\u002Ffull-protocol.md) per\nADR-0011.\n",{"name":5,"category":24,"visibility":25,"description":7,"allowed-tools":26,"argument-hint":27,"context-budget":28,"user-invocable":20,"requires-capabilities":29},"internal-plan","internal","Bash","--story-id \u003Cstory-XXXX-YYYY> --epic-id \u003CXXXX>","medium",[],"main","952a630c6f38d193a349d86fa18db1de8843e837","src\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-internal-load-story-context",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":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-internal-load-story-context",{"tool":45,"command":46},"bunx","bunx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-internal-load-story-context",{"tool":48,"command":49},"pnpm","pnpm dlx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-internal-load-story-context","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-internal-load-story-context\u002FSKILL.md",true,[53],{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"references\u002Ffull-protocol.md","REFERENCE","参考文档",7614,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-internal-load-story-context\u002Freferences\u002Ffull-protocol.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",[],[]]