# workflow.yaml — loom 流水线定义
# 由 `/loom-init-project` 初始化，支持按任务类型选择不同流水线
#
# 使用方式：
#   在 skill 或 CLI 中通过 `pipeline_type` 参数指定，例如：
#   /loom-brainstorm type=feature
#   loom run --type bugfix
#
#   未指定 type 时，默认使用 feature 流水线。
#
# 字段说明：
#   outputs:      离开本阶段前必须产出的文件列表（inline list）
#   requires:     进入本阶段前必须存在的文件/目录（尾 / 表示目录）
#   gate_verdict: 离开本阶段前须读取该文件且 verdict===PASS
#   evidence_required: PASS 时须校验落盘日志的 command/exit-code/path/sha256 收据
#   validators:   离开本阶段前必须通过的确定性校验器
#   approval_requires: human-approval gate 通过前必须存在的文件/目录

# ─────────────────────────────────────────
# 全局配置
# ─────────────────────────────────────────
defaults:
  pipeline_type: feature # 未指定时的默认流水线
  max_retries: 3 # subagent 全局最大重试次数（可被 step 覆盖）
  timeout_minutes: 30 # 单个 step 超时时间（分钟）

reporting:
  on_complete:
    enabled: true
    evidence:
      enabled: true
      format: markdown
      trends: true
      hash_artifacts: true
    pr_evidence:
      enabled: false # PR/CI 场景可设为 true，或用 `loom run --pr-evidence`
    dashboard:
      enabled: false # 团队看板/发布场景可设为 true，或用 `loom run --dashboard`
      web: true
    memory_export:
      enabled: true

