Skip to content
frontmatter
キー値
specdojo.idspecdojo:pjr-rulebook
specdojo.typerulebook
specdojo.deliverable_typeproject
specdojo.statusready
specdojo.target_formatmarkdown
specdojo.recipenot-needed
specdojo.samplenot-needed
specdojo.templatenot-needed
specdojo.based_onspecdojo:rulebook-authoring-standard
specdojo.supersedespjr-index-rulebook

プロジェクト登録簿 作成ルール ​

Project Register Documentation Rules

本ドキュメントは、プロジェクト登録簿の個別登録項目(pjr-XXXX-<topic>.md)、項目別イベントログ、そこから生成する一覧・派生ビューの記述ルールです。現在値の正本は個票の Frontmatter、監査履歴の正本は項目別イベントログとし、一覧は表示専用の生成物として扱います。

1. 全体方針 ​

  • epic、TODO、要確認事項、リスク、課題、変更要求、決定事項、備忘の全登録項目は、それぞれ 1 件の個票を持つ。
  • 個票 Frontmatter の現在値は、分類、処理状態、優先度、担当、日付、結論、起票元の唯一の正本である。
  • events/pjr-XXXX.yaml は、起票・状態遷移・更新を追う監査履歴の正本である。現在値の再計算には使わず、個票の現在値との整合を検証する。
  • 個票の H1 と本文は、それぞれタイトルと説明・根拠・経緯・対応内容の正本である。
  • generated/pjr-index.md とすべての派生ビューは個票から register build で生成し、直接編集しない。
  • <project-id>:pjr-index は generated/pjr-index.md の文書 ID とする。controls/**/generated/ はdoc-indexの限定走査対象とし、register build の後に index build を実行する。
  • 一覧と個票で同じ構造化フィールドを保持・同期する規則は設けない。
  • type 別テンプレートの選択と初期生成は register add が担うため、本 rulebook は単一の template を参照しない。

2. ファイル命名・ID規則 ​

2.1. ID規約 ​

  • 個別登録項目の表示 ID は PJR-XXXX 形式とする。XXXX には数字と英字から I / L / O / U を除いた4文字を使う。例: PJR-AB12。
  • 個別登録項目の文書 ID は <project-id>:pjr-XXXX-<topic> 形式とする。例: prj-0001:pjr-ab12-auth-boundary。
  • 個別登録項目のファイル名は pjr-XXXX-<topic>.md 形式とし、文書 ID のローカル部分と拡張子を除くファイル名を一致させる。
  • 文書 ID とファイル名では XXXX を小文字にする。
  • <topic> は英小文字または数字で始まり、英小文字・数字・単一ハイフンだけで構成し、 ハイフンで終えたり連続ハイフンを含めたりしない。対象領域や論点が分かる短い名称にする。
  • イベントファイル名は pjr-XXXX.yaml とし、topic を含めない。ID の小文字表記を用いる。

2.2. 配置規約 ​

  • 個票は docs/ja/projects/<project-id>/controls/project-register/ 直下に置く。
  • 項目別イベントログは同ディレクトリの events/ 配下に置き、個票 1 件につき 1 ファイルとする。
  • 登録項目一覧は docs/ja/projects/<project-id>/controls/project-register/generated/pjr-index.md に生成する。
  • 状態別・優先度別・担当者別の補助一覧と、元の項目から派生先を辿る一覧は同じ generated/ 配下に生成する。
  • controls 全体の type 別管理ビューは controls/generated/ に生成する。生成物の別名コピーは作らない。

3. 推奨 Frontmatter 項目 ​

個票には register-item-frontmatter.schema.yaml が定義する次の項目を置く。未定の担当、期限、完了日時、結論は表用のプレースホルダを保存せず、該当キーを省略する(期限なしだけは due_on: null)。

