[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M754PPPD49K6T5PC34XJP8WN":3,"skill-same:01M754PPPD49K6T5PC34XJP8WN":82},{"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":51},"01M754PPPD49K6T5PC34XJP8WN","x-implement-story",null,"Thin orchestrator (~320 lines — story-0049-0019 refactor) that drives a story end-to-end via 4 delegated phases: Phase 0 (args via x-internal-normalize-args + context via x-internal-load-story-context + resume via x-internal-resume-story), Phase 1 (parallel planning via x-internal-build-story-plan), Phase 2 (task execution loop via x-implement-task per task, then final story PR via x-create-pr), Phase 3 (verify via x-internal-verify-story + report via x-internal-write-story-report + optional worktree cleanup via x-manage-worktrees). New EPIC-0049 flags --target-branch \u002F --auto-merge \u002F --epic-id propagate OO-style to x-implement-task and x-create-pr. Backward compatible: absent flags preserve legacy EPIC-0048 behavior (target=develop, auto-merge=none).","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-implement-story\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: x-implement-story\nmodel: sonnet\ndescription: \"Thin orchestrator (~320 lines — story-0049-0019 refactor) that drives a story end-to-end via 4 delegated phases: Phase 0 (args via x-internal-normalize-args + context via x-internal-load-story-context + resume via x-internal-resume-story), Phase 1 (parallel planning via x-internal-build-story-plan), Phase 2 (task execution loop via x-implement-task per task, then final story PR via x-create-pr), Phase 3 (verify via x-internal-verify-story + report via x-internal-write-story-report + optional worktree cleanup via x-manage-worktrees). New EPIC-0049 flags --target-branch \u002F --auto-merge \u002F --epic-id propagate OO-style to x-implement-task and x-create-pr. Backward compatible: absent flags preserve legacy EPIC-0048 behavior (target=develop, auto-merge=none).\"\nuser-invocable: true\nallowed-tools: Read, Write, Edit, Bash, Grep, Glob, Skill, Agent, TaskCreate, TaskUpdate, AskUserQuestion\nargument-hint: \"[STORY-ID] [--target-branch \u003Cbranch>] [--auto-merge \u003Cmerge|squash|rebase|none>] [--epic-id \u003CXXXX>] [--auto-approve-pr] [--task TASK-ID] [--resume] [--skip-verification] [--skip-smoke] [--skip-review] [--full-lifecycle] [--worktree] [--non-interactive] [--no-auto-remediation] [--no-ci-watch]\"\ncontext-budget: medium\nrequires-capabilities: []\n---\n\n## Output Policy & Context Management\n\nEnglish ONLY; technical, direct, concise (no conversational fillers). Record only compact envelopes from `x-implement-task` (status\u002FtaskId\u002FcommitSha\u002Fcoverage*) — no full TDD logs. Reference plan\u002Freview files by path (+score for reviews); never re-load content. Read story file once in Phase 0 via `x-internal-load-story-context`. Delegate every state mutation to `x-internal-update-status`.\n\n# Skill: Story Implementation (Thin Orchestrator — ADR-0012 + EPIC-0049)\n\nOrchestrate story end-to-end via delegation. Inline: argv parse (delegate), load context (delegate), drive task loop (`x-implement-task`), close story-level PR. Zero direct git\u002Fgh\u002Fmvn calls.\n\n**EPIC-0049 flag propagation (OO-style — RULE-009):** `--target-branch \u003Cbranch>` (default `develop`) → `x-implement-task` + `x-create-pr`; `--auto-merge \u003Cstrategy>` (default `none`) → `x-create-pr`; `--epic-id \u003CID>` (auto-derived from storyId) → `x-create-pr` (adds `epic-XXXX` label). All flags absent = EPIC-0048 behavior (backward compat — RULE-008).\n\n## Triggers\n\n- `\u002Fx-implement-story story-XXXX-YYYY` — full lifecycle (legacy default: target=develop, no auto-merge)\n- `\u002Fx-implement-story story-XXXX-YYYY --target-branch epic\u002F0049 --auto-merge merge --epic-id 0049` — orchestrator-propagated run targeting an epic branch\n- `\u002Fx-implement-story story-XXXX-YYYY --task TASK-NNN` — execute only a specific task (resume \u002F targeted)\n- `\u002Fx-implement-story story-XXXX-YYYY --resume` — continue from `execution-state.json` via `x-internal-resume-story`\n- `\u002Fx-implement-story story-XXXX-YYYY --auto-approve-pr` — parent-branch mode (RULE-004)\n- `\u002Fx-implement-story story-XXXX-YYYY --worktree` — standalone opt-in worktree (ADR-0004 Mode 2)\n- `\u002Fx-implement-story story-XXXX-YYYY --interactive` — opt-in to gate menus (PROCEED\u002FFIX-PR\u002FABORT)\n\n## Review Policy — `MANDATORY — NON-NEGOTIABLE`: Specialist (`x-review-codebase`) + Tech-Lead (`x-review-pr`) reviews in Step 3.2 MUST execute unless `--skip-verification` \u002F `--skip-review`; silent omission is a `PROTOCOL_VIOLATION` and subagents MUST abort with `\"REVIEW_SKIPPED_WITHOUT_FLAG\"`.\n\n## Parameters\n\n| Flag | Type | Default | Description |\n|------|------|---------|-------------|\n| `STORY-ID` | String | — | Positional, required. Pattern `story-XXXX-YYYY`. |\n| `--target-branch` | String | `develop` | Base branch for task + story PRs. Propagated to `x-implement-task` + `x-create-pr`. |\n| `--auto-merge` | Enum | `none` | `merge\\|squash\\|rebase\\|none`. Propagated to `x-create-pr`. Requires `--target-branch` when not `none`. |\n| `--epic-id` | String(4) | auto | Auto-derived from story prefix. Propagated to `x-create-pr` (adds `epic-XXXX` label). |\n| `--auto-approve-pr` | Boolean | `false` | Parent-branch mode (RULE-004): task PRs target `feat\u002Fstory-...`. |\n| `--task` | String | — | Execute only `TASK-XXXX-YYYY-NNN`. |\n| `--resume` | Boolean | `false` | Delegates resume-point detection to `x-internal-resume-story`. |\n| `--skip-verification` | Boolean | `false` | **Recovery-only.** Skips Phase 3; flagged outside `## Recovery` blocks. |\n| `--skip-smoke`, `--skip-review` | Boolean | `false` | Bypass smoke gate \u002F specialist + TL reviews (the only supported per-review bypass path). |\n| `--full-lifecycle`, `--worktree` | Boolean | `false` | Full execution \u002F standalone worktree mode. |\n| `--interactive` | Boolean | `false` | Opt-in to 3-option gate menus (PROCEED\u002FFIX-PR\u002FABORT). Default: non-interactive (Rule 20, EPIC-0061). |\n| `--non-interactive` | Boolean | **DEPRECATED** | Was CI opt-in; now equals default. Emits WARN. Removed in 2 releases. |\n| `--no-auto-remediation`, `--no-ci-watch` | Boolean | `false` | Skip Step 3.5 remediation \u002F Rule 21 CI-watch. |\n\n**Deprecated (no-op, warn-once):** `--manual-contract-approval`, `--manual-task-approval` (both since EPIC-0043).\n\n## Output Contract\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `storyId`, `epicId` | String | Story + auto-derived epic ID |\n| `status` | Enum | `SUCCESS \\| FAILED \\| PARTIAL` |\n| `targetBranch`, `autoMergeStrategy` | String, Enum | Resolved base branch + merge strategy |\n| `tasksExecuted` | List\u003C{id, status, commitSha, prNumber}> | One entry per task dispatched |\n| `prNumber` \u002F `prUrl` | Integer\\|null \u002F String\\|null | Story-level PR; null without `--auto-approve-pr` |\n| `verifyPassed` | Boolean | Phase 3 verify-gate `passed` |\n| `reportPath` | String | Final report from `x-internal-write-story-report` |\n| `coverageLine` \u002F `coverageBranch` | Number\\|null | Filtered coverage |\n\n## Error Codes\n\n| Exit | Code | Condition |\n|------|------|-----------|\n| 1 | `ARGS_INVALID` | `x-internal-normalize-args` exit 1 |\n| 2 | `STORY_NOT_LOADABLE` | `x-internal-load-story-context` non-zero |\n| 3 | `PLAN_FAILED` | `x-internal-build-story-plan` non-zero |\n| 4 | `TASK_FAILED` | One or more tasks returned `FAILED` |\n| 5 | `VERIFY_FAILED` | `x-internal-verify-story` `passed=false` |\n| 6 | `PR_CREATE_FAILED` | `x-create-pr` non-zero on story-level PR |\n\n## Workflow Overview\n\n```\nPhase 0 : Args, Context & Resume  (x-internal-normalize-args + load-context + resume — ~80 lines)\nPhase 1 : Plan                    (x-internal-build-story-plan — ~50 lines)\nPhase 2 : Task Execution Loop     (x-implement-task per task + x-create-pr — ~120 lines)\nPhase 3 : Verify, Report, Cleanup (x-internal-verify-story + x-internal-write-story-report + x-manage-worktrees remove — ~70 lines)\n```\n\n## CRITICAL EXECUTION RULE\n\n**4 phases (0–3). ALL phases through Phase 2 are mandatory. NEVER stop before Phase 2 completes.** Print `>>> Phase N completed. Proceeding to Phase N+1 (...)...` between phases; `>>> Phase 3 completed. Lifecycle complete.` at end.\n\n## Phase 0 — Args, Context & Resume\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-0-Prepare`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-0-Context\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase0TaskId, status: \"completed\")` after §0.4):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 0 - Context\", activeForm: \"Loading story context and resume state\")\n\n### 0.1 Args normalization (Rule 13 Pattern 1)\n\n    Skill(skill: \"x-internal-normalize-args\", args: \"--schema @references\u002Fargs-schema.json --argv \\\"{raw argv}\\\"\")\n\nConsume `{parsed, warnings, errors}`: exit `ARGS_INVALID` on errors; print warnings once; extract `storyId`, `epicId` (auto-derived from storyId prefix), `targetBranch`, `autoMerge`, and all flags (skipReview\u002FskipVerification\u002FskipSmoke\u002FautoApprovePr\u002FnonInteractive\u002Fworktree\u002Ftask\u002Fresume\u002FnoAutoRemediation\u002FnoCiWatch\u002FfullLifecycle) for phase propagation.\n\n### 0.1a Persist interactiveMode (EPIC-0068)\n\nWrite the resolved interactive mode to `execution-state.json` so the Stop hook `enforce-continuous-flow.sh` can determine whether to emit nudges:\n\n    Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type story --id \u003CSTORY-ID> --field interactiveMode --value \u003Cinteractive|non-interactive>\")\n\nValue is `\"interactive\"` when `--interactive` flag was passed or `CLAUDE_LEGACY_INTERACTIVE=1`; otherwise `\"non-interactive\"` (Rule 20 default, EPIC-0061).\n\n### 0.2 Load story context\n\n    Skill(skill: \"x-internal-load-story-context\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID>\")\n\nSub-skill reads story, validates predecessors, runs 7-artifact staleness pre-check (arch\u002Fimpl\u002Ftest\u002Ftasks\u002Fsecurity\u002Fcompliance\u002Fper-task plans), classifies scope (SIMPLE\u002FSTANDARD\u002FCOMPLEX), detects planningMode (PRE_PLANNED\u002FHYBRID\u002FINLINE). Envelope: `{storyPath, tasksCount, scope, planningMode, predecessorsComplete, artifactFreshness[]}`. Non-zero → `STORY_NOT_LOADABLE`.\n\n### 0.3 Worktree-first branch decision (Rule 14 + ADR-0004)\n\n`Skill(skill: \"x-manage-worktrees\", args: \"detect-context\")` → apply 3-way decision (REUSE\u002FCREATE\u002FLEGACY); set `STORY_OWNS_WORKTREE` in-memory. Full table in `references\u002Ffull-protocol.md` §1.\n\n### 0.4 Resume (conditional on `--resume`)\n\n    Skill(skill: \"x-internal-resume-story\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID>\")\n\nEnvelope: `{resumePoint, tasksCompleted[], tasksPending[], lastCommitSha, staleWarnings[]}`. Use `tasksPending` as Phase 2 iteration filter; print staleWarnings once.\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-0-Context\")\n\nTaskUpdate(id: phase0TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-0-Prepare ok`\n\n>>> Phase 0 completed. Proceeding to Phase 1 (Plan)...\n\n\u003C!-- phase-no-gate: API-First is conditional — only activates for stories with contract interfaces; gates live inside the conditional block -->\n## Phase 0.5 — API-First Contract Generation (Conditional)\n\nActivates ONLY when `has_contract_interfaces=True` (story declares interfaces of type `rest`, `grpc`, `event-consumer`, `event-producer`, or `websocket`). Open phase tracker when active:\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 0 - API Contract\", activeForm: \"Generating API-first contracts\")\n\nGenerates draft OpenAPI 3.1 \u002F Protobuf 3 \u002F AsyncAPI 2.6 in `contracts\u002F{STORY_ID}-*.yaml|proto`, validates via `x-lint-contract-tests`, and pauses at **Step 0.5.4** via `AskUserQuestion` (EPIC-0043 gate — replaces legacy `CONTRACT PENDING APPROVAL` text). Full interface-to-format mapping table and generator details live in `references\u002Ffull-protocol.md` §2.\n\n    TaskUpdate(id: phase05TaskId, status: \"completed\")\n\n## Phase 1 — Plan\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-1-Plan`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-1-Plan\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase1TaskId, status: \"completed\")` after parallelism gate):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 1 - Plan\", activeForm: \"Orchestrating parallel planning wave\")\n\n**Batch A — emit 6 planner task trackers in ONE message (SIMPLE scope skips security+compliance).** One TaskCreate per planner (Arch plan \u002F Impl plan \u002F Test plan \u002F Task breakdown \u002F Security assessment \u002F Compliance assessment). Store IDs: `plannerTasks = {arch, impl, test, tasks, security, compliance}`.\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 1 › Arch plan\", activeForm: \"Running arch plan\")\n    [+5 siblings per above naming] — see `references\u002Ffull-protocol.md` §Phase-1-Planning-Wave for exhaustive list.\n\n**Batch B — after `x-internal-build-story-plan` returns, emit 6 `TaskUpdate(id: plannerTasks.X, status: \"completed\")` in ONE message (arch\u002Fimpl\u002Ftest\u002Ftasks\u002Fsecurity\u002Fcompliance).**\n\n    TaskUpdate(id: plannerTasks.arch, status: \"completed\")\n    TaskUpdate(id: plannerTasks.impl, status: \"completed\")\n    TaskUpdate(id: plannerTasks.test, status: \"completed\")\n    TaskUpdate(id: plannerTasks.tasks, status: \"completed\")\n    TaskUpdate(id: plannerTasks.security, status: \"completed\")\n    TaskUpdate(id: plannerTasks.compliance, status: \"completed\")\n\n**Skipped entirely when `planningMode=PRE_PLANNED`** (all 7 artifacts fresh — logged `\"[phase-1] skipped — PRE_PLANNED\"` and proceeding to Phase 2).\n\nOtherwise invoke:\n\n    Skill(skill: \"x-internal-build-story-plan\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> --scope \u003CSCOPE> [--skip-review]\")\n\nThe sub-skill orchestrates parallel story-planning (Phase 1 carve-out): invokes `x-plan-architecture` (Step 1A) then dispatches up to 5 sibling Agent subagents in ONE assistant message for implementation plan, test plan, task breakdown, security assessment, and compliance assessment (Steps 1B-1F). Scope-aware: SIMPLE skips 1E\u002F1F.\n\nConsume the envelope `{artifacts: [{name, path, status}], planningMode, scopeResolved}`. On non-zero exit → exit with code `PLAN_FAILED`. Persist the envelope in orchestrator memory — never re-read the artifact files.\n\n### Parallelism gate (RULE-004 hotspots)\n\nInvoke `Skill(skill: \"x-evaluate-parallelism\", args: \"--scope=story --story=\u003CSTORY-ID>\")` (EPIC-0041 \u002F story-0041-0006). On detected hard\u002Fregen collision, degrade the affected wave to serial and record `ExecutionState.parallelismDowngrades`. Full matrix in `references\u002Ffull-protocol.md` §3.\n\nWave gate — all planning artifacts produced:\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode wave --skill x-implement-story --phase Phase-1-Plan --expected-tasks {planner-task-ids} --expected-artifacts {arch-path},{impl-path},{test-path},{tasks-path},{security-path},{compliance-path}\")\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-1-Plan\")\n\nTaskUpdate(id: phase1TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-1-Plan ok`\n\n>>> Phase 1 completed. Proceeding to Phase 2 (Task Execution Loop)...\n\n## Phase 2 — Task Execution Loop (RULE-001)\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-2-Implement`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-2-Execute\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase2TaskId, status: \"completed\")` after story-level PR):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 2 - Execute\", activeForm: \"Running task execution loop\")\n\nRead tasks from `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Ftasks-story-XXXX-YYYY.md` (Section 8 fallback when absent). Apply the `tasksPending` filter from Phase 0.4 when resuming. For each `TASK-XXXX-YYYY-NNN` not in `DONE`\u002F`BLOCKED`:\n\n**Per-task tracking (sequential, chained via `addBlockedBy`):**\n\n    currentTaskId = TaskCreate(subject: \"{STORY_ID} › Phase 2 › TASK-XXXX-YYYY-NNN\", activeForm: \"Executing TASK-XXXX-YYYY-NNN\")\n    [if previous task exists]: TaskUpdate(id: previousTaskId, addBlockedBy: [currentTaskId])\n\n    ... dispatch x-implement-task + x-create-pr ...\n\n    TaskUpdate(id: currentTaskId, status: \"completed\")\n\n### 2.1 Per-task dispatch\n1. Check deps against `execution-state.json`; unresolved → `BLOCKED` via `x-internal-update-status`, skip.\n2. **Dispatch TDD:** `Skill(skill: \"x-implement-task\", model: \"sonnet\", args: \"\u003CTASK-ID> --orchestrated --target-branch \u003CtargetBranch> [--auto-merge \u003Cstrategy>] [--epic-id \u003CEPIC-ID>] [--auto-approve-pr] [--non-interactive]\")` → RED\u002FGREEN\u002FREFACTOR + atomic commit + push `feat\u002Ftask-XXXX-YYYY-NNN-desc`. Returns `{status, taskId, commitSha, branchName, coverageLine, coverageBranch}`.\n3. **CI-watch (Rule 21 + Rule 45):** unless `--no-ci-watch`. **MANDATORY TOOL CALL — NON-NEGOTIABLE (Rule 24):** `Skill(skill: \"x-watch-pr-ci\", args: \"--branch \u003CbranchName>\")` — 8 exit codes. Persists `.claude\u002Fstate\u002Fpr-watch-{PR}.json`; absence on a merged PR fails Camada 3 audit.\n4. **PR creation (RULE-009 OO propagation):** `Skill(skill: \"x-create-pr\", model: \"haiku\", args: \"\u003CTASK-ID> --target-branch \u003CtargetBranch> --auto-merge \u003Cstrategy> --epic-id \u003CEPIC-ID> [--auto-approve-pr]\")`. With `--auto-approve-pr`, task-PR target becomes parent story branch. Consume `{prUrl, prNumber, prMergeStatus}`.\n5. **Status:** `Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type task --id \u003CTASK-ID> --field status --value \u003CSTATUS>\")`.\n\n### 2.2 Fail-fast + story-level PR\nOn `status=FAILED`, mark dependants `BLOCKED` and exit Phase 2 with `TASK_FAILED` (unless `--task` — single-task mode). When `--auto-approve-pr` is set, after all tasks succeed push parent branch and create story-level PR:\n\n    Skill(skill: \"x-create-pr\", model: \"haiku\", args: \"--story-id \u003CSTORY-ID> --head feat\u002Fstory-\u003CSTORY-ID> --target-branch \u003CtargetBranch> --auto-merge \u003Cstrategy> --epic-id \u003CEPIC-ID>\")\n\nWithout `--auto-approve-pr`, task PRs are the unit of delivery — no story PR. Non-zero exit → `PR_CREATE_FAILED`. Fallback G1-G7 in `references\u002Ffull-protocol.md` §4.\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-2-Execute\")\n\nTaskUpdate(id: phase2TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-2-Implement ok`\n\n>>> Phase 2 completed. All tasks executed. Proceeding to Phase 3 (Verify & Report)...\n\n## Phase 3 — Verify, Report & Cleanup\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Verify`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-3-Verify\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase3TaskId, status: \"completed\")` at FINAL gate):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 - Verify\", activeForm: \"Running verify gate and reviews\")\n\n**Sub-task trackers (open in Batch A — one per sub-step 3.Q–3.5 — before `Skip verification`):** emit 13 `TaskCreate` in ONE message (one per Quality-regression \u002F Quality-perf \u002F Quality-mutation \u002F Quality-contract \u002F Quality-dep-policy \u002F Doc generate \u002F Doc validate \u002F Verify gate \u002F Specialist reviews \u002F Tech lead review \u002F Report \u002F Status finalize \u002F Worktree cleanup). Store IDs: `p3Tasks = {qualityRegression, qualityPerf, qualityMutation, qualityContract, qualityDepPolicy, docGenerate, docValidate, verify, specialist, techLead, report, status, cleanup}`.\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality regression\", activeForm: \"Running x-execute-shell-regression-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality perf\", activeForm: \"Running x-execute-performance-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality mutation\", activeForm: \"Running x-execute-mutation-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality contract\", activeForm: \"Running x-execute-contract-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality dep-policy\", activeForm: \"Running x-validate-dependency-policy\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Doc generate\", activeForm: \"Running x-generate-docs\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Doc validate\", activeForm: \"Running x-validate-docs\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Verify gate\", activeForm: \"Running story verify gate\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Specialist reviews\", activeForm: \"Running specialist reviews\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Tech lead review\", activeForm: \"Running tech lead review\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Report\", activeForm: \"Generating story completion report\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Status finalize\", activeForm: \"Finalizing story status\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Worktree cleanup\", activeForm: \"Cleaning up worktree\")\n\n**Skipped only under `--skip-verification`** (recovery-only — see Rule 22). Every `Skill(...)` below is a **MANDATORY TOOL CALL** (Rule 24); inlining is a violation and the CI audit fails merges lacking evidence artifacts. Full per-step details (sub-skill envelopes, NO-GO cycle protocol, worktree-cleanup decision table) in `references\u002Ffull-protocol.md` §5.\n\n### 3.Q Quality Gates — **MANDATORY conditional** (EPIC-0072 + EPIC-0073 + EPIC-0074, Rule 24)\n> Sequence: regression → perf → mutation → contract → dep-policy (D-R11 fast-fail). `QualityConfig`\u002F`DependencyPolicyConfig` from project YAML. Disabled sub-gates emit WARN; no report produced. First non-zero exit cancels remaining gates.\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Regression`\n    Skill(skill: \"x-execute-shell-regression-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fregression-report-STORY-ID.md\")  [conditional: flag.quality_regression_enabled]\n    TaskUpdate(id: p3Tasks.qualityRegression, status: \"completed\")\nExit non-zero → `REGRESSION_DETECTED` (19); **D-R11: skip 3.Q.1, 3.Q.2, and 3.Q.3**.\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Regression ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Perf`\n    Skill(skill: \"x-execute-performance-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fperf-report-STORY-ID.md\")  [conditional: flag.quality_performance_enabled]\n    TaskUpdate(id: p3Tasks.qualityPerf, status: \"completed\")\nExit non-zero → `PERF_REGRESSION_DETECTED` (14); **D-R11: skip 3.Q.2 and 3.Q.3**.\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Perf ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Mutation`\n    Skill(skill: \"x-execute-mutation-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fmutation-report-STORY-ID.md\")  [conditional: flag.quality_mutation_enabled]\n    TaskUpdate(id: p3Tasks.qualityMutation, status: \"completed\")\nExit non-zero → `MUTATION_SCORE_BELOW_THRESHOLD` (17); **D-R11: skip 3.Q.3**.\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Mutation ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Contract`\n    Skill(skill: \"x-execute-contract-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fcontract-report-STORY-ID.md\")  [conditional: flag.quality_contract_enabled]\n    TaskUpdate(id: p3Tasks.qualityContract, status: \"completed\")\nExit non-zero → `CONTRACT_BREAKING_CHANGE` (18).\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Contract ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-DepPolicy`\n    Skill(skill: \"x-validate-dependency-policy\", model: \"haiku\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdep-policy-validation-report-STORY-ID.md\")  [conditional: flag.dep_policy_enabled]\n    TaskUpdate(id: p3Tasks.qualityDepPolicy, status: \"completed\")\nExit non-zero → `DEP_POLICY_BLOCK` (20); gate fails, merge blocked (Rule 32 §Enforcement).\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-DepPolicy ok`\n\n### 3.0 Documentation — `MANDATORY — NON-NEGOTIABLE` (Rule 31, EPIC-0071)\n\n`--skip-doc` in `## Recovery`\u002F`hotfix\u002F*` only (Rule 27 Ex. 2). Retry\u002Fabort: `references\u002Ffull-protocol.md` §5.\n\n    Skill(skill: \"x-generate-docs\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID>\")  [required]\n    TaskUpdate(id: p3Tasks.docGenerate, status: \"completed\")\n    Skill(skill: \"x-validate-docs\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report-path ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdoc-validate-report-STORY-ID.md\")  [required]\n    TaskUpdate(id: p3Tasks.docValidate, status: \"completed\")\n\n### 3.1 Verify gate — MANDATORY TOOL CALL\n\n    Skill(skill: \"x-internal-verify-story\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> [--coverage-threshold-line 95] [--coverage-threshold-branch 90]\")\n    TaskUpdate(id: p3Tasks.verify, status: \"completed\")\n\nPersists `ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fverify-envelope-STORY-ID.json`. On `passed=false` → `VERIFY_FAILED`.\n\n### 3.2 Specialist + Tech-Lead reviews — `MANDATORY — NON-NEGOTIABLE` (unless `--skip-review`)\nBoth MUST execute in sequence; silent omission is `PROTOCOL_VIOLATION`. NO-GO cycle protocol in `references\u002Ffull-protocol.md` §5.\n    Skill(skill: \"x-review-codebase\", model: \"sonnet\", args: \"\u003CSTORY-ID>\")\n    TaskUpdate(id: p3Tasks.specialist, status: \"completed\")\n    Skill(skill: \"x-review-pr\", model: \"sonnet\", args: \"\u003CSTORY-ID>\")\n    TaskUpdate(id: p3Tasks.techLead, status: \"completed\")\nOn Tech-Lead GO, optional `x-fix-pr` unless `--no-auto-remediation`.\n\n### 3.3 Final report — MANDATORY TOOL CALL\n\n    Skill(skill: \"x-internal-write-story-report\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> --output ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fstory-completion-report-STORY-ID.md\")\n    TaskUpdate(id: p3Tasks.report, status: \"completed\")\n\n### 3.4 Status finalize\nFinalize atomically via `x-internal-update-status`: IMPLEMENTATION-MAP + Story `**Status:**` → `Concluída`, Jira → `Done`, state.json → `COMPLETE`.\n\n    TaskUpdate(id: p3Tasks.status, status: \"completed\")\n\n### 3.5 Worktree cleanup (standalone Mode 2 only)\nGated by `STORY_OWNS_WORKTREE`: `true`+passed → `Skill(skill: \"x-manage-worktrees\", args: \"remove --id story-XXXX-YYYY\")` + re-sync develop; `true`+failed → preserve (Rule 14 §4); `false` → skip.\n\n    TaskUpdate(id: p3Tasks.cleanup, status: \"completed\")\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode final --skill x-implement-story --phase Phase-3-Verify --expected-artifacts ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fverify-envelope-STORY-ID.json,ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Freview-story-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Ftechlead-review-story-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fstory-completion-report-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdoc-validate-report-STORY-ID.md\")\n\nTaskUpdate(id: phase3TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Verify ok`\n\n>>> Phase 3 completed. Lifecycle complete.\n\n## Error Envelope\n\n| Scenario | Action |\n|----------|--------|\n| Args invalid | `x-internal-normalize-args` non-zero → `ARGS_INVALID` |\n| Story file not found \u002F dependency incomplete | `x-internal-load-story-context` non-zero → `STORY_NOT_LOADABLE` |\n| Task dependency unresolved | Mark `BLOCKED` via `x-internal-update-status`; continue |\n| `x-implement-task` fails | Mark `FAILED`; block propagation; `TASK_FAILED` (unless `--task`) |\n| `x-validate-docs` fails after retry | `DOC_VALIDATION_FAILED` — abort Phase 3; operator must run `\u002Fx-generate-docs` + `--resume` |\n| Coverage \u002F AC \u002F consistency failure | `x-internal-verify-story` `passed=false` → `VERIFY_FAILED` |\n| `x-create-pr` fails | Task → `FAILED`; story-level → `PR_CREATE_FAILED` |\n| `x-execute-performance-tests` regression | `PERF_REGRESSION_DETECTED` (exit 14) — FIX-PR: investigate benchmark delta |\n| `x-execute-mutation-tests` below threshold | `MUTATION_SCORE_BELOW_THRESHOLD` (exit 17) — FIX-PR: kill surviving mutants |\n| `x-execute-contract-tests` breaking change | `CONTRACT_BREAKING_CHANGE` (exit 18) — FIX-PR: revert or bump MAJOR |\n| `x-validate-dependency-policy` blocks | `DEP_POLICY_BLOCK` (exit 20) — FIX-PR: remediate denied CVE \u002F license \u002F version violation (Rule 32) |\n| `x-fix-pr` compile regression | ABORT Step 3.2 with `PR_FIX_COMPILE_REGRESSION` |\n| Template missing (RULE-012) | WARN; `x-internal-write-report` degrades to inline format |\n| Corrupted `execution-state.json` on resume | `x-internal-resume-story` reinitializes |\n| Review NO-GO > 2 cycles | Keep `verifyPassed=true`; flag human-gate WARNING |\n| Sub-skill transient error | Retry once with 2s backoff; persistent → propagate |\n\nFull retry\u002Fbackoff schedule + `SubagentResult` error shape live in `references\u002Ffull-protocol.md` §6.\n\n## Recovery\n\nResuming after an aborted lifecycle may legitimately skip already-completed steps. The canonical signal is `CLAUDE_RECOVERY_MODE=1` — set automatically by `x-internal-resume-story` when `staleWarnings != []`. The PreToolUse hook `enforce-no-bypass-flags.sh` (EPIC-0059, Rule 45) then permits the flags below with a WARNING; skips remain visible in telemetry as `phase.end status=skipped`. **Operator-controlled sessions only — never in automated calls.** `CLAUDE_RECOVERY_MODE=1` is the ONLY accepted bypass variable; `CLAUDE_SKIP_AUDIT=1` \u002F `CLAUDE_NO_ENFORCE=1` do NOT bypass (RULE-059-07).\n\n| Flag | Skips |\n| :--- | :--- |\n| `--skip-verification` | Phase 3 (`x-internal-verify-story`) |\n| `--skip-review` | Step 3.2 (`x-review-codebase` + `x-review-pr`) |\n| `--skip-quality` | Step 3.Q (`x-execute-performance-tests` + `x-execute-mutation-tests` + `x-execute-contract-tests` + `x-validate-dependency-policy`) — **Recovery or hotfix\u002F* only** |\n| `--skip-doc` | Step 3.0 (`x-generate-docs` + `x-validate-docs`) — **Recovery or hotfix\u002F* only (Rule 27 Exception 2)** |\n| `--skip-smoke` | Smoke gate inside verify |\n| `--no-ci-watch` | CI-watch step in Phase 2 |\n\n## Backward Compatibility (RULE-008) + Idempotency (RULE-002)\nAll new EPIC-0049 flags absent → `targetBranch=develop`, `autoMerge=none`, `epicId` auto-derived — identical to EPIC-0048. `--auto-merge` without `--target-branch` → `ARGS_INVALID` (mutex). Idempotent: story load read-only, artifacts regen only on staleness, task dispatch short-circuits merged PRs, status mutations flock-protected, story PR re-run returns existing `{prUrl, prNumber}`. Full tables in `references\u002Ffull-protocol.md` §7-8.\n\n## Integration Notes\n`x-internal-normalize-args` (0.1), `x-internal-load-story-context` (0.2), `x-internal-resume-story` (0.4 cond.), `x-internal-build-story-plan` (1), `x-implement-task` (2 per-task), `x-create-pr` (2 per-task+story), `x-watch-pr-ci` (2), `x-evaluate-parallelism` (1), `x-review-codebase`\u002F`x-review-pr`\u002F`x-fix-pr` (3.2), `x-internal-verify-story` (3.1), `x-internal-write-story-report` (3.3), `x-internal-update-status` (all phases), `x-manage-worktrees` (0.3+3.5), `x-implement-epic` (caller).\n\n## Full Protocol\n\nMinimum viable orchestrator contract above. Complete Phase 0.3 worktree-mode decision table, Phase 1 parallelism matrix, Phase 2 fallback G1-G7 (no test plan \u002F no formal tasks), Phase 3 verify-gate schemas + specialist-review prompt templates + TL-review NO-GO cycle protocol, resume workflow detail, retry\u002Fbackoff\u002Fcircuit-breaker schedule, and the `SubagentResult` error shape all live in [`references\u002Ffull-protocol.md`](references\u002Ffull-protocol.md) per ADR-0012.\n","## Output Policy & Context Management\n\nEnglish ONLY; technical, direct, concise (no conversational fillers). Record only compact envelopes from `x-implement-task` (status\u002FtaskId\u002FcommitSha\u002Fcoverage*) — no full TDD logs. Reference plan\u002Freview files by path (+score for reviews); never re-load content. Read story file once in Phase 0 via `x-internal-load-story-context`. Delegate every state mutation to `x-internal-update-status`.\n\n# Skill: Story Implementation (Thin Orchestrator — ADR-0012 + EPIC-0049)\n\nOrchestrate story end-to-end via delegation. Inline: argv parse (delegate), load context (delegate), drive task loop (`x-implement-task`), close story-level PR. Zero direct git\u002Fgh\u002Fmvn calls.\n\n**EPIC-0049 flag propagation (OO-style — RULE-009):** `--target-branch \u003Cbranch>` (default `develop`) → `x-implement-task` + `x-create-pr`; `--auto-merge \u003Cstrategy>` (default `none`) → `x-create-pr`; `--epic-id \u003CID>` (auto-derived from storyId) → `x-create-pr` (adds `epic-XXXX` label). All flags absent = EPIC-0048 behavior (backward compat — RULE-008).\n\n## Triggers\n\n- `\u002Fx-implement-story story-XXXX-YYYY` — full lifecycle (legacy default: target=develop, no auto-merge)\n- `\u002Fx-implement-story story-XXXX-YYYY --target-branch epic\u002F0049 --auto-merge merge --epic-id 0049` — orchestrator-propagated run targeting an epic branch\n- `\u002Fx-implement-story story-XXXX-YYYY --task TASK-NNN` — execute only a specific task (resume \u002F targeted)\n- `\u002Fx-implement-story story-XXXX-YYYY --resume` — continue from `execution-state.json` via `x-internal-resume-story`\n- `\u002Fx-implement-story story-XXXX-YYYY --auto-approve-pr` — parent-branch mode (RULE-004)\n- `\u002Fx-implement-story story-XXXX-YYYY --worktree` — standalone opt-in worktree (ADR-0004 Mode 2)\n- `\u002Fx-implement-story story-XXXX-YYYY --interactive` — opt-in to gate menus (PROCEED\u002FFIX-PR\u002FABORT)\n\n## Review Policy — `MANDATORY — NON-NEGOTIABLE`: Specialist (`x-review-codebase`) + Tech-Lead (`x-review-pr`) reviews in Step 3.2 MUST execute unless `--skip-verification` \u002F `--skip-review`; silent omission is a `PROTOCOL_VIOLATION` and subagents MUST abort with `\"REVIEW_SKIPPED_WITHOUT_FLAG\"`.\n\n## Parameters\n\n| Flag | Type | Default | Description |\n|------|------|---------|-------------|\n| `STORY-ID` | String | — | Positional, required. Pattern `story-XXXX-YYYY`. |\n| `--target-branch` | String | `develop` | Base branch for task + story PRs. Propagated to `x-implement-task` + `x-create-pr`. |\n| `--auto-merge` | Enum | `none` | `merge\\|squash\\|rebase\\|none`. Propagated to `x-create-pr`. Requires `--target-branch` when not `none`. |\n| `--epic-id` | String(4) | auto | Auto-derived from story prefix. Propagated to `x-create-pr` (adds `epic-XXXX` label). |\n| `--auto-approve-pr` | Boolean | `false` | Parent-branch mode (RULE-004): task PRs target `feat\u002Fstory-...`. |\n| `--task` | String | — | Execute only `TASK-XXXX-YYYY-NNN`. |\n| `--resume` | Boolean | `false` | Delegates resume-point detection to `x-internal-resume-story`. |\n| `--skip-verification` | Boolean | `false` | **Recovery-only.** Skips Phase 3; flagged outside `## Recovery` blocks. |\n| `--skip-smoke`, `--skip-review` | Boolean | `false` | Bypass smoke gate \u002F specialist + TL reviews (the only supported per-review bypass path). |\n| `--full-lifecycle`, `--worktree` | Boolean | `false` | Full execution \u002F standalone worktree mode. |\n| `--interactive` | Boolean | `false` | Opt-in to 3-option gate menus (PROCEED\u002FFIX-PR\u002FABORT). Default: non-interactive (Rule 20, EPIC-0061). |\n| `--non-interactive` | Boolean | **DEPRECATED** | Was CI opt-in; now equals default. Emits WARN. Removed in 2 releases. |\n| `--no-auto-remediation`, `--no-ci-watch` | Boolean | `false` | Skip Step 3.5 remediation \u002F Rule 21 CI-watch. |\n\n**Deprecated (no-op, warn-once):** `--manual-contract-approval`, `--manual-task-approval` (both since EPIC-0043).\n\n## Output Contract\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `storyId`, `epicId` | String | Story + auto-derived epic ID |\n| `status` | Enum | `SUCCESS \\| FAILED \\| PARTIAL` |\n| `targetBranch`, `autoMergeStrategy` | String, Enum | Resolved base branch + merge strategy |\n| `tasksExecuted` | List\u003C{id, status, commitSha, prNumber}> | One entry per task dispatched |\n| `prNumber` \u002F `prUrl` | Integer\\|null \u002F String\\|null | Story-level PR; null without `--auto-approve-pr` |\n| `verifyPassed` | Boolean | Phase 3 verify-gate `passed` |\n| `reportPath` | String | Final report from `x-internal-write-story-report` |\n| `coverageLine` \u002F `coverageBranch` | Number\\|null | Filtered coverage |\n\n## Error Codes\n\n| Exit | Code | Condition |\n|------|------|-----------|\n| 1 | `ARGS_INVALID` | `x-internal-normalize-args` exit 1 |\n| 2 | `STORY_NOT_LOADABLE` | `x-internal-load-story-context` non-zero |\n| 3 | `PLAN_FAILED` | `x-internal-build-story-plan` non-zero |\n| 4 | `TASK_FAILED` | One or more tasks returned `FAILED` |\n| 5 | `VERIFY_FAILED` | `x-internal-verify-story` `passed=false` |\n| 6 | `PR_CREATE_FAILED` | `x-create-pr` non-zero on story-level PR |\n\n## Workflow Overview\n\n```\nPhase 0 : Args, Context & Resume  (x-internal-normalize-args + load-context + resume — ~80 lines)\nPhase 1 : Plan                    (x-internal-build-story-plan — ~50 lines)\nPhase 2 : Task Execution Loop     (x-implement-task per task + x-create-pr — ~120 lines)\nPhase 3 : Verify, Report, Cleanup (x-internal-verify-story + x-internal-write-story-report + x-manage-worktrees remove — ~70 lines)\n```\n\n## CRITICAL EXECUTION RULE\n\n**4 phases (0–3). ALL phases through Phase 2 are mandatory. NEVER stop before Phase 2 completes.** Print `>>> Phase N completed. Proceeding to Phase N+1 (...)...` between phases; `>>> Phase 3 completed. Lifecycle complete.` at end.\n\n## Phase 0 — Args, Context & Resume\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-0-Prepare`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-0-Context\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase0TaskId, status: \"completed\")` after §0.4):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 0 - Context\", activeForm: \"Loading story context and resume state\")\n\n### 0.1 Args normalization (Rule 13 Pattern 1)\n\n    Skill(skill: \"x-internal-normalize-args\", args: \"--schema @references\u002Fargs-schema.json --argv \\\"{raw argv}\\\"\")\n\nConsume `{parsed, warnings, errors}`: exit `ARGS_INVALID` on errors; print warnings once; extract `storyId`, `epicId` (auto-derived from storyId prefix), `targetBranch`, `autoMerge`, and all flags (skipReview\u002FskipVerification\u002FskipSmoke\u002FautoApprovePr\u002FnonInteractive\u002Fworktree\u002Ftask\u002Fresume\u002FnoAutoRemediation\u002FnoCiWatch\u002FfullLifecycle) for phase propagation.\n\n### 0.1a Persist interactiveMode (EPIC-0068)\n\nWrite the resolved interactive mode to `execution-state.json` so the Stop hook `enforce-continuous-flow.sh` can determine whether to emit nudges:\n\n    Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type story --id \u003CSTORY-ID> --field interactiveMode --value \u003Cinteractive|non-interactive>\")\n\nValue is `\"interactive\"` when `--interactive` flag was passed or `CLAUDE_LEGACY_INTERACTIVE=1`; otherwise `\"non-interactive\"` (Rule 20 default, EPIC-0061).\n\n### 0.2 Load story context\n\n    Skill(skill: \"x-internal-load-story-context\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID>\")\n\nSub-skill reads story, validates predecessors, runs 7-artifact staleness pre-check (arch\u002Fimpl\u002Ftest\u002Ftasks\u002Fsecurity\u002Fcompliance\u002Fper-task plans), classifies scope (SIMPLE\u002FSTANDARD\u002FCOMPLEX), detects planningMode (PRE_PLANNED\u002FHYBRID\u002FINLINE). Envelope: `{storyPath, tasksCount, scope, planningMode, predecessorsComplete, artifactFreshness[]}`. Non-zero → `STORY_NOT_LOADABLE`.\n\n### 0.3 Worktree-first branch decision (Rule 14 + ADR-0004)\n\n`Skill(skill: \"x-manage-worktrees\", args: \"detect-context\")` → apply 3-way decision (REUSE\u002FCREATE\u002FLEGACY); set `STORY_OWNS_WORKTREE` in-memory. Full table in `references\u002Ffull-protocol.md` §1.\n\n### 0.4 Resume (conditional on `--resume`)\n\n    Skill(skill: \"x-internal-resume-story\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID>\")\n\nEnvelope: `{resumePoint, tasksCompleted[], tasksPending[], lastCommitSha, staleWarnings[]}`. Use `tasksPending` as Phase 2 iteration filter; print staleWarnings once.\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-0-Context\")\n\nTaskUpdate(id: phase0TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-0-Prepare ok`\n\n>>> Phase 0 completed. Proceeding to Phase 1 (Plan)...\n\n\u003C!-- phase-no-gate: API-First is conditional — only activates for stories with contract interfaces; gates live inside the conditional block -->\n## Phase 0.5 — API-First Contract Generation (Conditional)\n\nActivates ONLY when `has_contract_interfaces=True` (story declares interfaces of type `rest`, `grpc`, `event-consumer`, `event-producer`, or `websocket`). Open phase tracker when active:\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 0 - API Contract\", activeForm: \"Generating API-first contracts\")\n\nGenerates draft OpenAPI 3.1 \u002F Protobuf 3 \u002F AsyncAPI 2.6 in `contracts\u002F{STORY_ID}-*.yaml|proto`, validates via `x-lint-contract-tests`, and pauses at **Step 0.5.4** via `AskUserQuestion` (EPIC-0043 gate — replaces legacy `CONTRACT PENDING APPROVAL` text). Full interface-to-format mapping table and generator details live in `references\u002Ffull-protocol.md` §2.\n\n    TaskUpdate(id: phase05TaskId, status: \"completed\")\n\n## Phase 1 — Plan\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-1-Plan`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-1-Plan\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase1TaskId, status: \"completed\")` after parallelism gate):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 1 - Plan\", activeForm: \"Orchestrating parallel planning wave\")\n\n**Batch A — emit 6 planner task trackers in ONE message (SIMPLE scope skips security+compliance).** One TaskCreate per planner (Arch plan \u002F Impl plan \u002F Test plan \u002F Task breakdown \u002F Security assessment \u002F Compliance assessment). Store IDs: `plannerTasks = {arch, impl, test, tasks, security, compliance}`.\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 1 › Arch plan\", activeForm: \"Running arch plan\")\n    [+5 siblings per above naming] — see `references\u002Ffull-protocol.md` §Phase-1-Planning-Wave for exhaustive list.\n\n**Batch B — after `x-internal-build-story-plan` returns, emit 6 `TaskUpdate(id: plannerTasks.X, status: \"completed\")` in ONE message (arch\u002Fimpl\u002Ftest\u002Ftasks\u002Fsecurity\u002Fcompliance).**\n\n    TaskUpdate(id: plannerTasks.arch, status: \"completed\")\n    TaskUpdate(id: plannerTasks.impl, status: \"completed\")\n    TaskUpdate(id: plannerTasks.test, status: \"completed\")\n    TaskUpdate(id: plannerTasks.tasks, status: \"completed\")\n    TaskUpdate(id: plannerTasks.security, status: \"completed\")\n    TaskUpdate(id: plannerTasks.compliance, status: \"completed\")\n\n**Skipped entirely when `planningMode=PRE_PLANNED`** (all 7 artifacts fresh — logged `\"[phase-1] skipped — PRE_PLANNED\"` and proceeding to Phase 2).\n\nOtherwise invoke:\n\n    Skill(skill: \"x-internal-build-story-plan\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> --scope \u003CSCOPE> [--skip-review]\")\n\nThe sub-skill orchestrates parallel story-planning (Phase 1 carve-out): invokes `x-plan-architecture` (Step 1A) then dispatches up to 5 sibling Agent subagents in ONE assistant message for implementation plan, test plan, task breakdown, security assessment, and compliance assessment (Steps 1B-1F). Scope-aware: SIMPLE skips 1E\u002F1F.\n\nConsume the envelope `{artifacts: [{name, path, status}], planningMode, scopeResolved}`. On non-zero exit → exit with code `PLAN_FAILED`. Persist the envelope in orchestrator memory — never re-read the artifact files.\n\n### Parallelism gate (RULE-004 hotspots)\n\nInvoke `Skill(skill: \"x-evaluate-parallelism\", args: \"--scope=story --story=\u003CSTORY-ID>\")` (EPIC-0041 \u002F story-0041-0006). On detected hard\u002Fregen collision, degrade the affected wave to serial and record `ExecutionState.parallelismDowngrades`. Full matrix in `references\u002Ffull-protocol.md` §3.\n\nWave gate — all planning artifacts produced:\n\n    Skill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode wave --skill x-implement-story --phase Phase-1-Plan --expected-tasks {planner-task-ids} --expected-artifacts {arch-path},{impl-path},{test-path},{tasks-path},{security-path},{compliance-path}\")\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-1-Plan\")\n\nTaskUpdate(id: phase1TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-1-Plan ok`\n\n>>> Phase 1 completed. Proceeding to Phase 2 (Task Execution Loop)...\n\n## Phase 2 — Task Execution Loop (RULE-001)\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-2-Implement`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-2-Execute\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase2TaskId, status: \"completed\")` after story-level PR):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 2 - Execute\", activeForm: \"Running task execution loop\")\n\nRead tasks from `ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Ftasks-story-XXXX-YYYY.md` (Section 8 fallback when absent). Apply the `tasksPending` filter from Phase 0.4 when resuming. For each `TASK-XXXX-YYYY-NNN` not in `DONE`\u002F`BLOCKED`:\n\n**Per-task tracking (sequential, chained via `addBlockedBy`):**\n\n    currentTaskId = TaskCreate(subject: \"{STORY_ID} › Phase 2 › TASK-XXXX-YYYY-NNN\", activeForm: \"Executing TASK-XXXX-YYYY-NNN\")\n    [if previous task exists]: TaskUpdate(id: previousTaskId, addBlockedBy: [currentTaskId])\n\n    ... dispatch x-implement-task + x-create-pr ...\n\n    TaskUpdate(id: currentTaskId, status: \"completed\")\n\n### 2.1 Per-task dispatch\n1. Check deps against `execution-state.json`; unresolved → `BLOCKED` via `x-internal-update-status`, skip.\n2. **Dispatch TDD:** `Skill(skill: \"x-implement-task\", model: \"sonnet\", args: \"\u003CTASK-ID> --orchestrated --target-branch \u003CtargetBranch> [--auto-merge \u003Cstrategy>] [--epic-id \u003CEPIC-ID>] [--auto-approve-pr] [--non-interactive]\")` → RED\u002FGREEN\u002FREFACTOR + atomic commit + push `feat\u002Ftask-XXXX-YYYY-NNN-desc`. Returns `{status, taskId, commitSha, branchName, coverageLine, coverageBranch}`.\n3. **CI-watch (Rule 21 + Rule 45):** unless `--no-ci-watch`. **MANDATORY TOOL CALL — NON-NEGOTIABLE (Rule 24):** `Skill(skill: \"x-watch-pr-ci\", args: \"--branch \u003CbranchName>\")` — 8 exit codes. Persists `.claude\u002Fstate\u002Fpr-watch-{PR}.json`; absence on a merged PR fails Camada 3 audit.\n4. **PR creation (RULE-009 OO propagation):** `Skill(skill: \"x-create-pr\", model: \"haiku\", args: \"\u003CTASK-ID> --target-branch \u003CtargetBranch> --auto-merge \u003Cstrategy> --epic-id \u003CEPIC-ID> [--auto-approve-pr]\")`. With `--auto-approve-pr`, task-PR target becomes parent story branch. Consume `{prUrl, prNumber, prMergeStatus}`.\n5. **Status:** `Skill(skill: \"x-internal-update-status\", args: \"--file ai\u002Fepics\u002Fepic-XXXX\u002Fexecution-state.json --type task --id \u003CTASK-ID> --field status --value \u003CSTATUS>\")`.\n\n### 2.2 Fail-fast + story-level PR\nOn `status=FAILED`, mark dependants `BLOCKED` and exit Phase 2 with `TASK_FAILED` (unless `--task` — single-task mode). When `--auto-approve-pr` is set, after all tasks succeed push parent branch and create story-level PR:\n\n    Skill(skill: \"x-create-pr\", model: \"haiku\", args: \"--story-id \u003CSTORY-ID> --head feat\u002Fstory-\u003CSTORY-ID> --target-branch \u003CtargetBranch> --auto-merge \u003Cstrategy> --epic-id \u003CEPIC-ID>\")\n\nWithout `--auto-approve-pr`, task PRs are the unit of delivery — no story PR. Non-zero exit → `PR_CREATE_FAILED`. Fallback G1-G7 in `references\u002Ffull-protocol.md` §4.\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode post --skill x-implement-story --phase Phase-2-Execute\")\n\nTaskUpdate(id: phase2TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-2-Implement ok`\n\n>>> Phase 2 completed. All tasks executed. Proceeding to Phase 3 (Verify & Report)...\n\n## Phase 3 — Verify, Report & Cleanup\n\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Verify`\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode pre --skill x-implement-story --phase Phase-3-Verify\")\n\nOpen phase tracker (close with `TaskUpdate(id: phase3TaskId, status: \"completed\")` at FINAL gate):\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 - Verify\", activeForm: \"Running verify gate and reviews\")\n\n**Sub-task trackers (open in Batch A — one per sub-step 3.Q–3.5 — before `Skip verification`):** emit 13 `TaskCreate` in ONE message (one per Quality-regression \u002F Quality-perf \u002F Quality-mutation \u002F Quality-contract \u002F Quality-dep-policy \u002F Doc generate \u002F Doc validate \u002F Verify gate \u002F Specialist reviews \u002F Tech lead review \u002F Report \u002F Status finalize \u002F Worktree cleanup). Store IDs: `p3Tasks = {qualityRegression, qualityPerf, qualityMutation, qualityContract, qualityDepPolicy, docGenerate, docValidate, verify, specialist, techLead, report, status, cleanup}`.\n\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality regression\", activeForm: \"Running x-execute-shell-regression-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality perf\", activeForm: \"Running x-execute-performance-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality mutation\", activeForm: \"Running x-execute-mutation-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality contract\", activeForm: \"Running x-execute-contract-tests\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Quality dep-policy\", activeForm: \"Running x-validate-dependency-policy\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Doc generate\", activeForm: \"Running x-generate-docs\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Doc validate\", activeForm: \"Running x-validate-docs\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Verify gate\", activeForm: \"Running story verify gate\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Specialist reviews\", activeForm: \"Running specialist reviews\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Tech lead review\", activeForm: \"Running tech lead review\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Report\", activeForm: \"Generating story completion report\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Status finalize\", activeForm: \"Finalizing story status\")\n    TaskCreate(subject: \"{STORY_ID} › Phase 3 › Worktree cleanup\", activeForm: \"Cleaning up worktree\")\n\n**Skipped only under `--skip-verification`** (recovery-only — see Rule 22). Every `Skill(...)` below is a **MANDATORY TOOL CALL** (Rule 24); inlining is a violation and the CI audit fails merges lacking evidence artifacts. Full per-step details (sub-skill envelopes, NO-GO cycle protocol, worktree-cleanup decision table) in `references\u002Ffull-protocol.md` §5.\n\n### 3.Q Quality Gates — **MANDATORY conditional** (EPIC-0072 + EPIC-0073 + EPIC-0074, Rule 24)\n> Sequence: regression → perf → mutation → contract → dep-policy (D-R11 fast-fail). `QualityConfig`\u002F`DependencyPolicyConfig` from project YAML. Disabled sub-gates emit WARN; no report produced. First non-zero exit cancels remaining gates.\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Regression`\n    Skill(skill: \"x-execute-shell-regression-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fregression-report-STORY-ID.md\")  [conditional: flag.quality_regression_enabled]\n    TaskUpdate(id: p3Tasks.qualityRegression, status: \"completed\")\nExit non-zero → `REGRESSION_DETECTED` (19); **D-R11: skip 3.Q.1, 3.Q.2, and 3.Q.3**.\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Regression ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Perf`\n    Skill(skill: \"x-execute-performance-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fperf-report-STORY-ID.md\")  [conditional: flag.quality_performance_enabled]\n    TaskUpdate(id: p3Tasks.qualityPerf, status: \"completed\")\nExit non-zero → `PERF_REGRESSION_DETECTED` (14); **D-R11: skip 3.Q.2 and 3.Q.3**.\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Perf ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Mutation`\n    Skill(skill: \"x-execute-mutation-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fmutation-report-STORY-ID.md\")  [conditional: flag.quality_mutation_enabled]\n    TaskUpdate(id: p3Tasks.qualityMutation, status: \"completed\")\nExit non-zero → `MUTATION_SCORE_BELOW_THRESHOLD` (17); **D-R11: skip 3.Q.3**.\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Mutation ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-Contract`\n    Skill(skill: \"x-execute-contract-tests\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fcontract-report-STORY-ID.md\")  [conditional: flag.quality_contract_enabled]\n    TaskUpdate(id: p3Tasks.qualityContract, status: \"completed\")\nExit non-zero → `CONTRACT_BREAKING_CHANGE` (18).\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-Contract ok`\n\u003C!-- TELEMETRY: phase.start -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh start x-implement-story Phase-3-Quality-DepPolicy`\n    Skill(skill: \"x-validate-dependency-policy\", model: \"haiku\", args: \"--story-id \u003CSTORY-ID> --report ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdep-policy-validation-report-STORY-ID.md\")  [conditional: flag.dep_policy_enabled]\n    TaskUpdate(id: p3Tasks.qualityDepPolicy, status: \"completed\")\nExit non-zero → `DEP_POLICY_BLOCK` (20); gate fails, merge blocked (Rule 32 §Enforcement).\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Quality-DepPolicy ok`\n\n### 3.0 Documentation — `MANDATORY — NON-NEGOTIABLE` (Rule 31, EPIC-0071)\n\n`--skip-doc` in `## Recovery`\u002F`hotfix\u002F*` only (Rule 27 Ex. 2). Retry\u002Fabort: `references\u002Ffull-protocol.md` §5.\n\n    Skill(skill: \"x-generate-docs\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID>\")  [required]\n    TaskUpdate(id: p3Tasks.docGenerate, status: \"completed\")\n    Skill(skill: \"x-validate-docs\", model: \"sonnet\", args: \"--story-id \u003CSTORY-ID> --report-path ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdoc-validate-report-STORY-ID.md\")  [required]\n    TaskUpdate(id: p3Tasks.docValidate, status: \"completed\")\n\n### 3.1 Verify gate — MANDATORY TOOL CALL\n\n    Skill(skill: \"x-internal-verify-story\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> [--coverage-threshold-line 95] [--coverage-threshold-branch 90]\")\n    TaskUpdate(id: p3Tasks.verify, status: \"completed\")\n\nPersists `ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fverify-envelope-STORY-ID.json`. On `passed=false` → `VERIFY_FAILED`.\n\n### 3.2 Specialist + Tech-Lead reviews — `MANDATORY — NON-NEGOTIABLE` (unless `--skip-review`)\nBoth MUST execute in sequence; silent omission is `PROTOCOL_VIOLATION`. NO-GO cycle protocol in `references\u002Ffull-protocol.md` §5.\n    Skill(skill: \"x-review-codebase\", model: \"sonnet\", args: \"\u003CSTORY-ID>\")\n    TaskUpdate(id: p3Tasks.specialist, status: \"completed\")\n    Skill(skill: \"x-review-pr\", model: \"sonnet\", args: \"\u003CSTORY-ID>\")\n    TaskUpdate(id: p3Tasks.techLead, status: \"completed\")\nOn Tech-Lead GO, optional `x-fix-pr` unless `--no-auto-remediation`.\n\n### 3.3 Final report — MANDATORY TOOL CALL\n\n    Skill(skill: \"x-internal-write-story-report\", args: \"--story-id \u003CSTORY-ID> --epic-id \u003CEPIC-ID> --output ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fstory-completion-report-STORY-ID.md\")\n    TaskUpdate(id: p3Tasks.report, status: \"completed\")\n\n### 3.4 Status finalize\nFinalize atomically via `x-internal-update-status`: IMPLEMENTATION-MAP + Story `**Status:**` → `Concluída`, Jira → `Done`, state.json → `COMPLETE`.\n\n    TaskUpdate(id: p3Tasks.status, status: \"completed\")\n\n### 3.5 Worktree cleanup (standalone Mode 2 only)\nGated by `STORY_OWNS_WORKTREE`: `true`+passed → `Skill(skill: \"x-manage-worktrees\", args: \"remove --id story-XXXX-YYYY\")` + re-sync develop; `true`+failed → preserve (Rule 14 §4); `false` → skip.\n\n    TaskUpdate(id: p3Tasks.cleanup, status: \"completed\")\n\nSkill(skill: \"x-internal-verify-phase-gates\", model: \"haiku\", args: \"--mode final --skill x-implement-story --phase Phase-3-Verify --expected-artifacts ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fverify-envelope-STORY-ID.json,ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Freview-story-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Fplans\u002Ftechlead-review-story-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fstory-completion-report-STORY-ID.md,ai\u002Fepics\u002Fepic-XXXX\u002Freports\u002Fdoc-validate-report-STORY-ID.md\")\n\nTaskUpdate(id: phase3TaskId, status: \"completed\")\n\n\u003C!-- TELEMETRY: phase.end -->\nBash command: `$CLAUDE_PROJECT_DIR\u002F.claude\u002Fhooks\u002Ftelemetry-phase.sh end x-implement-story Phase-3-Verify ok`\n\n>>> Phase 3 completed. Lifecycle complete.\n\n## Error Envelope\n\n| Scenario | Action |\n|----------|--------|\n| Args invalid | `x-internal-normalize-args` non-zero → `ARGS_INVALID` |\n| Story file not found \u002F dependency incomplete | `x-internal-load-story-context` non-zero → `STORY_NOT_LOADABLE` |\n| Task dependency unresolved | Mark `BLOCKED` via `x-internal-update-status`; continue |\n| `x-implement-task` fails | Mark `FAILED`; block propagation; `TASK_FAILED` (unless `--task`) |\n| `x-validate-docs` fails after retry | `DOC_VALIDATION_FAILED` — abort Phase 3; operator must run `\u002Fx-generate-docs` + `--resume` |\n| Coverage \u002F AC \u002F consistency failure | `x-internal-verify-story` `passed=false` → `VERIFY_FAILED` |\n| `x-create-pr` fails | Task → `FAILED`; story-level → `PR_CREATE_FAILED` |\n| `x-execute-performance-tests` regression | `PERF_REGRESSION_DETECTED` (exit 14) — FIX-PR: investigate benchmark delta |\n| `x-execute-mutation-tests` below threshold | `MUTATION_SCORE_BELOW_THRESHOLD` (exit 17) — FIX-PR: kill surviving mutants |\n| `x-execute-contract-tests` breaking change | `CONTRACT_BREAKING_CHANGE` (exit 18) — FIX-PR: revert or bump MAJOR |\n| `x-validate-dependency-policy` blocks | `DEP_POLICY_BLOCK` (exit 20) — FIX-PR: remediate denied CVE \u002F license \u002F version violation (Rule 32) |\n| `x-fix-pr` compile regression | ABORT Step 3.2 with `PR_FIX_COMPILE_REGRESSION` |\n| Template missing (RULE-012) | WARN; `x-internal-write-report` degrades to inline format |\n| Corrupted `execution-state.json` on resume | `x-internal-resume-story` reinitializes |\n| Review NO-GO > 2 cycles | Keep `verifyPassed=true`; flag human-gate WARNING |\n| Sub-skill transient error | Retry once with 2s backoff; persistent → propagate |\n\nFull retry\u002Fbackoff schedule + `SubagentResult` error shape live in `references\u002Ffull-protocol.md` §6.\n\n## Recovery\n\nResuming after an aborted lifecycle may legitimately skip already-completed steps. The canonical signal is `CLAUDE_RECOVERY_MODE=1` — set automatically by `x-internal-resume-story` when `staleWarnings != []`. The PreToolUse hook `enforce-no-bypass-flags.sh` (EPIC-0059, Rule 45) then permits the flags below with a WARNING; skips remain visible in telemetry as `phase.end status=skipped`. **Operator-controlled sessions only — never in automated calls.** `CLAUDE_RECOVERY_MODE=1` is the ONLY accepted bypass variable; `CLAUDE_SKIP_AUDIT=1` \u002F `CLAUDE_NO_ENFORCE=1` do NOT bypass (RULE-059-07).\n\n| Flag | Skips |\n| :--- | :--- |\n| `--skip-verification` | Phase 3 (`x-internal-verify-story`) |\n| `--skip-review` | Step 3.2 (`x-review-codebase` + `x-review-pr`) |\n| `--skip-quality` | Step 3.Q (`x-execute-performance-tests` + `x-execute-mutation-tests` + `x-execute-contract-tests` + `x-validate-dependency-policy`) — **Recovery or hotfix\u002F* only** |\n| `--skip-doc` | Step 3.0 (`x-generate-docs` + `x-validate-docs`) — **Recovery or hotfix\u002F* only (Rule 27 Exception 2)** |\n| `--skip-smoke` | Smoke gate inside verify |\n| `--no-ci-watch` | CI-watch step in Phase 2 |\n\n## Backward Compatibility (RULE-008) + Idempotency (RULE-002)\nAll new EPIC-0049 flags absent → `targetBranch=develop`, `autoMerge=none`, `epicId` auto-derived — identical to EPIC-0048. `--auto-merge` without `--target-branch` → `ARGS_INVALID` (mutex). Idempotent: story load read-only, artifacts regen only on staleness, task dispatch short-circuits merged PRs, status mutations flock-protected, story PR re-run returns existing `{prUrl, prNumber}`. Full tables in `references\u002Ffull-protocol.md` §7-8.\n\n## Integration Notes\n`x-internal-normalize-args` (0.1), `x-internal-load-story-context` (0.2), `x-internal-resume-story` (0.4 cond.), `x-internal-build-story-plan` (1), `x-implement-task` (2 per-task), `x-create-pr` (2 per-task+story), `x-watch-pr-ci` (2), `x-evaluate-parallelism` (1), `x-review-codebase`\u002F`x-review-pr`\u002F`x-fix-pr` (3.2), `x-internal-verify-story` (3.1), `x-internal-write-story-report` (3.3), `x-internal-update-status` (all phases), `x-manage-worktrees` (0.3+3.5), `x-implement-epic` (caller).\n\n## Full Protocol\n\nMinimum viable orchestrator contract above. Complete Phase 0.3 worktree-mode decision table, Phase 1 parallelism matrix, Phase 2 fallback G1-G7 (no test plan \u002F no formal tasks), Phase 3 verify-gate schemas + specialist-review prompt templates + TL-review NO-GO cycle protocol, resume workflow detail, retry\u002Fbackoff\u002Fcircuit-breaker schedule, and the `SubagentResult` error shape all live in [`references\u002Ffull-protocol.md`](references\u002Ffull-protocol.md) per ADR-0012.\n",{"name":5,"model":24,"description":7,"allowed-tools":25,"argument-hint":26,"context-budget":27,"user-invocable":28,"requires-capabilities":29},"sonnet","Read, Write, Edit, Bash, Grep, Glob, Skill, Agent, TaskCreate, TaskUpdate, AskUserQuestion","[STORY-ID] [--target-branch \u003Cbranch>] [--auto-merge \u003Cmerge|squash|rebase|none>] [--epic-id \u003CXXXX>] [--auto-approve-pr] [--task TASK-ID] [--resume] [--skip-verification] [--skip-smoke] [--skip-review] [--full-lifecycle] [--worktree] [--non-interactive] [--no-auto-remediation] [--no-ci-watch]","medium",true,[],"main","952a630c6f38d193a349d86fa18db1de8843e837","src\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-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":40,"prompt":50,"zipAvailable":28},[41,44,47],{"tool":42,"command":43},"npx","npx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-implement-story",{"tool":45,"command":46},"bunx","bunx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-implement-story",{"tool":48,"command":49},"pnpm","pnpm dlx skills add review-bench\u002Federcnj_ia-dev-environment --skill x-implement-story","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002FSKILL.md",[52,58,62,66,70,74,78],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"README.md","REFERENCE","参考文档",5991,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002FREADME.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"references\u002Fargs-schema.json",3647,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Fargs-schema.json",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"references\u002Ffull-protocol.md",43058,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Ffull-protocol.md",{"path":67,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":68,"sourceHtmlUrl":69},"references\u002Fopenapi-generator.md",10162,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Fopenapi-generator.md",{"path":71,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fplanning-phases.md",12495,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Fplanning-phases.md",{"path":75,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fscope-assessment.md",2390,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Fscope-assessment.md",{"path":79,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fverification-phase.md",7223,"https:\u002F\u002Fgithub.com\u002Freview-bench\u002Federcnj_ia-dev-environment\u002Fblob\u002Fmain\u002Fsrc\u002Ftest\u002Fresources\u002Fgolden\u002Fjava-spring-fintech-pci\u002F.claude\u002Fskills\u002Fx-implement-story\u002Freferences\u002Fverification-phase.md",[83,90,97,104,111,118],{"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},"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":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},"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":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},"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":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},"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":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"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":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"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",[],[]]