# ─────────────────────────────────────────
# 流水线定义
# ─────────────────────────────────────────
pipelines:
  # 新功能开发 — 完整六步
  feature:
    description: "新功能开发，从需求到上线的完整流程"
    steps:
      - id: brainstorming
        skill: loom-brainstorming
        next: detail-expansion
        outputs: [spec.md, requirements.json, handoffs/brainstorming.json]
        description: "需求头脑风暴，探索 2-3 种实现方案，输出 spec.md"

      - id: detail-expansion
        skill: loom-detail-expansion
        next: planning
        requires: [spec.md, requirements.json]
        outputs: [requirements.json, handoffs/detail-expansion.json]
        validators: [detail-expansion-pass]
        description: "按 15 维度展开 behavior 强制清单，补齐 test_plan 与 applicability"

      - id: planning
        skill: loom-writing-plans
        next: analyze-artifacts
        requires: [spec.md, requirements.json]
        outputs: [plan.md, tasks/, traceability.json, handoffs/planning.json]
        validators: [planning-artifacts]
        description: "分层拆解实现计划，输出 plan.md"

      - id: analyze-artifacts
        skill: loom-analyze-artifacts
        next: approved
        requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json]
        outputs: [handoffs/analyze-artifacts.json]
        validators: [artifact-analysis-pass]
        description: "planning 后审批前跨产物一致性只读分析"

      - id: approved
        gate: human-approval
        description: "等待用户确认 plan 后继续"
        next: git-worktree

      - id: git-worktree
        skill: loom-using-git-worktrees
        next: executing
        requires: [spec.md, requirements.json, plan.md, traceability.json]
        outputs: []
        description: "创建隔离 feature 分支"

      - id: executing
        skill: loom-subagent-driven-development
        next: converge
        requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json]
        outputs: [test-report.md, traceability.json, handoffs/executing.json]
        gate_verdict: test-report.md
        evidence_required: true
        validators: [task-state-closure, requirement-task-closure]
        description: "subagent 并行编码执行"

      - id: converge
        skill: loom-converge
        next: verification
        requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json, test-report.md]
        outputs: [handoffs/converge.json]
        validators: [convergence-pass]
        description: "对照意图清单分类覆盖度，missing/partial 回流 executing，内部调用 omission-hunter"

      - id: verification
        skill: loom-verification-before-completion
        next: code-review-request
        requires: [spec.md, requirements.json, traceability.json, test-report.md, convergence-report.json]
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        validators: [verification-artifacts]
        description: "完成前验证：spec 覆盖 / 类型一致性 / 编译测试"

      - id: code-review-request
        skill: loom-requesting-code-review
        next: review-gate
        requires: [verify-report.md, spec.md]
        outputs: [review-request.md, handoffs/code-review-request.json]
        description: "双轴预审查（Standards + Spec）后生成代码审查请求"

      - id: review-gate
        gate: human-approval
        description: "审查请求已发出，等待审查者反馈到达后继续"
        requires: [review-request.md]
        approval_requires: [review-feedback.md]
        next: code-review-response

      - id: code-review-response
        skill: loom-receiving-code-review
        next: synced
        requires: [review-request.md, review-feedback.md]
        outputs: [review-response.md, handoffs/code-review-response.json]
        description: "处理审查反馈：修复 BLOCKER / 采纳或拒绝 SUGGESTION / 讨论沟通，修复后重跑测试"

      - id: synced
        skill: loom-index-update
        requires: [verify-report.md]
        outputs: []
        description: "图后端同步与结构化记忆更新，流水线结束"

  # Bug 修复 — 跳过头脑风暴和隔离分支
  bugfix:
    description: "已定位的 bug 修复，跳过需求探索和分支创建"
    steps:
      - id: planning
        skill: loom-writing-plans
        next: approved
        outputs: [plan.md, tasks/, handoffs/planning.json]
        description: "拆解修复计划，明确根因和改动范围，输出 plan.md"

      - id: approved
        gate: human-approval
        description: "确认修复方案后继续"
        next: executing

      - id: executing
        skill: loom-subagent-driven-development
        next: verification
        requires: [plan.md, tasks/]
        outputs: [test-report.md, handoffs/executing.json]
        gate_verdict: test-report.md
        evidence_required: true
        validators: [task-state-closure, requirement-task-closure]
        description: "执行修复"

      - id: verification
        skill: loom-verification-before-completion
        next: code-review-request
        requires: [test-report.md]
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        validators: [verification-artifacts]
        description: "验证修复：回归测试 / 边界用例"

      - id: code-review-request
        skill: loom-requesting-code-review
        next: review-gate
        requires: [verify-report.md]
        outputs: [review-request.md, handoffs/code-review-request.json]
        description: "双轴预审查（Standards + Spec）后生成代码审查请求"

      - id: review-gate
        gate: human-approval
        description: "审查请求已发出，等待审查者反馈到达后继续"
        requires: [review-request.md]
        approval_requires: [review-feedback.md]
        next: code-review-response

      - id: code-review-response
        skill: loom-receiving-code-review
        next: synced
        requires: [review-request.md, review-feedback.md]
        outputs: [review-response.md, handoffs/code-review-response.json]
        description: "处理审查反馈：修复 BLOCKER / 采纳或拒绝 SUGGESTION / 讨论沟通，修复后重跑测试"

      - id: synced
        skill: loom-index-update
        requires: [verify-report.md]
        outputs: []
        description: "图后端同步与结构化记忆更新，流水线结束"

  # 紧急热修复 — 最小步骤，直接执行
  hotfix:
    description: "生产紧急问题，最小化流程，人工把控"
    steps:
      - id: approved
        gate: human-approval
        description: "确认热修复范围和方案（必填：issue 描述 + 预期改动）"
        next: executing

      - id: executing
        skill: loom-subagent-driven-development
        next: verification
        outputs: [test-report.md, handoffs/executing.json]
        gate_verdict: test-report.md
        evidence_required: true
        validators: [task-state-closure, requirement-task-closure]
        description: "执行热修复"
        config:
          max_retries: 1 # 热修复不允许无限重试，失败立即上报

      - id: verification
        skill: loom-verification-before-completion
        requires: [test-report.md]
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        description: "最小验证：编译通过 + 核心路径冒烟测试"

  # 重构 — 有 brainstorm，但跳过独立 worktree（在当前分支操作）
  refactor:
    description: "代码重构，需要方案对比，但不开新分支"
    steps:
      - id: brainstorming
        skill: loom-brainstorming
        next: detail-expansion
        outputs: [spec.md, requirements.json, handoffs/brainstorming.json]
        description: "对比重构策略（如：逐步迁移 vs 整体替换）"

      - id: detail-expansion
        skill: loom-detail-expansion
        next: planning
        requires: [spec.md, requirements.json]
        outputs: [requirements.json, handoffs/detail-expansion.json]
        validators: [detail-expansion-pass]
        description: "按 15 维度展开 behavior 强制清单"

      - id: planning
        skill: loom-writing-plans
        next: analyze-artifacts
        requires: [spec.md, requirements.json]
        outputs: [plan.md, tasks/, traceability.json, handoffs/planning.json]
        validators: [planning-artifacts]
        description: "拆解重构步骤，明确回滚边界"

      - id: analyze-artifacts
        skill: loom-analyze-artifacts
        next: approved
        requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json]
        outputs: [handoffs/analyze-artifacts.json]
        validators: [artifact-analysis-pass]
        description: "planning 后审批前跨产物一致性只读分析"

      - id: approved
        gate: human-approval
        description: "确认重构计划"
        next: executing

      - id: executing
        skill: loom-subagent-driven-development
        next: converge
        requires: [requirements.json, plan.md, tasks/, traceability.json]
        outputs: [test-report.md, traceability.json, handoffs/executing.json]
        gate_verdict: test-report.md
        evidence_required: true
        validators: [task-state-closure, requirement-task-closure]
        description: "执行重构"

      - id: converge
        skill: loom-converge
        next: verification
        requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json, test-report.md]
        outputs: [handoffs/converge.json]
        validators: [convergence-pass]
        description: "对照意图清单分类覆盖度，missing/partial 回流 executing"

      - id: verification
        skill: loom-verification-before-completion
        next: code-review-request
        requires: [requirements.json, traceability.json, test-report.md, convergence-report.json]
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        validators: [verification-artifacts]
        description: "验证：行为一致性 / 性能对比 / 类型检查"

      - id: code-review-request
        skill: loom-requesting-code-review
        next: review-gate
        requires: [verify-report.md, spec.md]
        outputs: [review-request.md, handoffs/code-review-request.json]
        description: "双轴预审查（Standards + Spec）后生成代码审查请求"

      - id: review-gate
        gate: human-approval
        description: "审查请求已发出，等待审查者反馈到达后继续"
        requires: [review-request.md]
        approval_requires: [review-feedback.md]
        next: code-review-response

      - id: code-review-response
        skill: loom-receiving-code-review
        next: synced
        requires: [review-request.md, review-feedback.md]
        outputs: [review-response.md, handoffs/code-review-response.json]
        description: "处理审查反馈：修复 BLOCKER / 采纳或拒绝 SUGGESTION / 讨论沟通，修复后重跑测试"

      - id: synced
        skill: loom-index-update
        requires: [verify-report.md]
        outputs: []
        description: "同步图后端（重构后模块结构可能变化）"

  # PM 需求到 HTML 原型 — 跳过所有工程步骤，直出可交互原型
  pm-prototype:
    description: "PM 用：自然语言需求 → spec.md → 可交互 HTML 原型"
    steps:
      - id: brainstorming
        skill: loom-brainstorming
        next: spec-approved
        outputs: [spec.md, handoffs/brainstorming.json]
        description: "需求结构化：用户故事 / 功能边界 / 交互逻辑，输出 spec.md"

      - id: spec-approved
        gate: human-approval
        description: "PM 审查 spec.md，确认需求无误后继续"
        next: prototype

      - id: prototype
        skill: document-skills:web-artifacts-builder
        requires: [spec.md]
        outputs: [handoffs/prototype.json]
        description: "基于 spec.md 生成可交互 HTML 原型（布局 + 交互状态 + 基础视觉）"

  # 小改动 — 无需审批，直接执行后验证
  chore:
    description: "依赖升级、配置调整、文档更新等低风险改动"
    steps:
      - id: executing
        skill: null
        next: verification
        outputs: [handoffs/executing.json]
        validators: [task-state-closure, requirement-task-closure]
        description: "直接执行改动（不使用 subagent）"

      - id: verification
        skill: loom-verification-before-completion
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        description: "基础验证：lint / 编译"

  # 快速修复 — 最轻量流水线，适合单文件 bugfix、配置微调
  quickfix:
    description: "单文件小改动、已知 bug 的小修复、配置微调等，无需规划或 subagent。执行中发现改动涉及 2+ 文件或跨模块依赖，立即暂停并告知用户，建议升级为 `bugfix`"
    steps:
      - id: executing
        skill: null
        outputs: [handoffs/executing.json]
        validators: [task-state-closure, requirement-task-closure]
        description: "直接执行改动"

      - id: verification
        skill: loom-verification-before-completion
        outputs: [verify-report.md, handoffs/verification.json]
        gate_verdict: verify-report.md
        evidence_required: true
        description: "最小验证：lint / 编译 / 相关测试"

  # QA 验收流水线 — 测试人员使用
  qa:
    description: "QA 验收流水线：新功能验证 + 回归 + 集成测试，测试人员使用"
    steps:
      - id: qa-analysis
        skill: loom-qa
        next: qa-design
        outputs: [qa-plan.md, handoffs/qa-analysis.json]
        description: "分析变更范围（git diff + spec），识别受影响功能模块，确定测试矩阵"

      - id: qa-design
        skill: loom-qa
        next: qa-approved
        requires: [qa-plan.md]
        outputs: [qa-cases.md, handoffs/qa-design.json]
        description: "生成/更新测试用例，旧用例转 deprecated，输出本次 qa-cases.md"

      - id: qa-approved
        gate: human-approval
        description: "测试人员确认测试范围和用例后继续"
        next: qa-execution

      - id: qa-execution
        skill: loom-qa
        next: qa-signoff
        requires: [qa-cases.md]
        outputs: [qa-execution-report.md, manual-checklist.md, handoffs/qa-execution.json]
        gate_verdict: qa-execution-report.md
        evidence_required: true
        description: "执行自动化测试，回写 last_run，生成手动测试 checklist"

      - id: qa-signoff
        gate: human-approval
        description: "测试人员执行手动用例、勾选 checklist 后 approve"
        next: qa-report

      - id: qa-report
        skill: loom-qa
        requires: [qa-execution-report.md, manual-checklist.md]
        outputs: [qa-report.md, handoffs/qa-report.json]
        description: "汇总自动+手动结果，输出 qa-report.md（verdict: PASS/PARTIAL/FAIL）"