項目説明必須
id<project-id>:pjr-XXXX-<topic>○
typeproject○
status文書成熟度。draft / ready / deprecated○
rulebookspecdojo:pjr-rulebook○
part_of<project-id>:pjr-index を要素に持つ配列○
item_type登録項目の分類○
trackepic が担う track。ほかの type では指定しないepic で必須
item_status登録項目の処理状態○
priority対応優先度○
difficultyagent 振り分け用の作業難易度任意
owner主担当者または役割任意
registered_at起票日時任意
due_on対応期限または判断期限任意
completed_at完了・却下・決定日時条件
block_reasonwaiting へ遷移した直近の理由任意
conclusion終端時の結論要約任意
derived_from起票の元になった登録項目 ID の配列任意
depends_on実行前に完了しているべき先行の登録項目 ID の配列任意
approach対象を作成・修正するときの進め方任意
target_pathカタログなしで作成する成果物のリポジトリ相対パス任意
target_rulebook対象成果物の rulebook ID任意
targets変更対象文書の doc id リスト任意
  • epic は track ごとの大きな仕事を表し、自身は実行しない。track は英小文字・数字・ハイフンの識別子とし、先頭は英小文字または数字にする。tml-index.yaml がある場合、定義済みの track を指定する。ない場合も識別子を保持できる。
  • register add --type epic --track <track> で起票し、register update --track <track> で変更する。epic の track は削除できない。変更はイベントに残す。
  • status は文書成熟度、item_status は処理状態であり、同じ状態軸として扱わない。
  • item_type、item_status、priority、difficulty の値は schema の enum だけを使用する。difficulty は hard / medium / easy のいずれかとし、省略時は従来の agent 自動選択を使う。
  • block_reason は waiting 中の直近の待機・失敗理由、conclusion は終端時の結論として用途を分ける。register wait --reason は前者だけを更新し、waiting 以外へ遷移すると現在値から削除する。削除前の理由は項目別イベントログの変更前の値に残す。
  • Frontmatter の構造化フィールドを本文や生成一覧へ手作業で複製しない。
  • derived_from は同じ project の元項目を PJR-XXXX、別 project の元項目を <project-id>:PJR-XXXX で記録する。自己参照や存在しない項目は使用しない。未設定の project は拒否する。別 project の存在確認は、その project のローカル統合ブランチを正とする。
  • depends_on は実行順序、derived_from は起票の由来を表す。両者を相互に推測・転記しない。参照書式と別 project の存在確認は derived_from と同じ規則を使い、存在しない ID、自己参照、project をまたぐ循環を記帳前と register build で拒否する。
  • register add / update の --depends-on <ID> は反復指定でき、一覧を置換する。--depends-on - は依存を削除し、ほかの ID と併用しない。変更は event に記録する。
  • すべての先行項目が done / decided のときだけ実行を許可する。rejected / deferred は依存を満たさない。直接の exec run --register は未完了の先行 ID と状態を示して停止し、routine の sweep(--register-filter)と夜間 queue は理由を記録して対象を飛ばす。依存を理由に状態を自動で waiting へ変更しない。

3.1. 日時と日付の使い分け ​

  • 起票と終端は瞬間として記録し、registered_at / completed_at に UTC の RFC 3339・秒精度(YYYY-MM-DDTHH:MM:SSZ)で保存する。
  • 期限は瞬間ではなくプロジェクトタイムゾーン上の暦日であるため、due_on は YYYY-MM-DD のまま保持する。
  • 一覧・派生ビューの「登録日」「完了日」は、保存した日時をプロジェクトの登録日タイムゾーンへ変換して導出する表示値であり、個票へ日付として重複保存しない。
  • 日時は register コマンドが記録する。手書きで日時を入力する場合も、タイムゾーンを含む値から UTC へ変換した値だけを保存する。

3.2. Register event と責務境界 ​

  • 個票の現在値は item_status などの Frontmatter フィールド、変更履歴は events/pjr-XXXX.yaml、保存・配布・差分レビューは Git が担う。Git コミットはイベントの発生単位ではなく、履歴再構成の正本にしない。
  • イベントファイルのルートは YAML 配列とし、イベントを古い順に追記する。項目ごとの配置により、イベントごとの追加ファイルを作らず、異なる項目を並行更新したときの共有ログ競合を避ける。
  • 各イベントは version、イベント ID、UTC 発生日時、action、actor、遷移前後の item_status、reason、変更フィールド、直前イベント ID を保持する。Git から移行したイベントだけは移行元 commit も保持できる。
  • action は add / start / wait / review / close / reject / defer / reopen / update / renumber / migrate のいずれかとする。詳細な型と enum は register-events.schema.yaml を正本とする。
  • register build は個票とイベントファイルの 1 対 1 対応、イベント ID の一意性、時刻順、直前イベント参照、遷移前後状態の連鎖、最新イベントの状態と個票の item_status の一致を検証する。不正なイベントを無視して一覧を生成しない。

4. 本文構成(標準テンプレ) ​

4.1. 個別登録項目 ​

順序内容必須説明
1type 固有の記録○対象、背景、評価、対応・判断、結果など
末尾関連ドキュメント○根拠、影響先、追跡先を文書 ID で示す
  • H1 は PJR-XXXX <タイトル> 形式とする。
  • 実行対象の todo・issue・change-request・question・risk の個票は、対話で得た前提・制約・委任範囲を箇条書きで残す 入力 節を持つ。入力がない場合は - とする。完了条件・回答の確定条件とは分ける。既存個票に節がなくても読み込め、初回の入力更新時に節を追加する。
  • epic は概要、範囲(track と domain)、完了の判断の基準、子項目、対応結果、関連ドキュメントを持つ。範囲には domain と境界、完了の基準には子項目と schedule を確認する判断条件、対応結果には人が完了を判断した根拠を記録する。
  • 子 todo は --from <epic-id> で起票する。derived_from を逆引きした epic 別ビューは直接の子を type と状態付きで表示し、子がない epic も表示する。別 project の子は project 修飾 ID で識別する。孫を再帰的に含めず、状態の自動集約や自動 close は行わない。
  • type 固有の構成は todo の概要・完了条件・作業内容・対応結果など、各 type 用テンプレートに従う。
  • ID、分類、処理状態、優先度、担当、期限、完了日時は本文へ重複記載せず、Frontmatter を参照する。
  • 終端前に未確定の結果・結論がある場合は、- または共通ラベルを用い、確定済みの記述と混在させない。

4.2. 生成一覧と派生ビュー ​

生成物内容編集可否
generated/pjr-index.mddepends_on を含む全個票の一覧不可
generated/pjr-views-by-status.md状態別の補助一覧不可
generated/pjr-views-by-priority.md優先度別の補助一覧不可
generated/pjr-views-by-owner.md担当者別の補助一覧不可
generated/pjr-derived-items.md元項目と派生先の一覧不可
generated/pjr-epic-items.mdepic ごとの直接の子項目と状態不可
generated/pjr-dependent-items.md先行項目から後続項目を逆引きする一覧不可
controls/generated/pm-*.mdtype 別の管理ビュー不可
  • 一覧の標準列は ID、ステータス、タイトル、説明、分類、優先度、担当、登録日、期限、完了日、結論、個票、depends_on とする。
  • タイトルは個票の H1、説明は個票本文、その他の列は個票 Frontmatter から生成する。
  • 登録日と完了日の列は、registered_at / completed_at をプロジェクトの登録日タイムゾーンへ変換した暦日として生成する。
  • 生成ビューに独自の詳細情報や手作業の修正を追加しない。修正は個票に行い、register build を再実行する。

5. 記述ガイド ​

5.1. 個票の記述 ​

  • 背景には、登録が必要になった事実、制約、判断または対応の期限を記載する。

  • 評価や選択肢には、比較可能な観点と根拠を記載し、結論だけを先に固定しない。

  • 対応・判断内容には、実施または採択した範囲と、明示的に対象外とした範囲を記載する。

  • 結果・結論には、完了を判定した根拠と後続対応を記載する。

  • 関連ドキュメントには、判断根拠、変更対象、影響先、追跡先のうち該当する文書を記載する。

  • 実行中に問題や後続作業を見つけて別の登録項目を起票するときは、起票元を derived_from に必ず記録する。decision から todo を起票する場合も同じ関係を使い、decision 本文へ追跡先を重複記載しない。既存本文の追跡先は移行のために書き換えない。

  • 本項目の実施において確実に変更する対象文書が分かっている場合は、その文書 ID を Frontmatter の targets 配列へ宣言する。宣言した targets は agent 実行時の変更網羅検証(target coverage)に用いられる。未知の場合や対象を固定しない場合は宣言を省略する。

  • approach を宣言する場合、targets は 1 件だけ必須とする。成果物の対象はカタログを優先して解決する。cross-deliverable-dedup はカタログを必須とする。それ以外の成果物の approach(fully-guided・recipe-guided・freeform・bootstrap・retrofit・finalize・bootstrap-finalize)は、カタログなしでも既存文書の索引と specdojo.rulebook、または個票の target_path と target_rulebook から解決できる。新規文書は両フィールドを必須とし、リポジトリ外のパスや別文書との衝突、既存文書と指定の不一致は認めない。カタログ設定済みで対象が未登録の場合も両フィールドがある場合だけ同じ解決を使う。rulebook-maintenance・recipe-maintenance・sample-maintenance・template-maintenance の対象は、名前に対応する種別の kata の doc id とし、文書索引で解決する。対応する正本で解決できない ID や、approach と種別が合わない対象は使用しない。

  • カタログなしの完了基準は個票の完了条件と rulebook とする。recipe・sample・template は rulebook frontmatter から辿り、not-needed のものを対象に含めない。fully-guided の必要な一式、recipe-guided の recipe が不足する場合は起票・更新を拒否する。

  • カタログなしの bootstrap は target_path、新しい target_rulebook、設定の kata_authority を必須とする。既存 rulebook を再利用しない。rulebook の名前部分から recipe・sample・template の ID を導出し、docs/ja/specdojo/<kind>s/<kata_authority>/ に配置する候補を plan へ示す。成果物には新しい specdojo.rulebook を記録する。

  • finalize・bootstrap-finalize は既存成果物だけを対象にし、カタログなしでは個票の完了条件を確認チェック表にする。後者は成果物と frontmatter から辿る kata 一式を確定対象とする。

  • 対話で得た前提は register add --input <text> で個票本文の 入力 へ記録する。繰り返し指定した順に箇条書きとし、register update --input は指定した一覧で置換する。追記する場合は既存分を含めて渡し、--input - 単独で全削除する。未指定時は保持する。空文字、削除指定と他の入力の混在、add での削除指定は拒否する。

  • 入力の変更は event の input フィールドへ変更前後の JSON 配列として記録し、値がない場合は - とする。register 経由の plan は approach の有無を問わず、入力がある場合だけ「個票の入力(前提)」に展開する。入力を完了条件へ転記しない。

