name: development-core
description: 計画・テスト・実装・ピアレビュー・裁定・検証付き修正・要件確認のコンテキストを注入できる共有開発フロー。
all_steps:
  rules:
    - ref: findings-handling
      position: before_instruction
    - ref: plain-terminology
      position: before_instruction

subworkflow:
  callable: true
  visibility: internal
  params:
    implementation_pool:
      type: facet_pool_ref
      default: coding-facets
    implementation_workflow:
      type: workflow_ref
      default: development-implement
    remediation_workflow:
      type: workflow_ref
      default: development-remediation
    implementation_companions:
      type: companion_ref[]
      default: []
    reviewer_suite:
      type: workflow_ref
      default: peer-review-suite-base
    peer_review_workflow:
      type: workflow_ref
      default: peer-review
    plan_policy:
      type: facet_ref[]
      facet_kind: policy
      default:
        - design-planning
    plan_knowledge:
      type: facet_ref[]
      facet_kind: knowledge
      default:
        - architecture
        - task-decomposition
    plan_instruction:
      type: facet_ref
      facet_kind: instruction
      default: plan
    plan_report_format:
      type: facet_ref
      facet_kind: report_format
      default: plan
    replan_instruction:
      type: facet_ref
      facet_kind: instruction
      default: replan-implementation
    testing_policy:
      type: facet_ref[]
      facet_kind: policy
      default:
        - coding
        - testing
    testing_knowledge:
      type: facet_ref[]
      facet_kind: knowledge
      default:
        - architecture
        - unit-testing
        - e2e-testing
    testing_instruction:
      type: facet_ref
      facet_kind: instruction
      default: write-tests-first
    testing_report_format:
      type: facet_ref
      facet_kind: report_format
      default: test-report
    development_policy:
      type: facet_ref[]
      facet_kind: policy
      default:
        - coding
        - testing
        - ai-antipattern
    development_knowledge:
      type: facet_ref[]
      facet_kind: knowledge
      default:
        - architecture
        - implementation-semantics
    implementation_instruction:
      type: facet_ref
      facet_kind: instruction
      default: development-implement-with-reports
    reimplementation_instruction:
      type: facet_ref
      facet_kind: instruction
      default: development-reimplement-with-reports
    scope_report_format:
      type: facet_ref
      facet_kind: report_format
      default: coder-scope
    review_policy_additions:
      type: facet_ref[]
      facet_kind: policy
      default: []
    review_policy:
      type: facet_ref[]
      facet_kind: policy
      default:
        - coding
        - testing
        - review
    review_knowledge:
      type: facet_ref[]
      facet_kind: knowledge
      default:
        - architecture
        - unit-testing
        - e2e-testing
    security_review_knowledge_additions:
      type: facet_ref[]
      facet_kind: knowledge
      default: []
    security_review_pool:
      type: facet_pool_ref
      default: security-review-facets
    fix_plan_instruction:
      type: facet_ref
      facet_kind: instruction
      default: fix-plan-from-review-resolution
    fix_replan_instruction:
      type: facet_ref
      facet_kind: instruction
      default: fix-replan
    fix_plan_report_format:
      type: facet_ref
      facet_kind: report_format
      default: fix-plan
    final_gate_instruction:
      type: facet_ref
      facet_kind: instruction
      default: supervise-review-resolution
initial_step: plan

facet_pools:
  coding-facets:
    uses: coding-facets
  takt-coding-facets:
    uses: takt-coding-facets
  security-review-facets:
    uses: security-review-facets
  takt-security-review-facets:
    uses: takt-security-review-facets