# ─────────────────────────────────────────
# Step 池 — AI 自主选择模式用
# ─────────────────────────────────────────
# 每个 step 是独立可选项；selection 阶段由 AI 按
# 用户需求 + 信号选择 steps 子集，再校验依赖闭包与护栏。
step_catalog:
  brainstorming:
    skill: loom-brainstorming
    requires: []
    outputs: [spec.md, requirements.json, handoffs/brainstorming.json]
    description: "需求头脑风暴，探索 2-3 种实现方案"
    skip_when: "根因明确 + 改动范围已知"

  detail-expansion:
    skill: loom-detail-expansion
    requires: [spec.md, requirements.json]
    outputs: [requirements.json, handoffs/detail-expansion.json]
    validators: [detail-expansion-pass]
    description: "按 15 维度展开 behavior 强制清单，补齐 test_plan 与 applicability"
    skip_when: "无 spec/requirements.json（如纯配置类 quickfix/chore）"
    mandatory: true

  planning:
    skill: loom-writing-plans
    requires: [spec.md, requirements.json]
    outputs: [plan.md, tasks/, traceability.json, handoffs/planning.json]
    validators: [planning-artifacts]
    description: "分层拆解实现计划"
    skip_when: "单文件改动 + 无架构影响"

  analyze-artifacts:
    skill: loom-analyze-artifacts
    requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json]
    outputs: [handoffs/analyze-artifacts.json]
    validators: [artifact-analysis-pass]
    description: "planning 后审批前跨产物一致性只读分析"
    skip_when: "无 spec/requirements.json 的轻量流程"
    mandatory: true

  git-worktree:
    skill: loom-using-git-worktrees
    requires: [plan.md, traceability.json]
    outputs: []
    description: "创建隔离 feature 分支"
    skip_when: "已在 worktree 内 / 用户偏好直接改"

  executing:
    skill: loom-subagent-driven-development
    requires: [plan.md, tasks/, traceability.json]
    outputs: [test-report.md, traceability.json, handoffs/executing.json]
    gate_verdict: test-report.md
    evidence_required: true
    validators: [task-state-closure, requirement-task-closure]
    description: "subagent 并行编码执行"
    mandatory: true

  converge:
    skill: loom-converge
    requires: [spec.md, requirements.json, plan.md, tasks/, traceability.json, test-report.md]
    outputs: [handoffs/converge.json]
    validators: [convergence-pass]
    description: "executing 后 verification 前对照意图清单，missing/partial 回流 executing，内部调用 omission-hunter"
    skip_when: "无 spec/requirements.json 的轻量流程"
    mandatory: true

  verification:
    skill: loom-verification-before-completion
    requires: [test-report.md, traceability.json]
    outputs: [verify-report.md, handoffs/verification.json]
    gate_verdict: verify-report.md
    evidence_required: true
    validators: [verification-artifacts]
    description: "spec 覆盖 / 类型一致性 / 编译测试"
    mandatory: true

  synced:
    skill: loom-index-update
    requires: [verify-report.md]
    outputs: []
    description: "图后端同步与结构化记忆更新"
    skip_when: "图后端未启用 + 无记忆更新"

  code-review-request:
    skill: loom-requesting-code-review
    requires: [verify-report.md]
    outputs: [review-request.md, handoffs/code-review-request.json]
    description: "双轴预审查（Standards + Spec）后生成代码审查请求"
    skip_when: "低风险小改动 / 用户明确跳过人工审查"

  review-gate:
    gate: human-approval
    description: "等待审查者反馈到达后继续（审查请求已发出，人工或外部审查者回看）"
    requires: [review-request.md]
    approval_requires: [review-feedback.md]

  code-review-response:
    skill: loom-receiving-code-review
    requires: [review-request.md, review-feedback.md]
    outputs: [review-response.md, handoffs/code-review-response.json]
    description: "处理审查反馈：BLOCKER 修复 / SUGGESTION 采纳或拒绝 / 讨论项沟通，修复后重跑测试"