5.2. 構造化フィールドと生成 ​

  • 新しい項目は register add で作成し、個票の Frontmatter に初期値を書き込む。全 type で個票を省略しない。
  • 担当・期限・結論・topic・derived_from・approach・targets などを変更するときは register update、処理状態を変えるときは状態遷移コマンドを使用する。register add と register update では、起票元に繰り返し指定できる --from、進め方に --approach、対象に繰り返し指定できる --target、成果物の配置と rulebook に --target-path と --target-rulebook を使う。配置と rulebook の明示指定もそれぞれ - で削除できる。起票元、approach、対象を削除するときは、それぞれ --from -、--approach -、--target - を指定する。待機理由は register wait --reason で記録し、誤った現在値を手動補正するときは register update --block-reason - で削除する。
  • register build は個票を読み取り、一覧・派生ビューを再生成する。generated/pjr-derived-items.md では derived_from を逆引きし、元の項目から派生先を辿れるようにする。一覧を編集して個票へ反映する経路はない。
  • register add、状態遷移、register update、register renumber は現在値を個票へ、イベントを対応する項目別ログへ記録する。--by で actor、--reason で理由を明示でき、省略時は予約 actor の SpecDojo を記録する。
  • --by に指定できるのは、project の pm-members.yaml にある人の nickname、repository の .specdojo/agent-members.yaml にある agent の nickname または alias、予約 actor の SpecDojo・specdojo-orchestrator・night-orchestrator に限る。agent の alias は実体の nickname に解決して記録し、名簿にも予約一覧にもない値は書き込み前に拒否する。
  • 決定・承認を記録する actor には、PO などの Role code や予約 actor ではなく、決定・承認した人の nickname を使う。specdojo-orchestrator は対話型オーケストレーター自身の操作だけに使い、人の判断主体を代替しない。
  • 同じ現在値へ同じ操作を再実行した場合は、新しいイベントを追加しない。イベント ID と直前イベント参照を保ったまま再実行し、既存イベントの置換や削除で重複を解消しない。
  • ID の変更は register renumber で行い、個票のファイル名・Frontmatter・参照と生成ビューを整合させる。
  • 主題の変化に伴う <topic> の変更は register update --topic で行う。個票のファイル名と Frontmatter の文書 ID、他文書中の旧文書 ID 参照を同時に更新し、生成ビューを再生成する。

5.3. 登録項目の item_status 遷移基準 ​

5.3.1. item_type 別の item_status 終端基準 ​

item_status の通常終端は、登録した目的を達成したときに使用する。type ごとの通常終端と判定基準は次のとおりとする。

