Skip to content

タスク管理を単一 tasks.yaml に集約する #176

@nrslib

Description

@nrslib

概要

現在のディレクトリ移動ベースのタスク管理(tasks/completed/ / failed/)を廃止し、.takt/tasks.yaml 単一ファイルによる中央集権的な管理に移行する。

動機

  • タスク状態がファイルの物理的な位置に依存しており、メタデータ(失敗理由、直前のエージェント出力等)を持たせにくい
  • .md / .yaml / .yml の3形式サポートが不要な複雑さを生んでいる
  • 手動でファイルを置く運用は実際にはほぼ使われておらず、takt add 経由が主流
  • 並列実行時の claim 管理がインメモリ Set で、プロセス再起動で消える

設計

単一ファイル .takt/tasks.yaml

tasks:
  - name: fix-auth-bug
    status: pending          # pending | running | completed | failed
    content: |
      認証バグを修正する
    piece: default
    created_at: 2026-02-09T10:00:00
    started_at: null
    completed_at: null
    failure:                 # failed 時のみ
      movement: review
      error: "確認事項によりABORT"
      last_message: "セキュリティ要件の確認が必要です..."

フォーマット

  • YAML 固定.md サポート廃止)
  • タスク作成は takt add 経由のみ

状態遷移

pending → running → completed
                  → failed → pending(retry)

初期化・リセット

  • tasks.yaml が無い → 空の状態(タスクなし)
  • tasks.yaml を削除 → 全リセット
  • takt add 時にファイルが無ければ新規作成

異常状態の自動復旧

状態 原因 対処
running のまま残る プロセス kill / クラッシュ takt run 起動時に runningpending に戻す
ロックファイルが残る クラッシュ stale lock 検出(PID チェック)
YAML 破損 書き込み中断 削除して再作成

排他制御

.takt/tasks.yaml.lock  ← PID 入りロックファイル
  • 取得: lockfile 作成(既存なら PID 生存チェック → stale なら奪取)
  • 解放: lockfile 削除
  • 書き込み: 一時ファイルに書いて rename(アトミック)

影響範囲

廃止

  • .takt/completed/ ディレクトリ
  • .takt/failed/ ディレクトリ
  • .md 形式のタスクファイルサポート
  • ファイル移動ベースの状態管理(moveTask()
  • インメモリ claimedPaths による claim 管理

変更

  • src/infra/task/runner.tsTaskRunnertasks.yaml ベースに全面書き換え
  • src/infra/task/parser.ts — YAML 固定に簡素化
  • src/features/tasks/list/listFailedTasks()tasks.yaml から読むように変更
  • src/features/tasks/list/taskRetryActions.ts — retry 時に tasks.yaml のステータスを更新
  • src/features/tasks/execute/taskExecution.ts — 完了/失敗時に tasks.yaml を更新
  • src/features/tasks/add/takt addtasks.yaml に追記

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions