planの廃止、および後方互換を考えない方針Accepted(2026-09-11決定、2026-09-12実装完了。checklist-v2-core.md参照)。markharness-v2-design.md§9が「棚卸し対象」「要判断」として保留していたモジュールの帰結を確定する。あわせて0019〜0025の実装にあたり、後方互換を一切考えないことを明文化する。
markharness-v2-design.md§9は、src/verify.rs・src/audit_scope.rs・src/derived_index.rs・src/lineage.rsを「棚卸し対象(本書では未分類)」、src/milestone.rs・src/backfill.rsを「要判断」、src/canonical.rsを「見直し」として、M0着手時に判定することとしていた。
2026-09-11の実装前grillingセッションで、各モジュールの実際の呼び出し関係を計測した。その結果、設計書および0021の前提の一部が事実と異なること、および削除の可否がモジュールごとに大きく異なることが判明した。
planを廃止するsrc/plan.rs、markharness planサブコマンド、src/application.rs・src/presentation.rsのplan経路(CommandOutcome::PlanBuilt、plan_exit_code、build_verification_plan_value等)、tests/plan_domain.rs・tests/plan_cli.rsを削除する。
0020がEvidence適用可能性の厳密な突合を不要とした結果、planに残る機能は「TestCaseにExecutionBindingがあるか」を返すことだけになる。これはmarkharness-v2-design.md§6.2のcoverageが返す情報の部分集合であり、二つのサブコマンドで同じ問いに答える状態になる。縮小して残すより廃止するほうが小さい。
src/canonical.rsはimport専用に縮小するmarkharness import(native/JUnit)は維持する。0020が否定したのは証跡の保存・管理であり、外部テスト結果の取込経路そのものではない。CanonicalEvidence・EvidenceResult・RelationOriginKindのうちplan専用の型は§1の削除に伴って削除する。
StrictDoc取込を将来追加する場合は、markharness-v2-design.md§9のとおり別Adapterとして設計する。本ADRはその設計を先取りしない。
src/derived_index.rsとmarkharness cache indexを廃止するderived_index.rsはplan::BoundVersionsとexecution::read_all_resultsを入力とする。§1でplan.rsが削除され、execution.rsが0025のExecutionBindingへ置換されるため、入力の両方が失われる。.markharness-cache/index/の派生インデックスはChange Impact・Release Coverageの算出経路に登場せず、CLI統合テストも存在しない。
src/lineage.rs・src/milestone.rsは維持する両モジュールはsrc/changes.rsから内部利用されている。changes.rsはlineage::classifyでmerge commitの親関係を分類し、milestone::verify_audit_matches_tagをfail-closedゲートとして呼ぶ。changes.rsはmarkharness-v2-design.md§6.1でChange Impactの基盤として維持されるため、両モジュールを削除するとchanges computeとbackfill runがコンパイル不能になる。
CLIサブコマンドchanges lineage・milestone initも維持する。milestone initが作る.markharness/executions/<tag>/milestone.ymlは0020が廃止する実行記録とは別物(schema versionの監査コピー)であり、changes computeのゲートの入力である。CLIを削除するとこの入力を人が用意できなくなる。
src/verify.rs・src/backfill.rs・src/audit_scope.rsは維持するverify.rs(生成物とコミット済み生成物の差分検査)とbackfill.rs(過去milestone間のChangeEvent一括計算)は、逆向きの依存を持たず単独で削除できる。しかし0019〜0025のいずれとも衝突せず、削除する積極的な理由が無い。CLAUDE.mdのYAGNI原則は「要求されていない実装を足さない」ことを求めるものであり、既に動作し衝突しないコードを削除する根拠にはならない。
audit_scope.rs(62行)はidentity migrate --json・identity audit --json・changes compute --jsonの出力に含まれるaudit_scopeフィールドの型であり、0013の検証規則が定める出力契約の一部である。
execution::iso8601_utc_nowをsrc/time.rsへ移設するこの関数はsrc/identity/feature_ops.rsとsrc/identity/migration_manifest.rsから利用されている。0025§1によりExecutionBindingは実行日時を持たないため、時刻生成関数がexecutionモジュールに残ると「ExecutionBindingは日時を持たないのにexecutionが時刻関数を公開している」という、読み手を誤らせる構造になる。identity eventは日時を持ち続けるため関数自体は必要であり、責務に対応する位置へ移す。
0019〜0025の実装において、過去のスキーマ・データは最初から存在しなかったものとして扱う。互換コード、移行コード、旧データを名指しする診断、スキーマ版の引き上げは実装しない。これはCLAUDE.mdの設計ルール(「後方互換性を想定せず互換のための設計は排除し、常に最善のプロダクトを目指す」)の適用であり、markharness-v2-design.md旧§9.1が定めていた「廃止したevent種別を含むログを診断付きで拒否する」規定を置き換える。
帰結は次の通り。
ExecutionBindingは新しい保存先.markharness/bindings/のみを読み、旧.markharness/executions/の実行記録は参照しない。IdentityMutationから削除されるため、それを含むログには読み取り経路が存在しない。拒否用の診断コードも書かない。requirement.ymlのsourceは必須とする(0023§1の「省略時はnative」は既存ファイルを無変更で通すための互換規定であったため適用しない)。モード判定を暗黙のdefaultに委ねない。knowledge_schema_version(0014)は引き上げない。schema_versionは残すが、全種別で1に固定し今後も上げない。これは過去を読むための互換機構ではなく、将来別種のレコードを追加したときに種類を取り違えないための前方向の契約だからである。0021「影響範囲」節は、retire/restore/release/reissueの縮小対象をsrc/identity/recovery.rs(742行)・src/identity/audit.rs(816行)としている。2026-09-11の実測ではこれは誤りであり、実際の対象は次の通りである。
src/identity/feature_ops.rsのReleaseError/release_id/RetireError/retire_entity/RestoreError/restore_entity/ReissuedEntity/ReissueError/reissue_entity(約524行)src/identity/event.rsのIdentityMutation::{Retired, Restored, Released, Reissued}src/identity/engine.rsのreplay時のstatus遷移とStatus::Retiredsrc/identity/migration_manifest.rsのreissue依存部src/cli.rsのIdentityCommand::{Release, Retire, Restore, Reissue}とtests/identity_cli.rsの該当テストrecovery.rsとlock.rsに現れるreleaseはIdentityLockのファイルロック解放であり、ID予約解除とは無関係である。audit.rsにはretire/restore/release/reissueの語が一度も出現しない。
0021の決定内容(何を廃止するか)は正しく、誤っているのは影響範囲の見積もりのみであるため、決定の効力は変わらない。release-and-license instructionsのADR運用方針に従い、0021本文は歴史的決定記録として書き換えず、訂正を本ADRに記録する。markharness-v2-design.md§9は現在の計画を表す生きた文書であるため、そちらは訂正する。
plan・cache indexが追加される(既存のidentity retire/restore/release/reissue・serve・execution recordに加えて)。docs/ja/cli-manual.md・docs/en/cli-manual.md)の該当節を削除する。planをExecutionBinding参照へ書き換えて残す:既存利用者の経路を保てるが、coverageと同じ問いに答えるサブコマンドが二つ並ぶ。後方互換を考えない方針(§7)の下では残す理由が無い。verify・backfillも削除して表面積を最小化する:削除自体は容易だが、どちらもv2の決定と衝突せず、動作している機能を判断の根拠なく削ることになる。必要性が否定された時点で個別に廃止する。lineage・milestoneの内部関数だけ残しCLIを廃止する:milestone initが作るmilestone.ymlはchanges computeのfail-closedゲートの入力であり、CLIを削ると人が入力を用意できなくなる。changes lineageもchanges computeの分類結果を確認する経路で、維持コストは小さい。