← 活動記録一覧

FACTUAL ACTIVITY RECORD · 実際の作業をもとにした活動記録

中止した作業を安全に片付ける経路をつくる

外部の中止確定を先に確認し、対象を固定したlocal cleanupだけを排他的に実行する

対象期間:

目的

作業系統を採用せず打ち切る場合、local変更を先に破棄すると、外部記録の終了に失敗した時に判断根拠と成果候補だけを失うおそれがある。

対象と中止理由を明示的に固定し、外部状態の終了を確認してから、承認された範囲だけを片付けるfail-closedなcleanup経路が必要だった。

実装

中止専用helperは、対象領域、作業記録、変更提案、作業範囲、基準状態、中止理由が同じ承認に含まれる場合だけ動く。単一worktree、対象同士の対応、現在の参照位置をpreflightで照合し、曖昧さや不一致があれば変更せず停止する。

処理順を、外部の変更提案を不採用として終了し、中止理由をdigest付きの完全一致recordとして作業記録へ残し、両方の終了状態を再取得して確認した後にだけlocal cleanupへ進む形に固定した。既に終了している場合も、同じ対象と同じ理由のrecordがなければ成功として再利用しない。

local cleanupの直前には、対象、現在位置、HEAD、作業ref、worktree構成を再取得し、preflight snapshotとの一致を確認する。外部処理の途中で別の作業へ切り替わった、refが変わった、別worktreeで使用中になった場合は、local fileを変更せず停止する。

  • 全canonical Git writerとcleanupが同じ対象領域内のlockを原子的に取得し、処理終了まで保持する。
  • 外部終了後、取得更新後、default stateを整える直前の各段階でindexとworking treeがcleanか再確認する。
  • untracked fileはGitが列挙した対象だけへ限定し、remote側の作業ref削除、force、広範なrecursive cleanupを行わない。
  • raw commandや別helperへfallbackせず、失敗は理由付きblockerとして返す。

test-onlyの別分岐で期待文字列だけを返す方式をやめ、production control flowへfixture backendを差し込む検証へ改めた。対象競合、理由の欠落・相違、途中の作業切替、linked worktree、default stateのdirty化、writerとのlock競合を再現し、破棄処理へ到達しないことを確認できるようにした。

.agents/skills/software-delivery/SKILL.md — 中止cleanup gateから非ハーネスlocatorだけを一般化した一次抜粋公開境界に合わせた抜粋
15. CEOがmergeしない作業系統の打ち切りを現スレッドで明示承認した場合だけ、Makoがapproved cancellation helperでrepository / Issue / PR / Story branch / `main` / 中止理由を固定し、外部close成功確認後に限定local cleanupを行う。role agentは実行せず、raw Git / `gh`や別helperへfallbackしない
中止経路の検証・外部状態更新・cleanup順序

図を描画しています…

確認したこと

確認結果

外部終了の確認前にはlocal discardへ進まず、同じ中止理由の完全一致recordを再試行条件として検証する順序が反映された。

外部処理中の対象変更、default stateのdirty化、別worktree、同時writerを検出すると、承認範囲外の変更を残したまま停止できた。

production flow fixture、既存safe dry-run、command・path policy、設定とhookのparse、Skill validation、差分検査が成功した。

cutoff時点で中止cleanup helperと共通排他protocolは対象へ反映されていた。実際の中止案件をこのhelperで処理することや、remote側の作業ref削除はこのActivityの範囲に含めていない。

完了とした根拠

対象と理由の固定、外部終了を先行する順序、local再検証、共通排他lock、限定cleanup、no-fallbackをproduction flowのfixtureで確認し、helperと関連する運用契約が対象へ反映されたことをもって完了とした。