item_type通常終端遷移条件conclusion に残す内容
epicdone子項目と schedule を材料に、track の完了基準を満たすと人が判断した判断の根拠と残課題
tododone個票に記載した完了条件をすべて満たした実施内容と完了を確認した根拠
questiondecided問いへの回答を確認し、後続作業の要否を判断できる確定した回答
decisiondecided選択肢、採択理由、影響を記録し、必要な承認を得た決定内容
noteなし終端させず、open のまま新しい事実・知見を追記する終端しないため使用しない
riskdoneリスクが顕在化しないまま消滅した、または対応を終えて追跡が不要になった消滅・対応完了の根拠
issuedone問題を解消し、必要な確認を終えた解決内容と確認結果
change-requestdone採択した変更を対象へ反映し、必要な確認を終えた反映内容と確認結果
  • question / decision の通常終端に done を使わず、回答・決定が確定したことを示す decided を使う。
  • epic / todo / risk / issue / change-request の通常終端に decided を使わず、対応または追跡が完了したことを示す done を使う。
  • epic は todo と同じ処理状態と例外終端(rejected / deferred)を使用する。exec run --register の実行対象にはせず、filter と夜間 queue も飛ばす。具体的な作業は子 todo で実行する。
  • note の open は未対応を意味しない。内容を継続して更新できる、生きている記録であることを示す。
  • note から対応・回答・判断が必要になった場合は、todo / question / decision など目的に合う別項目を起票し、note 自体は open のまま参照元として保持する。
  • note の内容が陳腐化または置換された場合は、その事実と参照先を本文へ追記する。done / decided / rejected / deferred へ遷移させて閉じない。

5.3.2. 例外的な追跡終了 ​

note 以外では、通常終端に達していなくても、次の条件で追跡を終了できる。

item_status使用条件記録要件
rejected対応・回答・判断の対象外、前提不成立、または変更を採択しないことが確定した採択しない理由と、必要なら代替の追跡先を記録する
deferred現時点の追跡を停止し、再開条件または再評価時期を定めた再開条件または再評価時期を記録する
  • rejected は完了・決定の代用にせず、実施または採択しない判断が確定した場合だけ使う。
  • deferred は状態遷移上の終端だが、完了を意味せず completed_at を持たない。再開するときは register reopen を使う。
  • question / decision で回答または決定を得た場合は rejected ではなく decided を使う。問い・判断自体が不要になった場合だけ rejected を使う。
  • risk を受容して監視を終える場合は、受容判断と残存影響を conclusion に記録したうえで done とする。リスクの前提が誤りだった場合は rejected とする。

5.3.3. 中間状態を経ない終端 ​

終端への遷移は、in-progress / waiting / review を経ていることを前提としない。open から直接終端させてよい。

  • 人または対話型 orchestrator が対応した項目では、着手を記録する前に完了することがある。形式を揃えるために start を遡って記録すると、実際には行われていない時点の遷移がイベントログに残る。事実と異なる記録を避けるため、直接の終端を許す。
  • agent が exec run で実行する項目は runner が start を記録するため、この経路では中間状態が必ず残る。
  • 中間状態を経ない場合は、誰がどの経路で対応したかを終端イベントの reason へ記録する。exec の plan / result / evidence が存在しないため、実施内容と検証結果は個票の対応結果へ残す。
  • 実行していない主体を actor とする遷移を、記録の体裁を整える目的で追加しない。

5.4. 個票 status の遷移基準 ​

status意味遷移させる時点
draft作成直後。type 固有の必須節が未確定register add で個票を生成した時点
readytype 固有の必須節が固まり _TODO_ が残っていないregister close 時に必須節を満たすと判定した時点
deprecated却下・破棄され成熟度を追う必要がないregister reject 時点
  • 遷移は register コマンドが担い、個票 Frontmatter を直接手書きで書き換えない。
  • ready への昇格には、type 固有の必須節に _TODO_ が残っていないことを要する。
  • reopen は過去の結果を消さず、再開理由と新しい対応状況を個票本文へ追記する。

6. 禁止事項 ​

  • 生成された pjr-index.md、補助一覧、controls 全体の派生ビューを直接編集しない。
  • 一覧と個票の同期、一覧から個票への書き戻し、または個票を作るかどうかの分離基準を設けない。
  • 構造化フィールドを個票本文や別の正本へ重複管理しない。
  • type / item_status / priority に schema 未定義の値を使用しない。
  • registered_at / completed_at に、UTC 以外のオフセットやタイムゾーンを伴わない値、暦日だけの値を保存しない。
  • 個票の文書 ID から <topic> を省略したり、ファイル名と異なるローカル ID を使用したりしない。
  • type 固有の必須内容を、見出しだけ残した空欄のまま終端状態にしない。
  • 実行していない主体を actor とする状態遷移を、記録の体裁を揃える目的で追加しない。
  • events/pjr-XXXX.yaml を手書きで追加・修正・並べ替え・削除しない。履歴補正が必要な場合も register コマンドを使い、監査イベントを破壊しない。