# ─────────────────────────────────────────
# 选择规则 — AI 决策约束 + 规则短路
# ─────────────────────────────────────────
selection_rules:
  # 硬性护栏：AI 选择必须满足
  must_include: [executing, verification]
  never_skip_gates: true          # human-approval gate 不可跳
  dependency_closure: true        # 选 step 必须带依赖闭包
  max_steps: 13                   # feature 完整链含 detail-expansion/analyze-artifacts/converge 后为 13 步

  # 规则短路：明确信号 → 直接返回固定 pipeline，0 token
  short_circuits:
    - name: quickfix
      match:
        keywords_any: [typo, 错别字, 单文件, 小修复, 小改动, 文案]
        file_scope_max: 1
      steps: [executing, verification]
      skip_closure: true
      skip_gate: true
      skip_mandatory: true

    - name: chore
      match:
        keywords_any: [依赖升级, npm update, npm install, 配置调整, bump version, 依赖更新, package.json]
      steps: [executing, verification]
      skip_closure: true
      skip_gate: true
      skip_mandatory: true

    - name: hotfix
      match:
        keywords_any: [生产紧急, 线上故障, P0, hotfix, 紧急修复, 线上报警]
      steps: [approved, executing, verification]

    - name: bugfix-no-brainstorm
      match:
        keywords_any: [bug, 修复, fix, 缺陷]
        has_root_cause: true
        file_scope_max: 5
      steps: [planning, approved, executing, verification, code-review-request, review-gate, code-review-response, synced]

  # 风险等级 → 推荐策略
  risk_profiles:
    low:
      description: "单文件、配置类低风险改动"
      recommend_skip: [brainstorming, planning, git-worktree, synced]
      require_gate: false
    medium:
      description: "多文件、有依赖影响"
      recommend_skip: []
      require_gate: true
    high:
      description: "架构级、跨模块"
      recommend_skip: []
      require_gate: true
      require_brainstorming: true

  # AI 选择输入信号（由 pipeline-selector 收集）
  selection_signals:
    - keyword_match
    - file_scope
    - module_count
    - has_tests_impact
    - has_spec_exists
    - in_worktree
    - user_history
