markharness

0040: traceability showで、選んだ1要素の内容を読めるようにする

ステータス

Accepted(2026-10-05決定)。

背景

GUIは、要求を根にした1本の木と、選んだ要素の詳細ペインで表示を構成する。木は軽いtraceabilityで作る。詳細ペインには、選んだ要素の内容を出す。

traceabilityの各Nodeは、識別子とlabelしか持たない。軸・説明文・procedures・Scenarioのphases・生成されたTestCaseの手順は、どの読み取り出力にも含まれない。一方、設計書§11は、viewがKnowledgeや.markharness/を直接読まず、CLIの出力だけを入力とすると定めている。そのためGUIは、詳細ペインの内容を取る手段を持たない(Issue #95)。

設計書§12は、TestCaseの詳細表示専用モデルを「viewで具体的な必要性が確認されてから追加する」ものとし、「生成ファイルを直接読めば当面は代替できる」と書いていた。詳細ペインという具体的な必要が出たので、この記述を見直す必要がある。また、直接読む代替案は、view側が.markharness/を直接読まないという境界と矛盾する。

決定

1. 新コマンドtraceability showを追加する

markharness traceability show --uid <UID> [--at <git-ref>] [-d, --dir <path>]

選んだ1要素の内容を、標準出力へJSONで1件だけ返す。traceabilityは軽いままにし、内容は詳細だけが持つ。--atの意味はtraceabilityと同じで、省略時は作業ツリー、指定時はそのGit refを読む(0033)。木と詳細で読む時点がずれると、GUIの表示が食い違うためである。

traceabilityに引数なしで--atなどを渡す従来の使い方は変えない。showはそのサブコマンドとして置く。

2. 要素ごとの項目

要素 項目
Requirement requirement_id、axis、description
Feature feature_id、axis、description
Behavior behavior_id、axis、description、procedures
Scenario scenario_id、description、phases(各stepsのactionとuse、results)、implementation_note
TestCase case_id、case_revision、phases(use:を展開した、実際に実行される手順)

全要素にschema_version・record_kind・at・kind・uidを付ける。

3. TestCaseはcase_uidで引き、現在の版を返す

TestCaseのuidは、traceabilityのtest_cases[].case_uidである。case_revisionは指定させない。GUIが木に使った--atと同じ値を渡せば、木と一致する版が返る。

4. 存在しないuidは失敗にする

--uidが、その時点のどの要素にも一致しない場合は、終了コード2で終了し、標準出力には何も出さない。エラー文には、uidと読んだ時点(working-treeまたはGit ref)を含める。GUIは、失敗したら木を再取得すればよい。

5. schema_versionは1とする

0039に従い、0.xの間は上げない。

6. 範囲

次の項目は、表示に使わないので、いまは含めない。編集の範囲が決まってから、必要なら別に決める。

設計書§12の「TestCaseの詳細表示専用モデル」は、この決定で追加済みの扱いにする。

理由

検討した代替案

帰結