steps:
  - name: plan
    capabilities:
      - readonly
      - enable-skills
    uses: development-core-plan
    with:
      plan_policy:
        $param: plan_policy
      plan_knowledge:
        $param: plan_knowledge
      plan_instruction:
        $param: plan_instruction
      plan_report_format:
        $param: plan_report_format
    rules:
      - condition: 要件が明確で実装可能
        next: write_tests
      - condition: ユーザーが質問をしている（実装タスクではない）
        next: COMPLETE
      - condition: 要件が不明確、情報不足
        next: ABORT

  - name: replan
    tags:
      - plan
    edit: false
    capabilities: readonly
    persona: planner
    policy:
      - contract-change
      - $param: plan_policy
    knowledge:
      $param: plan_knowledge
    instruction:
      $param: replan_instruction
    output_contracts:
      report:
        - name: plan.md
          format:
            $param: plan_report_format
    rules:
      - condition: ユーザー入力や外部操作を待たずに、今回の要件・変更契約の未達を解消するため必要な、(a) プロジェクト内で実行可能な未試行の変更または原因調査と検証手順、または (b) コード変更・テスト変更・原因調査を伴わず、今回必須で未実行のプロジェクト内検証だけが残り、その実行条件を具体化した（無関係な既存問題・対象外作業の計画は含めない）
        next: implement
      - condition: 現行実装が今回の要件・受入条件を満たし、必要なプロジェクト内検証が完了し、今回必要な未試行の変更・調査が残っていない（無関係な既存問題・対象外作業だけが残る場合を含む。計画や未完了ラベルへの記載だけで必須化しない）
        next: peer-review
      - condition: 今回の必須条件について、確認済みの根拠によりプロジェクト内の変更や調査では解消できず、外部操作または外部回答を待つだけが残るか、要件が両立しないと確認できる
        next: ABORT

  - name: write_tests
    capabilities:
      - edit
      - enable-skills
    uses: development-core-write-tests
    with:
      testing_policy:
        $param: testing_policy
      testing_knowledge:
        $param: testing_knowledge
      testing_instruction:
        $param: testing_instruction
      testing_report_format:
        $param: testing_report_format
    rules:
      - condition: テスト作成が完了した
        next: implement
      - condition: テスト対象が未実装のためテスト作成をスキップする
        next: implement
      - condition: テスト作成を進行できない
        next: plan
      - condition: ユーザーへの確認事項があるためユーザー入力が必要
        next: write_tests
        requires_user_input: true
        interactive_only: true

  - name: implement
    kind: workflow_call
    call:
      $param: implementation_workflow
    args:
      implementation_pool:
        $param: implementation_pool
      implementation_companions:
        $param: implementation_companions
      development_policy:
        $param: development_policy
      development_knowledge:
        $param: development_knowledge
      implementation_instruction:
        $param: implementation_instruction
      reimplementation_instruction:
        $param: reimplementation_instruction
      scope_report_format:
        $param: scope_report_format
    rules:
      - condition: COMPLETE
        next: peer-review
      - condition: need_replan
        next: replan
      - condition: ABORT
        next: replan

  - name: peer-review
    kind: workflow_call
    call:
      $param: peer_review_workflow
    args:
      reviewer_suite:
        $param: reviewer_suite
      review_policy_additions:
        $param: review_policy_additions
      review_knowledge_additions:
        $param: review_knowledge
      security_review_knowledge_additions:
        $param: security_review_knowledge_additions
      security_review_pool:
        $param: security_review_pool
      fix_companions:
        $param: implementation_companions
      remediation_workflow:
        $param: remediation_workflow
      fix_pool:
        $param: implementation_pool
      plan_policy:
        $param: review_policy
      fix_policy:
        $param: development_policy
      fix_knowledge:
        $param: development_knowledge
      verification_knowledge:
        $param: review_knowledge
      verification_policy:
        $param: review_policy
      final_gate_policy:
        $param: review_policy
      fix_plan_instruction:
        $param: fix_plan_instruction
      fix_replan_instruction:
        $param: fix_replan_instruction
      fix_plan_report_format:
        $param: fix_plan_report_format
      final_gate_instruction:
        $param: final_gate_instruction
    rules:
      - condition: COMPLETE
        next: COMPLETE
      - condition: need_replan
        next: replan
      - condition: ABORT
        next: ABORT
