[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M756Y7F1RSW4KFVPHGRT0YR9":3,"skill-same:01M756Y7F1RSW4KFVPHGRT0YR9":68},{"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":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":61},"01M756Y7F1RSW4KFVPHGRT0YR9","x-refine-story",null,"Multi-persona 4-phase story refinement dispatcher. Phase A: 5-7 parallel specialist agents analyse the story for gaps. Phase B: single consolidated question batch to the operator. Phase C: 5-7 parallel specialists refine with answers. Phase D: Architect (opus) consolidates a Refinement Verdict and dual-writes to execution-state.json + story markdown.","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\u002F.claude\u002Fskills\u002Fx-refine-story\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: x-refine-story\ndescription: \"Multi-persona 4-phase story refinement dispatcher. Phase A: 5-7 parallel specialist agents analyse the story for gaps. Phase B: single consolidated question batch to the operator. Phase C: 5-7 parallel specialists refine with answers. Phase D: Architect (opus) consolidates a Refinement Verdict and dual-writes to execution-state.json + story markdown.\"\nvisibility: public\nuser-invocable: true\nmodel: sonnet\nallowed-tools: [Read, Write, Edit, Skill, Agent, TaskCreate, TaskUpdate, Bash]\nargument-hint: \"\u003CSTORY-ID> [--epic-id \u003CID>] [--non-interactive]\"\ncontext-budget: heavy\nrequires-capabilities: [governance.refinement-gate]\n---\n\n## Global Output Policy\n\n- **Language**: English ONLY.\n- **Tone**: Technical, Direct, Concise.\n- **Efficiency**: Remove all conversational fillers. Start directly with technical content.\n\n## Triggers\n\n```\n\u002Fx-refine-story story-XXXX-YYYY                        — full 4-phase refinement (interactive)\n\u002Fx-refine-story story-XXXX-YYYY --non-interactive       — phases A+D only (no operator questions)\n\u002Fx-refine-story story-XXXX-YYYY --epic-id 0069          — explicit epic ID override\n```\n\n## Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `STORY-ID` | positional | (required) | `story-XXXX-YYYY` format |\n| `--epic-id` | String | auto-derived from STORY-ID prefix | 4-digit epic ID |\n| `--non-interactive` | boolean | `false` | Skip Phase B (no questions); verdict based on Phases A+D only |\n\n## Output Contract\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `storyId` | String | Input story ID |\n| `epicId` | String | Resolved epic ID |\n| `verdict` | Enum | `approved \\| rejected \\| tbd` |\n| `verdictHash` | String | SHA-256 of verdict JSON (for CI drift detection) |\n| `blockers` | List\\\u003CString\\> | NO-GO dimensions (empty if approved) |\n| `refinedAt` | ISO-8601 | Timestamp of final verdict |\n| `artifactPath` | String | Path to story markdown `## Refinement Verdict` section |\n\n## Error Codes\n\n| Exit | Code | Condition |\n|------|------|-----------|\n| 1 | `STORY_NOT_FOUND` | Story markdown not found at expected path |\n| 2 | `EPIC_STATE_MISSING` | `execution-state.json` not found for epic |\n| 3 | `PHASE_A_EMPTY` | All personas returned empty gap-reports |\n| 4 | `VERDICT_WRITE_FAILED` | x-internal-update-status returned non-zero |\n\n---\n\n## CRITICAL EXECUTION RULE\n\n**4 phases (A–D). ALL phases through Phase D are mandatory unless `--non-interactive` skips Phase B+C.** Print `>>> Phase X completed. Proceeding to Phase Y...` between phases. `>>> Phase D completed. Refinement verdict written.` at end.\n\n---\n\n## Phase A — Parallel Specialist Analysis\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-A-SpecialistAnalysis`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-A-SpecialistAnalysis\")\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase A - Specialist Analysis\", activeForm: \"Running parallel specialist analysis\")\n\n### A.1 Resolve story path and epic state\n\nRead the story markdown from:\n```\nai\u002Fepics\u002Fepic-XXXX-\u003Cslug>\u002Fstory-XXXX-YYYY.md\n```\n(Use PathResolver probe: check `ai\u002Fepics\u002Fepic-XXXX-*\u002F` glob). Non-zero → exit `STORY_NOT_FOUND`.\n\nRead the dimensions KP for persona responsibilities:\n\n    Read: .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md\n\n### A.2 Launch 5-7 parallel persona-agents\n\n**MANDATORY — emit ALL persona Agent() calls as SIBLING tool calls in ONE assistant message.**\n\nAlways active (5 core personas):\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story PO`\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"PO gap analysis for {STORY_ID}\",\n  prompt: \"You are a Product Owner specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions for the PO persona: value, persona, alternatives.\nReturn a JSON gap-report with this shape:\n{\n  \\\"persona\\\": \\\"PO\\\",\n  \\\"gaps\\\": [\n    {\\\"dimension\\\": \\\"\u003Cname>\\\", \\\"issue\\\": \\\"\u003Cdescription>\\\", \\\"question\\\": \\\"\u003Cwhat to ask operator?\\\", \\\"severity\\\": \\\"question|noGo\\\"}\n  ]\n}\nIf no gaps found, return {\\\"persona\\\": \\\"PO\\\", \\\"gaps\\\": []}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › PO analysis\\\", activeForm: \\\"Analysing as PO\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Tech Lead gap analysis for {STORY_ID}\",\n  prompt: \"You are a Tech Lead performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions for Tech Lead: contracts (interfaces, events, APIs), metrics (observability), risks.\nReturn a JSON gap-report: {\\\"persona\\\": \\\"TechLead\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Tech Lead analysis\\\", activeForm: \\\"Analysing as Tech Lead\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Architect gap analysis for {STORY_ID}\",\n  prompt: \"You are an Architect performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions: contracts (architectural), alternatives (design trade-offs), risks (technical).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Architect\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Architect analysis\\\", activeForm: \\\"Analysing as Architect\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Security gap analysis for {STORY_ID}\",\n  prompt: \"You are a Security specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: ac (security\u002Fauth acceptance criteria), risks (security).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Security\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Security analysis\\\", activeForm: \\\"Analysing as Security\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"QA gap analysis for {STORY_ID}\",\n  prompt: \"You are a QA specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: ac (all 4 mandatory categories: happy-path, error\u002Fboundary, performance\u002FSLA, security\u002Fauth). Flag any missing category as noGo.\nReturn a JSON gap-report: {\\\"persona\\\": \\\"QA\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › QA analysis\\\", activeForm: \\\"Analysing as QA\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\nConditional personas (activate when story signals the domain):\n\n```\nAgent(  [conditional: flag.has_sla_declared]\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Performance gap analysis for {STORY_ID}\",\n  prompt: \"You are a Performance engineer performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: metrics (SLA thresholds, p95\u002Fp99 latency targets, throughput), ac (performance\u002FSLA category).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Performance\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Performance analysis\\\", activeForm: \\\"Analysing as Performance\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)\n```\n\n```\nAgent(  [conditional: flag.has_infra_changes]\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"DevOps gap analysis for {STORY_ID}\",\n  prompt: \"You are a DevOps engineer performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: contracts (deployment\u002Finfrastructure), metrics (operational), risks (operational).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"DevOps\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › DevOps analysis\\\", activeForm: \\\"Analysing as DevOps\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)\n```\n\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story PO ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story TechLead`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story TechLead ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Architect`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Architect ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Security`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Security ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story QA`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story QA ok`\n\nCollect all gap-reports. Validate each is parseable JSON; discard malformed. If ALL are empty → exit `PHASE_A_EMPTY`.\n\nSeparate:\n- `questions` — gaps with `severity: \"question\"` → feed into Phase B\n- `noGos` — gaps with `severity: \"noGo\"` → pass directly to Phase D; **NOT surfaced as questions** (D5: NO-GOs silent)\n\n    TaskUpdate(id: phaseATaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-refine-story --phase Phase-A-SpecialistAnalysis\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-A-SpecialistAnalysis ok`\n\n>>> Phase A completed. Proceeding to Phase B (Consolidation)...\n\n---\n\n## Phase B — Consolidate & Operator Q&A\n\n\u003C!-- phase-no-gate: Phase B is skipped entirely when --non-interactive; gate is inside conditional block -->\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-B-Consolidate`\n\n**Skip Phase B when `--non-interactive`**: set `answers = {}` and proceed directly to Phase C.\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase B - Consolidate\", activeForm: \"Consolidating questions and awaiting operator answers\")\n\n### B.1 Dedup and group questions\n\nFrom all Phase A `questions` (severity: \"question\"):\n1. Deduplicate by semantic similarity (same dimension + same gap → keep one).\n2. Group by dimension: `value`, `ac`, `contracts`, `metrics`, `alternatives`, `risks`.\n3. Discard empty groups.\n\nIf no questions remain (all gaps were NO-GOs or all personas returned empty) → skip B.2, set `answers = {}`.\n\n### B.2 Single batch to operator (D4: one batch only)\n\n**EXACTLY ONE** `AskUserQuestion` call — no per-persona loops, no retry loops.\n\nPresent grouped questions:\n\n```\n--- Story Refinement Questions for {STORY_ID} ---\n\nThe following gaps were identified. Please answer each question.\n(NO-GO blockers are tracked separately and will appear in the final verdict.)\n\n[value]\nQ1. \u003Cquestion text from PO>\n\n[ac]\nQ2. \u003Cquestion text from QA>\n...\n\n[contracts]\nQ3. \u003Cquestion text from Tech Lead>\n\nReply with answers numbered Q1, Q2, Q3, etc. Type SKIP to skip a question.\n```\n\nParse the operator's reply into a map `{Q1: \"\u003Canswer>\", Q2: \"\u003Canswer>\", ...}`.\nMap each answer back to its originating `{persona, dimension, gap}` entry.\n\n    TaskUpdate(id: phaseBTaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-B-Consolidate ok`\n\n>>> Phase B completed. Proceeding to Phase C (Refinement)...\n\n---\n\n## Phase C — Parallel Specialist Refinement\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-C-Refine`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-C-Refine\")\n\n**Skip Phase C when `--non-interactive`**: set `proposedSections = {}` and proceed to Phase D.\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase C - Refinement\", activeForm: \"Running parallel specialist refinement with operator answers\")\n\n### C.1 Distribute answers and re-launch persona-agents\n\n**MANDATORY — emit ALL persona Agent() calls as SIBLING tool calls in ONE assistant message.**\n\nFor each persona that had questions in Phase A, launch a refinement agent with the answers it owns:\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story PO-Refine`\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"PO refinement for {STORY_ID}\",\n  prompt: \"You are a Product Owner specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForPO}.\nBased on these answers, produce the proposed story sections for your dimensions (value, persona, alternatives).\nReturn a JSON object: {\\\"persona\\\": \\\"PO\\\", \\\"proposedSections\\\": {\\\"value\\\": \\\"\u003Crefined text>\\\", \\\"persona\\\": \\\"\u003Crefined text>\\\", \\\"alternatives\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › PO refinement\\\", activeForm: \\\"Refining as PO\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Tech Lead refinement for {STORY_ID}\",\n  prompt: \"You are a Tech Lead specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForTechLead}.\nBased on these answers, produce the proposed story sections for your dimensions (contracts, metrics, risks).\nReturn a JSON object: {\\\"persona\\\": \\\"TechLead\\\", \\\"proposedSections\\\": {\\\"contracts\\\": \\\"\u003Crefined text>\\\", \\\"metrics\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Tech Lead refinement\\\", activeForm: \\\"Refining as Tech Lead\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Architect refinement for {STORY_ID}\",\n  prompt: \"You are an Architect specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForArchitect}.\nBased on these answers, produce the proposed story sections for your dimensions (contracts, alternatives, risks).\nReturn a JSON object: {\\\"persona\\\": \\\"Architect\\\", \\\"proposedSections\\\": {\\\"contracts\\\": \\\"\u003Crefined text>\\\", \\\"alternatives\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Architect refinement\\\", activeForm: \\\"Refining as Architect\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Security refinement for {STORY_ID}\",\n  prompt: \"You are a Security specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForSecurity}.\nBased on these answers, produce the proposed story sections for your dimensions (ac security\u002Fauth, risks security).\nReturn a JSON object: {\\\"persona\\\": \\\"Security\\\", \\\"proposedSections\\\": {\\\"ac\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Security refinement\\\", activeForm: \\\"Refining as Security\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"QA refinement for {STORY_ID}\",\n  prompt: \"You are a QA specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForQA}.\nBased on these answers, produce the proposed story sections for your dimensions (ac: all 4 mandatory categories).\nReturn a JSON object: {\\\"persona\\\": \\\"QA\\\", \\\"proposedSections\\\": {\\\"ac\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › QA refinement\\\", activeForm: \\\"Refining as QA\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story PO-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story TechLead-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story TechLead-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Architect-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Architect-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Security-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Security-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story QA-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story QA-Refine ok`\n\nCollect `proposedSections` from each agent. Merge into a single map keyed by dimension.\n\n    TaskUpdate(id: phaseCTaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-refine-story --phase Phase-C-Refine\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-C-Refine ok`\n\n>>> Phase C completed. Proceeding to Phase D (Architect Consolidation)...\n\n---\n\n## Phase D — Architect Consolidation + Dual-Write\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-D-Architect`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-D-Architect\")\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase D - Architect\", activeForm: \"Architect consolidating refinement verdict\")\n\n### D.1 Architect consolidation (opus tier)\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"opus\",\n  description: \"Architect consolidation for {STORY_ID}\",\n  prompt: \"You are the Lead Architect and final consolidator for a story refinement session.\n\nStory: {storyPath}\nProposed section refinements: {proposedSections}\nNO-GO blockers from Phase A: {noGos}\nOperator answers summary: {answers}\n\nYour job:\n1. Review all proposed sections for consistency and coherence.\n2. Merge proposedSections into a unified set of refined story sections.\n3. Evaluate all noGos — determine if each blocker is genuinely disqualifying or was addressed implicitly by the operator answers.\n4. Produce the final Refinement Verdict in this JSON shape:\n{\n  \\\"status\\\": \\\"approved\\\" | \\\"rejected\\\" | \\\"tbd\\\",\n  \\\"scope\\\": \\\"story\\\",\n  \\\"checkedAt\\\": \\\"\u003CISO-8601 UTC>\\\",\n  \\\"dimensions\\\": {\n    \\\"value\\\": \\\"passed|gap|noGo\\\",\n    \\\"persona\\\": \\\"passed|gap|noGo\\\",\n    \\\"ac\\\": \\\"passed|gap|noGo\\\",\n    \\\"contracts\\\": \\\"passed|gap|noGo\\\",\n    \\\"metrics\\\": \\\"passed|gap|noGo\\\",\n    \\\"alternatives\\\": \\\"passed|gap|noGo\\\",\n    \\\"risks\\\": \\\"passed|gap|noGo\\\"\n  },\n  \\\"blockers\\\": [\\\"\u003Cdimension: reason>\\\"],\n  \\\"refinedSections\\\": {\\\"\u003Cdimension>\\\": \\\"\u003Crefined markdown text>\\\"},\n  \\\"verdictRationale\\\": \\\"\u003C1-2 sentence summary>\\\"\n}\nRules:\n- status=approved: ALL mandatory dimensions passed (value, persona, ac, contracts, metrics).\n- status=rejected: ANY dimension is noGo AND the operator's answers did not resolve it.\n- status=tbd: gaps remain but no noGos — operator interaction needed.\n- alternatives and risks are advisory (gap does not trigger rejection alone).\n\nReturn ONLY the JSON object above. No prose outside JSON.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase D › Architect verdict\\\", activeForm: \\\"Producing Refinement Verdict\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\nParse the Architect's JSON verdict. Validate `status` is one of `approved|rejected|tbd`.\n\n### D.2 Compute verdictHash\n\nWrite the verdict JSON to a temp file then hash it (safe for non-ASCII and special characters):\n\nBash command: `printf '%s' '\u003Cverdict JSON>' | sha256sum | awk '{print $1}'`\n\n### D.3 Dual-write (MANDATORY — NON-NEGOTIABLE)\n\n**Write 1 — execution-state.json** (via x-internal-update-status, INLINE-SKILL):\n\n    Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type story --id \u003CSTORY-ID> --field refinementVerdict --value {\\\"status\\\":\\\"\u003Cstatus>\\\",\\\"scope\\\":\\\"story\\\",\\\"checkedAt\\\":\\\"\u003Ciso>\\\",\\\"dimensions\\\":{...},\\\"blockers\\\":[...],\\\"verdictHash\\\":\\\"\u003Chash>\\\"}\")  [required]\n\nNon-zero → exit `VERDICT_WRITE_FAILED`.\n\n**Write 2 — Story markdown** (append `## Refinement Verdict` section):\n\nRead the story markdown file. Append or replace the `## Refinement Verdict` block:\n\n```markdown\n## Refinement Verdict\n\n**Status:** approved | rejected | tbd\n**Refined at:** \u003CISO-8601>\n**Verdict hash:** \u003CverdictHash>\n\n### Dimensions\n\n| Dimension | Status |\n|-----------|--------|\n| value | passed |\n| persona | passed |\n| ac | passed |\n| contracts | passed |\n| metrics | passed |\n| alternatives | passed |\n| risks | passed |\n\n### Blockers\n\n\u003Cnone — or list of blockers>\n\n### Rationale\n\n\u003CverdictRationale from Architect>\n\n### Refined Sections\n\n\u003Cper-dimension refined text, if any>\n```\n\nUse Edit tool to write the `## Refinement Verdict` block. If it already exists, replace it (idempotent).\n\n### D.4 Finalize\n\n    TaskUpdate(id: phaseDTaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode final --skill x-refine-story --phase Phase-D-Architect --expected-artifacts {storyPath},{epicStatePath}\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-D-Architect ok`\n\n>>> Phase D completed. Refinement verdict written.\n\n---\n\n## Output Summary\n\nPrint a concise summary:\n\n```\nx-refine-story completed for {STORY_ID}\n  Verdict: \u003Capproved|rejected|tbd>\n  Blockers: \u003Cnone | list>\n  Verdict hash: \u003Chash>\n  State file: ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json (field: refinementVerdict)\n  Story markdown: {storyPath} (section: ## Refinement Verdict)\n```\n\n---\n\n## Integration Notes\n\n- **Consumed by:** `x-implement-story` (Phase 0: checks `refinementVerdict.status == \"approved\"` via `enforce-refinement-gate.sh` hook).\n- **Depends on:** `x-internal-update-status` (INLINE-SKILL, Rule 13 Pattern 1), `knowledge\u002Frefinement\u002Fdimensions.md` (KP, story-0069-0001).\n- **Verdict drift detection:** `verdictHash` in state file vs `verdictHash` in story markdown is compared by `audit-refinement-gate.sh` (story-0069-0006). Drift fails CI with `REFINEMENT_VERDICT_DRIFT`.\n- **Re-run idempotency:** Running x-refine-story again on an `approved` story replaces the verdict. This is intentional — re-refinement after story changes should update the verdict.\n","## Global Output Policy\n\n- **Language**: English ONLY.\n- **Tone**: Technical, Direct, Concise.\n- **Efficiency**: Remove all conversational fillers. Start directly with technical content.\n\n## Triggers\n\n```\n\u002Fx-refine-story story-XXXX-YYYY                        — full 4-phase refinement (interactive)\n\u002Fx-refine-story story-XXXX-YYYY --non-interactive       — phases A+D only (no operator questions)\n\u002Fx-refine-story story-XXXX-YYYY --epic-id 0069          — explicit epic ID override\n```\n\n## Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `STORY-ID` | positional | (required) | `story-XXXX-YYYY` format |\n| `--epic-id` | String | auto-derived from STORY-ID prefix | 4-digit epic ID |\n| `--non-interactive` | boolean | `false` | Skip Phase B (no questions); verdict based on Phases A+D only |\n\n## Output Contract\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `storyId` | String | Input story ID |\n| `epicId` | String | Resolved epic ID |\n| `verdict` | Enum | `approved \\| rejected \\| tbd` |\n| `verdictHash` | String | SHA-256 of verdict JSON (for CI drift detection) |\n| `blockers` | List\\\u003CString\\> | NO-GO dimensions (empty if approved) |\n| `refinedAt` | ISO-8601 | Timestamp of final verdict |\n| `artifactPath` | String | Path to story markdown `## Refinement Verdict` section |\n\n## Error Codes\n\n| Exit | Code | Condition |\n|------|------|-----------|\n| 1 | `STORY_NOT_FOUND` | Story markdown not found at expected path |\n| 2 | `EPIC_STATE_MISSING` | `execution-state.json` not found for epic |\n| 3 | `PHASE_A_EMPTY` | All personas returned empty gap-reports |\n| 4 | `VERDICT_WRITE_FAILED` | x-internal-update-status returned non-zero |\n\n---\n\n## CRITICAL EXECUTION RULE\n\n**4 phases (A–D). ALL phases through Phase D are mandatory unless `--non-interactive` skips Phase B+C.** Print `>>> Phase X completed. Proceeding to Phase Y...` between phases. `>>> Phase D completed. Refinement verdict written.` at end.\n\n---\n\n## Phase A — Parallel Specialist Analysis\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-A-SpecialistAnalysis`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-A-SpecialistAnalysis\")\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase A - Specialist Analysis\", activeForm: \"Running parallel specialist analysis\")\n\n### A.1 Resolve story path and epic state\n\nRead the story markdown from:\n```\nai\u002Fepics\u002Fepic-XXXX-\u003Cslug>\u002Fstory-XXXX-YYYY.md\n```\n(Use PathResolver probe: check `ai\u002Fepics\u002Fepic-XXXX-*\u002F` glob). Non-zero → exit `STORY_NOT_FOUND`.\n\nRead the dimensions KP for persona responsibilities:\n\n    Read: .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md\n\n### A.2 Launch 5-7 parallel persona-agents\n\n**MANDATORY — emit ALL persona Agent() calls as SIBLING tool calls in ONE assistant message.**\n\nAlways active (5 core personas):\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story PO`\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"PO gap analysis for {STORY_ID}\",\n  prompt: \"You are a Product Owner specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions for the PO persona: value, persona, alternatives.\nReturn a JSON gap-report with this shape:\n{\n  \\\"persona\\\": \\\"PO\\\",\n  \\\"gaps\\\": [\n    {\\\"dimension\\\": \\\"\u003Cname>\\\", \\\"issue\\\": \\\"\u003Cdescription>\\\", \\\"question\\\": \\\"\u003Cwhat to ask operator?\\\", \\\"severity\\\": \\\"question|noGo\\\"}\n  ]\n}\nIf no gaps found, return {\\\"persona\\\": \\\"PO\\\", \\\"gaps\\\": []}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › PO analysis\\\", activeForm: \\\"Analysing as PO\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Tech Lead gap analysis for {STORY_ID}\",\n  prompt: \"You are a Tech Lead performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions for Tech Lead: contracts (interfaces, events, APIs), metrics (observability), risks.\nReturn a JSON gap-report: {\\\"persona\\\": \\\"TechLead\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Tech Lead analysis\\\", activeForm: \\\"Analysing as Tech Lead\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Architect gap analysis for {STORY_ID}\",\n  prompt: \"You are an Architect performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY these dimensions: contracts (architectural), alternatives (design trade-offs), risks (technical).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Architect\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Architect analysis\\\", activeForm: \\\"Analysing as Architect\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Security gap analysis for {STORY_ID}\",\n  prompt: \"You are a Security specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: ac (security\u002Fauth acceptance criteria), risks (security).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Security\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Security analysis\\\", activeForm: \\\"Analysing as Security\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"QA gap analysis for {STORY_ID}\",\n  prompt: \"You are a QA specialist performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: ac (all 4 mandatory categories: happy-path, error\u002Fboundary, performance\u002FSLA, security\u002Fauth). Flag any missing category as noGo.\nReturn a JSON gap-report: {\\\"persona\\\": \\\"QA\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › QA analysis\\\", activeForm: \\\"Analysing as QA\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\nConditional personas (activate when story signals the domain):\n\n```\nAgent(  [conditional: flag.has_sla_declared]\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Performance gap analysis for {STORY_ID}\",\n  prompt: \"You are a Performance engineer performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: metrics (SLA thresholds, p95\u002Fp99 latency targets, throughput), ac (performance\u002FSLA category).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"Performance\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › Performance analysis\\\", activeForm: \\\"Analysing as Performance\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)\n```\n\n```\nAgent(  [conditional: flag.has_infra_changes]\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"DevOps gap analysis for {STORY_ID}\",\n  prompt: \"You are a DevOps engineer performing DoR gap analysis.\nRead the story at {storyPath}. Read .claude\u002Fknowledge\u002Frefinement\u002Fdimensions.md §Story Dimensions.\nAnalyse ONLY: contracts (deployment\u002Finfrastructure), metrics (operational), risks (operational).\nReturn a JSON gap-report: {\\\"persona\\\": \\\"DevOps\\\", \\\"gaps\\\": [{\\\"dimension\\\": ..., \\\"issue\\\": ..., \\\"question\\\": ..., \\\"severity\\\": \\\"question|noGo\\\"}]}.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase A › DevOps analysis\\\", activeForm: \\\"Analysing as DevOps\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)\n```\n\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story PO ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story TechLead`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story TechLead ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Architect`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Architect ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Security`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Security ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story QA`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story QA ok`\n\nCollect all gap-reports. Validate each is parseable JSON; discard malformed. If ALL are empty → exit `PHASE_A_EMPTY`.\n\nSeparate:\n- `questions` — gaps with `severity: \"question\"` → feed into Phase B\n- `noGos` — gaps with `severity: \"noGo\"` → pass directly to Phase D; **NOT surfaced as questions** (D5: NO-GOs silent)\n\n    TaskUpdate(id: phaseATaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-refine-story --phase Phase-A-SpecialistAnalysis\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-A-SpecialistAnalysis ok`\n\n>>> Phase A completed. Proceeding to Phase B (Consolidation)...\n\n---\n\n## Phase B — Consolidate & Operator Q&A\n\n\u003C!-- phase-no-gate: Phase B is skipped entirely when --non-interactive; gate is inside conditional block -->\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-B-Consolidate`\n\n**Skip Phase B when `--non-interactive`**: set `answers = {}` and proceed directly to Phase C.\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase B - Consolidate\", activeForm: \"Consolidating questions and awaiting operator answers\")\n\n### B.1 Dedup and group questions\n\nFrom all Phase A `questions` (severity: \"question\"):\n1. Deduplicate by semantic similarity (same dimension + same gap → keep one).\n2. Group by dimension: `value`, `ac`, `contracts`, `metrics`, `alternatives`, `risks`.\n3. Discard empty groups.\n\nIf no questions remain (all gaps were NO-GOs or all personas returned empty) → skip B.2, set `answers = {}`.\n\n### B.2 Single batch to operator (D4: one batch only)\n\n**EXACTLY ONE** `AskUserQuestion` call — no per-persona loops, no retry loops.\n\nPresent grouped questions:\n\n```\n--- Story Refinement Questions for {STORY_ID} ---\n\nThe following gaps were identified. Please answer each question.\n(NO-GO blockers are tracked separately and will appear in the final verdict.)\n\n[value]\nQ1. \u003Cquestion text from PO>\n\n[ac]\nQ2. \u003Cquestion text from QA>\n...\n\n[contracts]\nQ3. \u003Cquestion text from Tech Lead>\n\nReply with answers numbered Q1, Q2, Q3, etc. Type SKIP to skip a question.\n```\n\nParse the operator's reply into a map `{Q1: \"\u003Canswer>\", Q2: \"\u003Canswer>\", ...}`.\nMap each answer back to its originating `{persona, dimension, gap}` entry.\n\n    TaskUpdate(id: phaseBTaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-B-Consolidate ok`\n\n>>> Phase B completed. Proceeding to Phase C (Refinement)...\n\n---\n\n## Phase C — Parallel Specialist Refinement\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-C-Refine`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-C-Refine\")\n\n**Skip Phase C when `--non-interactive`**: set `proposedSections = {}` and proceed to Phase D.\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase C - Refinement\", activeForm: \"Running parallel specialist refinement with operator answers\")\n\n### C.1 Distribute answers and re-launch persona-agents\n\n**MANDATORY — emit ALL persona Agent() calls as SIBLING tool calls in ONE assistant message.**\n\nFor each persona that had questions in Phase A, launch a refinement agent with the answers it owns:\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story PO-Refine`\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"PO refinement for {STORY_ID}\",\n  prompt: \"You are a Product Owner specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForPO}.\nBased on these answers, produce the proposed story sections for your dimensions (value, persona, alternatives).\nReturn a JSON object: {\\\"persona\\\": \\\"PO\\\", \\\"proposedSections\\\": {\\\"value\\\": \\\"\u003Crefined text>\\\", \\\"persona\\\": \\\"\u003Crefined text>\\\", \\\"alternatives\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › PO refinement\\\", activeForm: \\\"Refining as PO\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Tech Lead refinement for {STORY_ID}\",\n  prompt: \"You are a Tech Lead specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForTechLead}.\nBased on these answers, produce the proposed story sections for your dimensions (contracts, metrics, risks).\nReturn a JSON object: {\\\"persona\\\": \\\"TechLead\\\", \\\"proposedSections\\\": {\\\"contracts\\\": \\\"\u003Crefined text>\\\", \\\"metrics\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Tech Lead refinement\\\", activeForm: \\\"Refining as Tech Lead\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Architect refinement for {STORY_ID}\",\n  prompt: \"You are an Architect specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForArchitect}.\nBased on these answers, produce the proposed story sections for your dimensions (contracts, alternatives, risks).\nReturn a JSON object: {\\\"persona\\\": \\\"Architect\\\", \\\"proposedSections\\\": {\\\"contracts\\\": \\\"\u003Crefined text>\\\", \\\"alternatives\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Architect refinement\\\", activeForm: \\\"Refining as Architect\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"Security refinement for {STORY_ID}\",\n  prompt: \"You are a Security specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForSecurity}.\nBased on these answers, produce the proposed story sections for your dimensions (ac security\u002Fauth, risks security).\nReturn a JSON object: {\\\"persona\\\": \\\"Security\\\", \\\"proposedSections\\\": {\\\"ac\\\": \\\"\u003Crefined text>\\\", \\\"risks\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › Security refinement\\\", activeForm: \\\"Refining as Security\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"sonnet\",\n  description: \"QA refinement for {STORY_ID}\",\n  prompt: \"You are a QA specialist.\nRead the story at {storyPath}.\nThe operator answered your questions as follows: {answersForQA}.\nBased on these answers, produce the proposed story sections for your dimensions (ac: all 4 mandatory categories).\nReturn a JSON object: {\\\"persona\\\": \\\"QA\\\", \\\"proposedSections\\\": {\\\"ac\\\": \\\"\u003Crefined text>\\\"}}.\nOnly include sections where you have refinements — omit unchanged sections.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase C › QA refinement\\\", activeForm: \\\"Refining as QA\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story PO-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story TechLead-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story TechLead-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Architect-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Architect-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story Security-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story Security-Refine ok`\n\n\u003C!-- TELEMETRY: subagent.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-start x-refine-story QA-Refine`\n\u003C!-- TELEMETRY: subagent.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh subagent-end x-refine-story QA-Refine ok`\n\nCollect `proposedSections` from each agent. Merge into a single map keyed by dimension.\n\n    TaskUpdate(id: phaseCTaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-refine-story --phase Phase-C-Refine\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-C-Refine ok`\n\n>>> Phase C completed. Proceeding to Phase D (Architect Consolidation)...\n\n---\n\n## Phase D — Architect Consolidation + Dual-Write\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-refine-story Phase-D-Architect`\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-refine-story --phase Phase-D-Architect\")\n\nOpen phase tracker:\n\n    TaskCreate(subject: \"story-XXXX-YYYY › Phase D - Architect\", activeForm: \"Architect consolidating refinement verdict\")\n\n### D.1 Architect consolidation (opus tier)\n\n```\nAgent(\n  subagent_type: \"general-purpose\",\n  model: \"opus\",\n  description: \"Architect consolidation for {STORY_ID}\",\n  prompt: \"You are the Lead Architect and final consolidator for a story refinement session.\n\nStory: {storyPath}\nProposed section refinements: {proposedSections}\nNO-GO blockers from Phase A: {noGos}\nOperator answers summary: {answers}\n\nYour job:\n1. Review all proposed sections for consistency and coherence.\n2. Merge proposedSections into a unified set of refined story sections.\n3. Evaluate all noGos — determine if each blocker is genuinely disqualifying or was addressed implicitly by the operator answers.\n4. Produce the final Refinement Verdict in this JSON shape:\n{\n  \\\"status\\\": \\\"approved\\\" | \\\"rejected\\\" | \\\"tbd\\\",\n  \\\"scope\\\": \\\"story\\\",\n  \\\"checkedAt\\\": \\\"\u003CISO-8601 UTC>\\\",\n  \\\"dimensions\\\": {\n    \\\"value\\\": \\\"passed|gap|noGo\\\",\n    \\\"persona\\\": \\\"passed|gap|noGo\\\",\n    \\\"ac\\\": \\\"passed|gap|noGo\\\",\n    \\\"contracts\\\": \\\"passed|gap|noGo\\\",\n    \\\"metrics\\\": \\\"passed|gap|noGo\\\",\n    \\\"alternatives\\\": \\\"passed|gap|noGo\\\",\n    \\\"risks\\\": \\\"passed|gap|noGo\\\"\n  },\n  \\\"blockers\\\": [\\\"\u003Cdimension: reason>\\\"],\n  \\\"refinedSections\\\": {\\\"\u003Cdimension>\\\": \\\"\u003Crefined markdown text>\\\"},\n  \\\"verdictRationale\\\": \\\"\u003C1-2 sentence summary>\\\"\n}\nRules:\n- status=approved: ALL mandatory dimensions passed (value, persona, ac, contracts, metrics).\n- status=rejected: ANY dimension is noGo AND the operator's answers did not resolve it.\n- status=tbd: gaps remain but no noGos — operator interaction needed.\n- alternatives and risks are advisory (gap does not trigger rejection alone).\n\nReturn ONLY the JSON object above. No prose outside JSON.\nFIRST ACTION: TaskCreate(subject: \\\"story-XXXX-YYYY › Phase D › Architect verdict\\\", activeForm: \\\"Producing Refinement Verdict\\\").\nLAST ACTION: TaskUpdate(status: \\\"completed\\\").\"\n)  [required]\n```\n\nParse the Architect's JSON verdict. Validate `status` is one of `approved|rejected|tbd`.\n\n### D.2 Compute verdictHash\n\nWrite the verdict JSON to a temp file then hash it (safe for non-ASCII and special characters):\n\nBash command: `printf '%s' '\u003Cverdict JSON>' | sha256sum | awk '{print $1}'`\n\n### D.3 Dual-write (MANDATORY — NON-NEGOTIABLE)\n\n**Write 1 — execution-state.json** (via x-internal-update-status, INLINE-SKILL):\n\n    Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type story --id \u003CSTORY-ID> --field refinementVerdict --value {\\\"status\\\":\\\"\u003Cstatus>\\\",\\\"scope\\\":\\\"story\\\",\\\"checkedAt\\\":\\\"\u003Ciso>\\\",\\\"dimensions\\\":{...},\\\"blockers\\\":[...],\\\"verdictHash\\\":\\\"\u003Chash>\\\"}\")  [required]\n\nNon-zero → exit `VERDICT_WRITE_FAILED`.\n\n**Write 2 — Story markdown** (append `## Refinement Verdict` section):\n\nRead the story markdown file. Append or replace the `## Refinement Verdict` block:\n\n```markdown\n## Refinement Verdict\n\n**Status:** approved | rejected | tbd\n**Refined at:** \u003CISO-8601>\n**Verdict hash:** \u003CverdictHash>\n\n### Dimensions\n\n| Dimension | Status |\n|-----------|--------|\n| value | passed |\n| persona | passed |\n| ac | passed |\n| contracts | passed |\n| metrics | passed |\n| alternatives | passed |\n| risks | passed |\n\n### Blockers\n\n\u003Cnone — or list of blockers>\n\n### Rationale\n\n\u003CverdictRationale from Architect>\n\n### Refined Sections\n\n\u003Cper-dimension refined text, if any>\n```\n\nUse Edit tool to write the `## Refinement Verdict` block. If it already exists, replace it (idempotent).\n\n### D.4 Finalize\n\n    TaskUpdate(id: phaseDTaskId, status: \"completed\")\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode final --skill x-refine-story --phase Phase-D-Architect --expected-artifacts {storyPath},{epicStatePath}\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-refine-story Phase-D-Architect ok`\n\n>>> Phase D completed. Refinement verdict written.\n\n---\n\n## Output Summary\n\nPrint a concise summary:\n\n```\nx-refine-story completed for {STORY_ID}\n  Verdict: \u003Capproved|rejected|tbd>\n  Blockers: \u003Cnone | list>\n  Verdict hash: \u003Chash>\n  State file: ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json (field: refinementVerdict)\n  Story markdown: {storyPath} (section: ## Refinement Verdict)\n```\n\n---\n\n## Integration Notes\n\n- **Consumed by:** `x-implement-story` (Phase 0: checks `refinementVerdict.status == \"approved\"` via `enforce-refinement-gate.sh` hook).\n- **Depends on:** `x-internal-update-status` (INLINE-SKILL, Rule 13 Pattern 1), `knowledge\u002Frefinement\u002Fdimensions.md` (KP, story-0069-0001).\n- **Verdict drift detection:** `verdictHash` in state file vs `verdictHash` in story markdown is compared by `audit-refinement-gate.sh` (story-0069-0006). Drift fails CI with `REFINEMENT_VERDICT_DRIFT`.\n- **Re-run idempotency:** Running x-refine-story again on an `approved` story replaces the verdict. This is intentional — re-refinement after story changes should update the verdict.\n",{"name":5,"model":24,"visibility":25,"description":7,"allowed-tools":26,"argument-hint":35,"context-budget":36,"user-invocable":37,"requires-capabilities":38},"sonnet","public",[27,28,29,30,31,32,33,34],"Read","Write","Edit","Skill","Agent","TaskCreate","TaskUpdate","Bash","\u003CSTORY-ID> [--epic-id \u003CID>] [--non-interactive]","heavy",true,[39],"governance.refinement-gate","main","952a630c6f38d193a349d86fa18db1de8843e837","src\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002F.claude\u002Fskills\u002Fx-refine-story",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":50,"prompt":60,"zipAvailable":37},[51,54,57],{"tool":52,"command":53},"npx","npx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-refine-story",{"tool":55,"command":56},"bunx","bunx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-refine-story",{"tool":58,"command":59},"pnpm","pnpm dlx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-refine-story","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002F.claude\u002Fskills\u002Fx-refine-story\u002FSKILL.md",[62],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Ffull-protocol.md","REFERENCE","参考文档",7002,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring\u002F.claude\u002Fskills\u002Fx-refine-story\u002Freferences\u002Ffull-protocol.md",[69,76,83,90,97,104],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"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":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"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":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"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":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"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":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"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":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":110,"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",[],[]]