Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1875b032b7 |
+2
-52
@@ -4,7 +4,7 @@
|
||||
|
||||
## 変更範囲
|
||||
|
||||
Repair 1開始点e0420d57a381a1644357f0590536e1d47c9bca9fから、このディレクトリの指定5ファイルのみを変更した。原本、原子要件、work packages、decisions、TASK_SPEC、選定記録、frozen pins、ゲーム入力、marker registryは変更していない。git書込み、他worker起動、Runner操作、ゲーム起動は行っていない。素材追加なし。
|
||||
修復開始点e0420d57a381a1644357f0590536e1d47c9bca9fから、このディレクトリの指定5ファイルのみを変更した。原本、原子要件、work packages、decisions、TASK_SPEC、選定記録、frozen pins、ゲーム入力、marker registryは変更していない。git書込み、他worker起動、Runner操作、ゲーム起動は行っていない。素材追加なし。
|
||||
|
||||
## 要件と検査の対応
|
||||
|
||||
@@ -35,7 +35,7 @@ Repair 1開始点e0420d57a381a1644357f0590536e1d47c9bca9fから、このディ
|
||||
- LOW 中断参照: 全21セルのinterruption_cancellationに原本148・153行の本文とbaseline hash、および343–355行のconfirm_route_lockをlegacy_not_originalとして追加。人物固有欠損と担当は維持。
|
||||
- LOW ハッシュ表示: 263a01b943d8056727335fb76977c010298e1c229077f8da76e48683ba2e89bb は TASK_SPEC.json file-bytes SHA-256。3af3d9b931edc5449796662ad69bb6f67c80b48827a86565b1952931db68dd15 は Runner git-show stripped-UTF-8 contract spec_sha256。上記SPEC_HASH_REPRESENTATIONS.jsonのunchanged_file=trueが証拠であり、両者は同じ無変更ファイルを表す。checker定数と出力にも区別を反映。Git blob OIDは別のgit_blob_oidフィールドでありfile-bytes SHA-256とは区別する。
|
||||
|
||||
## Repair 1の実行記録(過去のローカル確認)
|
||||
## 実行記録(今回のローカル確認)
|
||||
|
||||
以下は正式Runner実行ではない。記録済み修復指示に基づき3登録コマンドをローカル実行した。
|
||||
|
||||
@@ -73,53 +73,3 @@ python3 -B /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachab
|
||||
- D05、D08はpending。未知の閾値・率・初期値もpendingのまま。P04の既存D05選択、P13の4件の制作followupも未解決。
|
||||
- この文書単位のnative GUI/Windows実行は適用外。global same-Windows、held gestures、全ゲーム受入はopen。固定入力一致から既存native証拠の正式再利用承認を推定していない。
|
||||
- Runnerの3 validator、原本§6–7と元受入に対する実装者から独立したwhole-unit Opus review、その後の通常prepare-integration/finalが必要。どの完了数・元台帳も変更していない。
|
||||
|
||||
|
||||
## Repair 2: BASE定義projectionと台帳更新の分離
|
||||
|
||||
開始点Sは806de25068bc423136063791afcea811d251ee1b。編集前にACTUAL_OPUS_REPAIR2_DIRECTION.jsonとACTUAL_FAILED_INTEGRATION.json、immutable TASK_SPECと既存チェッカーを確認。最新run指示に従い、実マージ候補の作成・検証は実装担当では行わない。指定5ファイルのみを変更する。Repair 1の4修正を保持し、任意の低3指摘は延期したまま。
|
||||
|
||||
### 実差分とallowlistの根拠
|
||||
|
||||
git showによるBASE 8ca9263とmain 6e17caeのkey-level比較を行った。candidate 1875b03のwork_packages.jsonは6e17caeと完全一致。差分は次だけ(配列index 19=P19、remaining_deliverables index 2=P19-03):
|
||||
|
||||
|JSON path|差分|
|
||||
|---|---|
|
||||
|/19/current_summary|変更|
|
||||
|/19/updated_at_jst|変更|
|
||||
|/19/remaining_deliverables/2/current_execution|TASK_SPEC.jsonからROOT_CURRENT_ACCEPTANCE_STATUS.jsonへの参照更新|
|
||||
|/19/remaining_deliverables/2/current_summary|変更|
|
||||
|/19/remaining_deliverables/2/progress_summary|変更|
|
||||
|/19/remaining_deliverables/2/remaining_gaps/0, /1|通常integration/final待ちの進捗説明へ更新|
|
||||
|/19/remaining_deliverables/2/evidence|1件から2件|
|
||||
|/19/remaining_deliverables/2/submitted_commit|806de25068bc423136063791afcea811d251ee1bを追加|
|
||||
|/19/remaining_deliverables/2/updated_at_jst|変更|
|
||||
|
||||
package allowlistはstate / legacy_state / current_summary / updated_at_jst。unit allowlistはstate / current_execution / remaining_gaps / updated_at_jst / submitted_commit / current_summary / progress_summary / evidence。state系は通常進捗遷移として明示的に許可し、同じ実registerに既存のキーだけを採用した。通常finalの完了時刻・source-ref用に、BASEの他unitで既に使われるcompleted_at_jst(P13-03)、implementation_commit(P13-03)、integrated_commit(P13-02)、integration_commit(P13-03)、normal_integration_candidate(P04-01)だけをunit階層で追加許可した。キーのprefixや任意のtimestamp/source_refキーは許可しない。allowlistの値は進捗メタデータとしてprojectionから全体を除外する。
|
||||
|
||||
それ以外の全キーは未知キーを含め再帰的な値・型・有無を保ち、BASE projectionと比較する。30 package / 88 unitのID・順序・件数、全title/work/acceptance、phase/parent/depends_on/requirement_ids/decisions/supplement_ids/owner_roles/state_scope等を固定する。atomic_requirements.jsonとdecisions.jsonは実main差分なしのため引き続きbyte-exact。D05/D08のstatus/answerは変更不可。selection recordもbyte-exact。
|
||||
|
||||
所有者集合・原子要件・authority_snapshotsはBASE blobのみから読む。各snapshotはanchored_base_commit、BASE blobのsha256、projected recordsを保持する。work packagesは全30/88定義を保持し、進捗を除外した。表の21セル、共通ルール・引用・status・owner・欠損・pending/null値は変更していない。Markdownには固定参照の説明だけを追加した。--writeは1回実行、--checkは読込み専用。
|
||||
|
||||
### Repair 2 ローカル実行
|
||||
|
||||
cwdとproject-rootは /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement。
|
||||
以下は正式Runner試験ではない。実際の呼出しは各scriptをdocs/plans/original-completion-2026-10-02/execution/p19-03/配下の相対パスで指定し、--project-rootには上記実絶対パスを指定した。
|
||||
|
||||
- python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --write: exit 0。
|
||||
- p19-table: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --check: exit 0。
|
||||
- p19-source-binding: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement --source-binding-only: exit 0。
|
||||
|
||||
上記3呼出しのstdoutはaudit_integrity=pass、formal_acceptance=pending_runner_and_independent_review、actual_commit=806de25068bc423136063791afcea811d251ee1b、selected_files=1368、anchor=1b07b87d3736e777932315a4bdde8b70cbf9cb23、file_equality=true、native_evidence_reuse_accepted=false。spec file-bytesとRunner contractの両hashも従来値のまま。
|
||||
|
||||
実mainおよび失敗candidateの実blobをPath.read_bytes差替えで読ませる自己試験は、生成JSONとMarkdownのbyte完全一致を検証する。実registerの書換え・一時worktree・mergeは不要。合成完了/source-ref例も同じ検査を通す。各定義フィールドの変更・削除、package/unit objectの未知キー追加、package/unit/各定義listの件数/順序変更、D05/D08承認、atomic/decisions/selectionの変更を個別subtestで拒否する。既存12テストは維持。
|
||||
|
||||
実merged-candidate確認: **Root preflight pending**。新S提出と通常validation後、Rootが最新main上の実Sについてラベル付き非正式isolated preflightで同じ3チェッカーを実行する。その後に別Opus whole-original re-review、通常prepare-integration/finalが必要。今回のローカル成功やworker exit 0は受入ではない。正式進捗14/88は維持。native GUI/Windowsは本単位に適用外、global Windowsとゲーム受入はopen。
|
||||
|
||||
自己試験の探索版2回は全recordや深い履歴データの同型フィールドまで反復走査して時間がかかったため中断(各exit 130、KeyboardInterrupt)。package/unitの異なる定義キーごとに変更・削除を検査し、ネストした定義値は全体を比較する形へ整理した。BASE blobを一度実読込して負例ループ内で再利用し、各負例ごとのgit show起動を省いた。検査対象・既存controlは削除していない。shell here-documentを用いた初回の読取り差分確認は環境の一時ファイル制約で失敗(exit 1)、python3 -cで同じ確認を実行した。
|
||||
|
||||
最終p19-negative呼出し: python3 -B docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py --project-root /Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-implement
|
||||
|
||||
exit 0、出力: Ran 16 tests in 16.285s / OK。実main/candidate正例、合成final正例、全package/unit定義フィールド負例と既存controlを含む。git diff --checkもexit 0。最終差分は指定5ファイルのみ。生成前後のJSONを比較しauthority_snapshots以外の全フィールドが一致することも静的確認した。
|
||||
|
||||
同じp19-tableコマンドを絶対scriptパスで再確認(exit 0、同じpass出力)。呼出し前後にこのディレクトリの全通常ファイルSHA-256 mapを比較し一致: Read-only byte determinism: pass。最終git diff --checkもexit 0。
|
||||
|
||||
+139
-9331
File diff suppressed because it is too large
Load Diff
@@ -688,8 +688,6 @@ missing / owner: P19-02
|
||||
- Windows: 未受入: global same-Windows acceptanceはopen。文書単位のnative GUI/Windows実行は適用外。
|
||||
- 欠損機構: defense_reduction, post_break_metric, barrier_block, coassignment_attack, zero_break, contact_after_break, threshold_route_loss, duel_types, duel_win, duel_loss, love_actions, ntr_actions, corruption_actions, history_fields, history_cycle_parentage, portrait_marks, route_skills, departure
|
||||
|
||||
Authority snapshots: anchored_base_commit=8ca9263fee1ec4374d97c01fda82b95e1df6a977; JSON retains anchored blob SHA-256 and projected definition records.
|
||||
|
||||
D05/D08、閾値・率・初期値はpending。完全な出典本文・SHA・原子要件全レコードはJSONに保持する。
|
||||
|
||||
14/88 unchanged; formal Runner validation, independent whole-unit Opus review and normal integration/final required; no game acceptance
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"purpose": "Nonformal Root diagnostic actual S+latestMain; not usual prepare-integration candidate, not owner-approved, no original credit",
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"M": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"preflight_commit": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"preflight_tree": "5fd36ac7825980524f7d14137434a7866dd114ac",
|
||||
"source": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-root-preflight-5343471e",
|
||||
"root_pid": 49701,
|
||||
"time_ns": 1792235765159907000,
|
||||
"normal_integration_or_final_satisfied": false,
|
||||
"passed": true,
|
||||
"all3_original_checks_passed": true,
|
||||
"actual_report": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/66089140e92a48b2bc96ea67ca597b58-root-preflight.json",
|
||||
"time_end_ns": 1792235786176952000,
|
||||
"new_native_runs": 0,
|
||||
"whole_original_acceptance": false,
|
||||
"task_state_unchanged": "review_pending"
|
||||
}
|
||||
+18
-81
@@ -1,28 +1,28 @@
|
||||
{
|
||||
"at_jst": "2026-10-17T20:29:39.555420+09:00",
|
||||
"at_jst": "2026-10-17T19:58:24.516684+09:00",
|
||||
"plan_id": "P19-03",
|
||||
"registered_task": "P19-03-TABLE",
|
||||
"project": "the-tree-p19-03-reachability",
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"S": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"implementation_model": "gpt-6.1-sol",
|
||||
"actual_model_decision": "c767de1cd89d40e5a23964f2e62ce4c6",
|
||||
"state": "completed_original_P19_03",
|
||||
"state": "whole_original_review_passed_integration_final_pending",
|
||||
"original_acceptance": "7名×3ルートの到達表があり、未制作内容は欠損として残る。",
|
||||
"original_units": 88,
|
||||
"formally_completed": 15,
|
||||
"new_credit": 1,
|
||||
"formally_completed": 14,
|
||||
"new_credit": 0,
|
||||
"registered_validation": {
|
||||
"passed": true,
|
||||
"artifact": "ROOT_FORMAL_VALIDATION_903A2C5.json",
|
||||
"artifact": "ROOT_FORMAL_VALIDATION_806DE25.json",
|
||||
"checks": [
|
||||
"p19-table",
|
||||
"p19-negative",
|
||||
"p19-source-binding"
|
||||
],
|
||||
"self_tests": 16
|
||||
"self_tests": 12
|
||||
},
|
||||
"actual_reviewer": {
|
||||
"id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"id": "38eaaacdb31b4c76bcf982987816a391",
|
||||
"status": "finished_pass"
|
||||
},
|
||||
"reviewer_model": "claude-opus-5-5",
|
||||
@@ -31,9 +31,12 @@
|
||||
"markers_policy_engine_roster_parse_default_player_same": true,
|
||||
"full184_21903_329parse_186ended_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"artifact": "ROOT_EXACT_GAME_INPUT_REUSE_903A2C5.json"
|
||||
"artifact": "ROOT_EXACT_GAME_INPUT_REUSE_806DE25.json"
|
||||
},
|
||||
"required_before_acceptance": [],
|
||||
"required_before_acceptance": [
|
||||
"Normal actual integrationC/M and independent candidate source/input equality",
|
||||
"Normal final and existing exact real-owner main authorization, thenledger/push; no new humanSHA speech fabricated"
|
||||
],
|
||||
"source_gaps_preserved": [
|
||||
"Six missing productioncatalog IDs are not fabricated; table audit uses existing original atomic entity keys",
|
||||
"D05/D08 and unknown values/content remain missing or pending; backend/generic labels are not natural route completion",
|
||||
@@ -43,85 +46,19 @@
|
||||
"Initial registered {worktree} invocation failed before scripts opened; exact-root adapter madeactual3sameSchecks run, repairs0/source/config/policy unchanged",
|
||||
"Initial full inline review rejected beforeinference at actual1milliontoken providerlimit; completefile/diff sourceviews retainalloriginalbytes, no file/bytecaps, sameOpus5.5/sourceS"
|
||||
],
|
||||
"normal_integration_candidate": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"repairs": 2,
|
||||
"normal_integration_candidate": null,
|
||||
"repairs": 1,
|
||||
"repair_cap": null,
|
||||
"whole_original_review": {
|
||||
"run_id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"run_id": "38eaaacdb31b4c76bcf982987816a391",
|
||||
"status": "pass",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_903A2C5.json"
|
||||
"artifact": "ROOT_WHOLE_REVIEW_806DE25.json"
|
||||
},
|
||||
"actual_repair_worker": {
|
||||
"id": "bf8a86e053044bfea0051253fefb2ec7",
|
||||
"status": "finished"
|
||||
},
|
||||
"repair_scope": "Same5Docfiles: legacy presence vsoriginalconformance for4clauses, independent source-presence/evidence-loss tests, route-ending interruption crossrefs, precise hash labels. No game/values/pins/roster changes.",
|
||||
"actual_preflight": {
|
||||
"passed": true,
|
||||
"source": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"preflight_commit": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"main": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"normal_integration_or_final_satisfied": false,
|
||||
"artifact": "ROOT_ACTUAL_NONFORMAL_MAIN_PREFLIGHT_903A2C5.json"
|
||||
},
|
||||
"previous_actual_integration_failure": {
|
||||
"commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"reason": "Checker incorrectly froze mutable workpackages metadata; now definition projection remainsfailclosed, originalfactsunchanged",
|
||||
"artifact": "ROOT_FAILED_FORMAL_INTEGRATION_806DE25.json"
|
||||
},
|
||||
"table_fact_comparison": {
|
||||
"only_changed": "authority_snapshots representation",
|
||||
"all21cells_rules_statuses_owners_gaps_unchanged": true,
|
||||
"artifact": "ROOT_TABLE_FACT_COMPARISON_806_TO_903.json"
|
||||
},
|
||||
"registered_task_state": "completed",
|
||||
"normal_main_base": "e7acd530c5d43313534d0b6ee23c915aba3cf70a",
|
||||
"source_on_main": true,
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "ROOT_NORMAL_FINAL_C8E4F1D9.json"
|
||||
},
|
||||
"whole_original_P19_03_accepted": true,
|
||||
"whole_game_accepted": false,
|
||||
"related_open_work": [
|
||||
"P18/P19-01/P19-02/P20/P26 natural gameplay, all7character-specific content and6productioncatalogIDs",
|
||||
"D05/D08 and unapproved initial/threshold/rate values remain unanswered or missing",
|
||||
"SameWindows/globalgame acceptance and heldgestures stillopen; docaudit OSexecution notapplicable"
|
||||
],
|
||||
"normal_final_pending": false,
|
||||
"closure_evidence": [
|
||||
{
|
||||
"path": "ROOT_WHOLE_REVIEW_903A2C5.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/565d4f21c12b451da2d5a7dd462d099b/result.json",
|
||||
"bytes": 5470,
|
||||
"sha256": "779e58c3d31556ea25ae3fe134dccc0335a8ab14dd675ea80f97c51768223550"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_INTEGRATION_C8E4F1D9.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/83e6d08d9ac245d6b35941ac165d3318-integration.json",
|
||||
"bytes": 854,
|
||||
"sha256": "aa6148bc06f9ab9f9ef28364d8511b6beca4a5d4a4b6d1299f7d769bb9b44f78"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_NORMAL_FINAL_C8E4F1D9.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/213aafebe6254110bf349c25b6036d92-final.json",
|
||||
"bytes": 848,
|
||||
"sha256": "4c5ec540ff0b527d37454b16cb392b14aff1ae598c445722d9625b30b91d8ea6"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"actual_original": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/traceability/P19-03-TABLE.json",
|
||||
"bytes": 5090,
|
||||
"sha256": "b433a6b52bb722fa8e9cdc2a161abbca71693f45926bb5c7bf1b00716d3d7f5a"
|
||||
},
|
||||
{
|
||||
"path": "ROOT_EXACT_C8E4F1D9_QUALIFICATION.json",
|
||||
"actual_original": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/.runtime/coordinator-start-20261017/EXACT_C8E4F1D9_P19_QUALIFICATION.json",
|
||||
"bytes": 2584,
|
||||
"sha256": "f15125c39a2cf2b42618dfbd9c9a9834f5c32c6b8f256b245de80a7b460ebcc0"
|
||||
}
|
||||
]
|
||||
"repair_scope": "Same5Docfiles: legacy presence vsoriginalconformance for4clauses, independent source-presence/evidence-loss tests, route-ending interruption crossrefs, precise hash labels. No game/values/pins/roster changes."
|
||||
}
|
||||
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"actual_review": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "test_actual_main_and_candidate_metadata names commits by abbreviated SHA (6e17cae, 1875b03). The test only works where those objects exist. That holds in the current repository, but full SHAs, or a clear explanation of the dependency, would make it more reproducible."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Three low notes from the previous review (806de25) are still deferred: (1) per-entry function-name markers for every legacy citation, (2) the label on the Repair 1 local actual_commit line, (3) aligning the snapshot_container range to function boundaries. This deferral is allowed. Item (2) is already addressed by the 「過去のローカル確認」 label."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The checker's hardcoded facts (statuses, owners) are therefore protected from tampering by self-comparison, not proven correct by the tests. I separately confirmed in the actual source and work_packages that the classifications and owners are correct."
|
||||
}
|
||||
],
|
||||
"disposition": "Optional nonblocking hardening/clarity only. All required original audit conditions passed independent semantic review and normal integration/final.",
|
||||
"preserved_reproduction_fixture": {
|
||||
"full_commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"remote_branch": "codex/p19-03-integration-fixture-1875b03",
|
||||
"fetch_if_single_branch_clone": "git fetch origin refs/heads/codex/p19-03-integration-fixture-1875b03:refs/remotes/origin/codex/p19-03-integration-fixture-1875b03",
|
||||
"other_required_commit": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"no_main_adoption_of_failed_fixture": true
|
||||
}
|
||||
}
|
||||
-51
@@ -1,51 +0,0 @@
|
||||
{
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"C": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"M": "e7acd530c5d43313534d0b6ee23c915aba3cf70a",
|
||||
"candidate_worktree": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p19-03-reachability/P19-03-TABLE-integration-69419f96",
|
||||
"all1368_game_inputs_marker_policy_engine_roster_parse_default_player_identical": true,
|
||||
"all8_reviewed_doc_artifacts_byte_identical": {
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json": {
|
||||
"bytes": 5614,
|
||||
"sha256": "c3c8d7367d67c6f8b74ae620357de631f8e4a158940c4d019f71e897900a1c29"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/FROZEN_GAME_INPUT_PINS.json": {
|
||||
"bytes": 234047,
|
||||
"sha256": "6c778226a4cc6d0b0d682500759e7d4229c926a27bd2e247b00b9c3e5f1a2fb0"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/IMPLEMENTATION_REPORT.md": {
|
||||
"bytes": 16909,
|
||||
"sha256": "07ec5fd2a50c328ac01859807913315023e4e8b550f11457fc8345b4606573b9"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/REACHABILITY_TABLE.json": {
|
||||
"bytes": 1609120,
|
||||
"sha256": "9904095c19742bac2871ea62347543cfc6169771454bc7419fccc2ac1e95779c"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/REACHABILITY_TABLE.md": {
|
||||
"bytes": 133432,
|
||||
"sha256": "afb99eede4c8b4a9aca4bf3113c88acc02998f0aec3c8f89ebd6179042b4f887"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json": {
|
||||
"bytes": 8290,
|
||||
"sha256": "263a01b943d8056727335fb76977c010298e1c229077f8da76e48683ba2e89bb"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/check_reachability_table.py": {
|
||||
"bytes": 23419,
|
||||
"sha256": "d2b78349ee95dcdd30d2aa7d1f2be41d8d82abd14bbe73f4394e3227fd1a2b43"
|
||||
},
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/test_reachability_table.py": {
|
||||
"bytes": 14770,
|
||||
"sha256": "d6cc4ceb770e9e329d0f2087a7fdf973ef8470a6f98072f2c37118f9ed8c6901"
|
||||
}
|
||||
},
|
||||
"exact_184_21903_329parse_186ended_native_evidence_reuse_qualified": true,
|
||||
"actual_independent_whole_original_review": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"normal_candidate_integration_passed": true,
|
||||
"new_native_runs": 0,
|
||||
"normal_final_pending": true,
|
||||
"original_unit_credit": 0,
|
||||
"authority": "Existing explicit human main-update+commit/push authorization; no new SHA-specific human speech is claimed",
|
||||
"time_ns": 1792236328462308000
|
||||
}
|
||||
-31
@@ -1,31 +0,0 @@
|
||||
{
|
||||
"artifact_S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"existing_product_C": "65f07bf5eaa759a8e2e17c7bdbbbdbceb24ee373",
|
||||
"old_actual_native_S": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"all1368_selected_source_settings_assets_tests_tools_byte_equal": true,
|
||||
"marker_policy_engine_roster_parse_default_player_equal": true,
|
||||
"scope": "All source_refs keys exactly equal; no file set was narrowed or omitted. New doc-only audit helpers are outside this unchanged pre-existing selection algorithm.",
|
||||
"native_full_evidence_reuse_qualified": true,
|
||||
"new_native_runs": 0,
|
||||
"existing_full": {
|
||||
"actual_suites": 184,
|
||||
"missing_marker_paths": [],
|
||||
"remaining_unexecuted_tests": [],
|
||||
"available_marker_checks": 21903,
|
||||
"actual_all_roster_checks": 21903,
|
||||
"strict_accepted_checks": 21903,
|
||||
"verified": true,
|
||||
"composed": true,
|
||||
"original_full_attempt_passed": false,
|
||||
"whole_original_acceptance": false,
|
||||
"parse_checks": 329,
|
||||
"setup_phases": 2,
|
||||
"owned_ended": 186,
|
||||
"tested_source": "a7e3069b167511b3194242b3403fbcc35244a526",
|
||||
"engines_started": 0,
|
||||
"verifier_sha256": "d00bf46bfcc0e0bb197edd284a3ae14610ca710507831e18e071a79461946e8a"
|
||||
},
|
||||
"previous_actual_whole_backend_Opus_review": "ead8e74b9683404d8cf3d97bca118726",
|
||||
"P19_whole_original_acceptance": "pending actual independent semantic review of full original §6–7, all21cells and all source/status/owner/gap claims, then normalintegration/final",
|
||||
"time_ns": 1792235874948502000
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 1,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/3dff1e2121844313a07c39c5f8d57842",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 5,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/07a0ef3637d64512b6338f4b21dbfbad",
|
||||
"passed": false
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/0d2aac5d24564ab6ab517bad0d3eca74",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": false
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/de99282b6b4049f4932747d96ae9acae",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/471595c34bc84eab924953516ee8642d",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/24589f23e8884d268bf37fb86b05ed46",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"kind": "final",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/3e87d070e02045d3b10f1ac05a864fc7",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/d73482521c484f1595cfae5b0abb0dba",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/2a9d3970f4b8415cb784a4a556729219",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
-26
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"kind": "integration",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p19-table",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/8387e3805df94f448d9eaefae379cb4c",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-negative",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/4c9f9b10eb3b497b960137c50f1053b6",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "p19-source-binding",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/bc9693db775f42c99ee06d53ee169755",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
}
|
||||
-122
@@ -1,122 +0,0 @@
|
||||
{
|
||||
"contract": {
|
||||
"id": "P19-03-TABLE",
|
||||
"title": "P19-03 分岐の到達性:原7名×3ルートの全到達表と未制作欠損監査",
|
||||
"requirement_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"spec_ref": "docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json",
|
||||
"base_commit": "8ca9263fee1ec4374d97c01fda82b95e1df6a977",
|
||||
"worker": "codex",
|
||||
"allowed_paths": [
|
||||
"docs/plans/original-completion-2026-10-02/execution/p19-03/**"
|
||||
],
|
||||
"depends_on": [],
|
||||
"resource_locks": [
|
||||
"p19-route-reachability-audit"
|
||||
],
|
||||
"validation_ids": [
|
||||
"p19-table",
|
||||
"p19-negative",
|
||||
"p19-source-binding"
|
||||
],
|
||||
"max_repair_attempts": null,
|
||||
"spec_sha256": "3af3d9b931edc5449796662ad69bb6f67c80b48827a86565b1952931db68dd15"
|
||||
},
|
||||
"implementation_commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"integration_commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"owner": "このチャットのユーザーの既存明示指示「mainの更新を明示的に許可します」「コミットすべき内容をコミットして。その上でpushして」に基づく継続許可。原P19-03の全条件レビュー合格と実C/M検証に対象を拘束し、新しいSHA指定の人間発言は主張しない。全ゲーム/他原成果の完了を意味しない。",
|
||||
"evidence": [
|
||||
{
|
||||
"id": 1,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/239449693d9a4172a4feee317c184b6d-validation.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/bf963f060c934169ae0ef366b28fcd3f-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "e0420d57a381a1644357f0590536e1d47c9bca9f",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/d4e70e7f48f549b085692962f88531a8/result.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/406baca45e5f41c294ea45d380c945fc-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/38eaaacdb31b4c76bcf982987816a391/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "integration",
|
||||
"commit_sha": "1875b032b7f6a8525fb6ccec0574e21769943c95",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/be88ab416157401d97718dc80f68fd51-integration.json",
|
||||
"passed": 0
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "validation",
|
||||
"commit_sha": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/c3ed2fa3df3145fa97a037c574b6e228-validation.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "root-preflight",
|
||||
"commit_sha": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/66089140e92a48b2bc96ea67ca597b58-root-preflight.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "review",
|
||||
"commit_sha": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/565d4f21c12b451da2d5a7dd462d099b/result.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "integration",
|
||||
"commit_sha": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/83e6d08d9ac245d6b35941ac165d3318-integration.json",
|
||||
"passed": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"task_id": "P19-03-TABLE",
|
||||
"kind": "final",
|
||||
"commit_sha": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/213aafebe6254110bf349c25b6036d92-final.json",
|
||||
"passed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
-34
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"from": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"to": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"changed_top_level_keys": [
|
||||
"authority_snapshots"
|
||||
],
|
||||
"identical_top_level_keys": [
|
||||
"task_id",
|
||||
"schema_version",
|
||||
"identity_policy",
|
||||
"source_anchor",
|
||||
"common_rules",
|
||||
"cells",
|
||||
"catalog_evidence",
|
||||
"pending",
|
||||
"route_support",
|
||||
"acceptance",
|
||||
"accounting"
|
||||
],
|
||||
"current_keys": [
|
||||
"task_id",
|
||||
"schema_version",
|
||||
"identity_policy",
|
||||
"source_anchor",
|
||||
"common_rules",
|
||||
"cells",
|
||||
"authority_snapshots",
|
||||
"catalog_evidence",
|
||||
"pending",
|
||||
"route_support",
|
||||
"acceptance",
|
||||
"accounting"
|
||||
]
|
||||
}
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"task_id": "P19-03-TABLE",
|
||||
"commit": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"status": "pass",
|
||||
"summary": "I re-reviewed the whole original P19-03 unit at 903a2c5, read-only. I did not edit or run anything.\n\n**Original acceptance (「7名×3ルートの到達表があり、未制作内容は欠損として残る。」)**\n- The acceptance text is identical to work_packages.json:9021.\n- I read BASELINE §6 (114–135) and §7 (136–161) directly. The 7 names in REACHABILITY_TABLE.md (アンリ/フィーネ/トマリ/アメリア/リズ/ミミ/サツキ) match lines 118–124 in order. Each cell cites its own character line (118…124).\n- The 21 cell IDs map to existing atomic records AR.heroine.<key>.route.{love,ntr,corruption}. I checked anri.route.love directly: B-7.1, entity key and original_name match.\n- Every cell has all 8 categories: entry events, state conditions, duel win/loss, route/selection effects, interruption/cancellation, save, history/marks, current reachability.\n- Common rules are kept separate from per-character content. All 23 common rules cite exact original line text plus the baseline hash, and the quoted text matches the BASELINE file.\n- Every per-character item is recorded as 欠損 / 原本未定義 / D08 pending, with a reason, an owner and natural_route_complete=false. The owners are P18-02, P19-01, P19-02, P20-02, P26-01 and P26-02, and they match those deliverables' titles and work in work_packages.\n- D05, D08, thresholds, rates and initial values all stay pending/null, with no invented numbers.\n\n**Checked against the actual game source**\n- data/characters/mvp_unique_characters.json contains only heroine_anri and rival_rai. None of the other six names appear anywhere under data/.\n- original_relationship_state.gd only validates and holds generic fields; it has no roster. So \"implemented\" is limited to that narrow storage, and \"partial\" to the affection/shield-max invariant, the snapshot container and the identity check.\n- There is no duel, history or pregnancy code anywhere in autoload/scripts/scenes. lust and netorare appear only in state validation, never in updates. The \"missing\" statuses are honest.\n- Legacy shield, route-lock and UI-label code is cited with blob OIDs and labelled legacy_not_original, never credited as an original route. Backend support is not called a completed natural route. Using atomic keys while leaving the six missing catalog IDs as explicit gaps is the honest choice and invents nothing.\n\n**Repair 2 (projection)**\n- PACKAGE_MUTABLE and UNIT_MUTABLE allow only progress, reference, evidence and time fields that already exist in BASE.\n- Every other field, including id/title/work/acceptance/depends_on/requirement_ids/decisions/owner_roles, is compared exactly against the BASE 8ca9263 projection. Type is preserved via json.dumps, so True does not compare equal to 1.\n- atomic_requirements.json, decisions.json and the selection record stay byte-exact against BASE.\n- test_every_register_definition_field changes or removes each distinct definition key, adds unknown keys, and alters list counts and order. D05 and D08 flipping to approved is rejected, and the real main 6e17cae and candidate 1875b03 registers are accepted as positive cases.\n- The fact comparison shows only authority_snapshots changed. I confirmed the 21 cells, common rules, statuses, owners and gaps are unchanged from the previously passed 806de25.\n\n**Scope and validation**\n- The diff touches only the 5 allowed files under execution/p19-03/.\n- All 3 registered checks ran on 903a2c5 and exited 0. p19-table binds actual_commit 903a2c5, 1368 selected files, file_equality true. p19-negative ran 16 tests, OK.\n- The Root non-formal preflight on S plus latest main (7f9b63b) also passed all 3 checks. It is not normal integration or final.\n- The earlier failed integration (1875b03) was recorded honestly and fixed without changing any original definition. No test was deleted or disabled.\n\n**Open items**\n- D08 and per-character content, P18–P20/P26 gameplay, and global Windows/game acceptance all stay open.\n- No credit before normal prepare-integration/final and the ledger update. Only then can the count move from 14/88 to 15/88.",
|
||||
"acceptance_ids": [
|
||||
"P19-03"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "test_actual_main_and_candidate_metadata names commits by abbreviated SHA (6e17cae, 1875b03). The test only works where those objects exist. That holds in the current repository, but full SHAs, or a clear explanation of the dependency, would make it more reproducible."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Three low notes from the previous review (806de25) are still deferred: (1) per-entry function-name markers for every legacy citation, (2) the label on the Repair 1 local actual_commit line, (3) aligning the snapshot_container range to function boundaries. This deferral is allowed. Item (2) is already addressed by the 「過去のローカル確認」 label."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Most data-level negative tests still compare the document against the same expected() canonical. The checker's hardcoded facts (statuses, owners) are therefore protected from tampering by self-comparison, not proven correct by the tests. I separately confirmed in the actual source and work_packages that the classifications and owners are correct."
|
||||
}
|
||||
]
|
||||
}
|
||||
+8
-50
@@ -124,50 +124,11 @@ def binding(root):
|
||||
'Runner_git_show_stripped_UTF8_contract_spec_sha256': RUNNER_CONTRACT_SPEC_SHA256}
|
||||
|
||||
|
||||
# Exact key-level BASE -> 6e17cae/1875b03 diff; no prefix/wildcard exclusions.
|
||||
PACKAGE_MUTABLE = frozenset(("state", "legacy_state", "current_summary", "updated_at_jst"))
|
||||
UNIT_MUTABLE = frozenset((
|
||||
"state", "current_execution", "remaining_gaps", "updated_at_jst",
|
||||
"submitted_commit", "current_summary", "progress_summary", "evidence",
|
||||
# Normal final/source references: these names already occur in BASE units.
|
||||
"completed_at_jst", "implementation_commit", "integrated_commit",
|
||||
"integration_commit", "normal_integration_candidate",
|
||||
))
|
||||
|
||||
|
||||
def definition_projection(register):
|
||||
require(type(register) is list, "package register must be a list")
|
||||
projected = []
|
||||
for package in register:
|
||||
require(type(package) is dict, "package must be an object")
|
||||
record = {k: v for k, v in package.items() if k not in PACKAGE_MUTABLE}
|
||||
units = record.get("remaining_deliverables")
|
||||
require(type(units) is list, "deliverables must be a list")
|
||||
require(all(type(unit) is dict for unit in units), "unit must be an object")
|
||||
record["remaining_deliverables"] = [
|
||||
{k: v for k, v in unit.items() if k not in UNIT_MUTABLE} for unit in units]
|
||||
projected.append(record)
|
||||
return projected
|
||||
|
||||
|
||||
def validate_register(root, name, current):
|
||||
anchored = blob(root, BASE, PLAN + name)
|
||||
if name == "work_packages.json":
|
||||
# JSON serialization preserves types (True must not compare equal to 1).
|
||||
encode = lambda value: json.dumps(definition_projection(decode(value)),
|
||||
ensure_ascii=False, sort_keys=True)
|
||||
require(encode(current) == encode(anchored),
|
||||
"original definition changed: " + name)
|
||||
else:
|
||||
require(current == anchored, "original register changed: " + name)
|
||||
return anchored
|
||||
|
||||
|
||||
def expected(root):
|
||||
raw = lambda p: (root / p).read_bytes()
|
||||
require(sha(raw(BASELINE)) == BASE_HASH, 'baseline changed')
|
||||
anchored = {name: validate_register(root, name, raw(PLAN + name))
|
||||
for name in ('atomic_requirements.json', 'work_packages.json', 'decisions.json')}
|
||||
for name in ('atomic_requirements.json', 'work_packages.json', 'decisions.json'):
|
||||
require(raw(PLAN + name) == blob(root, BASE, PLAN + name), 'original register changed: ' + name)
|
||||
require(raw(OUT + 'ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json') ==
|
||||
blob(root, BASE, OUT + 'ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json'), 'selection record changed')
|
||||
lines = raw(BASELINE).decode().splitlines()
|
||||
@@ -222,9 +183,9 @@ def expected(root):
|
||||
['git','rev-parse',ANCHOR+':'+path],cwd=root).decode().strip()
|
||||
rule['legacy_evidence'].append(entry)
|
||||
# Read complete selected atomic records, not only their condition strings.
|
||||
atoms = decode(anchored['atomic_requirements.json'])['requirements']
|
||||
atoms = decode(raw(PLAN + 'atomic_requirements.json'))['requirements']
|
||||
atoms = [x for x in atoms if set(x.get('source_group_ids', [])) & {'B-7.' + str(i) for i in range(1, 7)}]
|
||||
owners = {x['id'] for p in decode(anchored['work_packages.json']) for x in p.get('remaining_deliverables', [])}
|
||||
owners = {x['id'] for p in decode(raw(PLAN + 'work_packages.json')) for x in p.get('remaining_deliverables', [])}
|
||||
require(all(r['owner'] in owners for r in rules), 'unknown original owner')
|
||||
for key, name in PEOPLE:
|
||||
for route in ROUTES:
|
||||
@@ -265,11 +226,10 @@ def expected(root):
|
||||
return {'task_id': 'P19-03-TABLE', 'schema_version': 1,
|
||||
'identity_policy': '原本§6の名前とatomic entity.keyを監査IDに使用。実装IDを捏造しない。カタログにはheroine_anriのみ。OriginalRelationshipStateはsubject_idを保持し7名の列挙はしない。',
|
||||
'source_anchor': ANCHOR, 'common_rules': rules, 'cells': cells,
|
||||
'authority_snapshots': {PLAN + name: {
|
||||
'sha256': sha(data), 'anchored_base_commit': BASE,
|
||||
'records': definition_projection(decode(data)) if name == 'work_packages.json'
|
||||
else decode(data) if name == 'decisions.json' else atoms}
|
||||
for name, data in anchored.items()},
|
||||
'authority_snapshots': {p: {'sha256': sha(raw(p)), 'base_commit': BASE,
|
||||
'records': decode(raw(p)) if p.endswith('decisions.json') else atoms if p.endswith('atomic_requirements.json')
|
||||
else [x for x in decode(raw(p)) if x['id'] in ('P18', 'P19', 'P20', 'P26')]}
|
||||
for p in (PLAN + 'atomic_requirements.json', PLAN + 'work_packages.json', PLAN + 'decisions.json')},
|
||||
'catalog_evidence': evidence(CATALOG, 1, 32),
|
||||
'pending': {'D05': 'pending', 'D08': 'pending', 'thresholds': None, 'rates': None, 'initial_values': None},
|
||||
'route_support': {r: {'UI': '欠損: 原本行動・3種決闘・原本3軸/盾の通常操作なし。既存汎用関係UIを原本ルートとしない。',
|
||||
@@ -329,8 +289,6 @@ def markdown(d):
|
||||
lines += ['### ' + route, '']
|
||||
lines += ['- ' + k + ': ' + v for k, v in support.items() if isinstance(v, str)]
|
||||
lines += ['- 欠損機構: ' + ', '.join(support['missing_mechanisms']), '']
|
||||
lines += ['Authority snapshots: anchored_base_commit=' + BASE +
|
||||
'; JSON retains anchored blob SHA-256 and projected definition records.', '']
|
||||
lines += ['D05/D08、閾値・率・初期値はpending。完全な出典本文・SHA・原子要件全レコードはJSONに保持する。', '', d['accounting'], '']
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
-117
@@ -21,123 +21,6 @@ class AuditTests(unittest.TestCase):
|
||||
with self.assertRaises(ValueError):
|
||||
audit.verify(changed, self.canonical)
|
||||
|
||||
def register_output(self, data):
|
||||
original = Path.read_bytes
|
||||
def read(path):
|
||||
return data if path == ROOT / audit.PLAN / "work_packages.json" else original(path)
|
||||
with patch.object(Path, "read_bytes", read):
|
||||
document = audit.expected(ROOT)
|
||||
import json
|
||||
self.assertEqual(json.dumps(document, ensure_ascii=False, indent=2) + "\n",
|
||||
(ROOT / audit.OUT / "REACHABILITY_TABLE.json").read_text())
|
||||
self.assertEqual(audit.markdown(document).encode(),
|
||||
(ROOT / audit.OUT / "REACHABILITY_TABLE.md").read_bytes())
|
||||
|
||||
def test_actual_main_and_candidate_metadata(self):
|
||||
for commit in ("6e17cae", "1875b03"):
|
||||
with self.subTest(commit=commit):
|
||||
self.register_output(audit.blob(ROOT, commit, audit.PLAN + "work_packages.json"))
|
||||
|
||||
def test_final_ledger_metadata(self):
|
||||
import json
|
||||
register = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json"))
|
||||
package = next(p for p in register if p["id"] == "P19")
|
||||
unit = next(u for u in package["remaining_deliverables"] if u["id"] == "P19-03")
|
||||
package.update(state="completed", legacy_state="completed",
|
||||
current_summary="ledger completion", updated_at_jst="2026-10-17")
|
||||
unit.update({key: "synthetic final reference" for key in audit.UNIT_MUTABLE})
|
||||
unit["evidence"] = [{"path": "docs/final.json", "sha256_at_integration": "0" * 64}]
|
||||
unit["remaining_gaps"] = []
|
||||
self.register_output(json.dumps(register).encode())
|
||||
|
||||
def test_every_register_definition_field(self):
|
||||
import json
|
||||
base = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json"))
|
||||
# Independently mutate/remove every package and unit definition field.
|
||||
# Compare full nested values; unknown additions fail at both record levels.
|
||||
def visit(value, path=(), level="packages"):
|
||||
if isinstance(value, list):
|
||||
yield path, "count"
|
||||
if len(value) > 1:
|
||||
yield path, "order"
|
||||
for i, child in enumerate(value):
|
||||
yield from visit(child, path + (i,),
|
||||
"package" if not path else "unit" if path[-1] == "remaining_deliverables" else "nested")
|
||||
elif isinstance(value, dict):
|
||||
yield path, "unknown"
|
||||
excluded = audit.PACKAGE_MUTABLE if level == "package" else audit.UNIT_MUTABLE if level == "unit" else ()
|
||||
for key, child in value.items():
|
||||
if key in excluded:
|
||||
continue
|
||||
yield path + (key,), "change"
|
||||
yield path + (key,), "remove"
|
||||
if key == "remaining_deliverables":
|
||||
yield from visit(child, path + (key,), "units")
|
||||
elif isinstance(child, list):
|
||||
yield path + (key,), "count"
|
||||
if len(child) > 1 and child[0] != child[1]:
|
||||
yield path + (key,), "order"
|
||||
|
||||
seen = set()
|
||||
anchored = audit.blob(ROOT, audit.BASE, audit.PLAN + "work_packages.json")
|
||||
for path, operation in visit(base):
|
||||
# Each distinct definition key/structural path once; repeated records
|
||||
# use the same schema, so do not pad by testing it 30/88 times.
|
||||
shape = tuple("*" if type(part) is int else part for part in path)
|
||||
if (shape, operation) in seen:
|
||||
continue
|
||||
seen.add((shape, operation))
|
||||
changed = copy.deepcopy(base)
|
||||
target = changed
|
||||
for key in path[:-1]:
|
||||
target = target[key]
|
||||
value = target[path[-1]] if path else changed
|
||||
if operation == "change":
|
||||
target[path[-1]] = {"altered_definition": True}
|
||||
elif operation == "remove":
|
||||
del target[path[-1]]
|
||||
elif operation == "unknown":
|
||||
value["unknown_metadata"] = "must fail"
|
||||
elif operation == "count":
|
||||
value.append({})
|
||||
else:
|
||||
value[0], value[1] = value[1], value[0]
|
||||
with self.subTest(path=path, operation=operation), patch.object(audit, 'blob', return_value=anchored), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, "work_packages.json", json.dumps(changed).encode())
|
||||
|
||||
def test_atomic_decision_and_selection_integrity(self):
|
||||
import json
|
||||
for name in ("atomic_requirements.json", "decisions.json"):
|
||||
data = audit.blob(ROOT, audit.BASE, audit.PLAN + name)
|
||||
with self.subTest(name=name), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, name, data + b" ")
|
||||
changed = audit.decode(data)
|
||||
if name == "atomic_requirements.json":
|
||||
changed["requirements"][0]["id"] = "changed_atomic_requirement"
|
||||
with self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, name, json.dumps(changed).encode())
|
||||
decisions = audit.decode(audit.blob(ROOT, audit.BASE, audit.PLAN + "decisions.json"))
|
||||
def flip(value, identity):
|
||||
if isinstance(value, dict):
|
||||
if value.get("id") == identity:
|
||||
value["status"] = "approved"
|
||||
return True
|
||||
return any(flip(v, identity) for v in value.values())
|
||||
if isinstance(value, list):
|
||||
return any(flip(v, identity) for v in value)
|
||||
return False
|
||||
for identity in ("D05", "D08"):
|
||||
changed = copy.deepcopy(decisions)
|
||||
self.assertTrue(flip(changed, identity))
|
||||
with self.subTest(identity=identity), self.assertRaises(ValueError):
|
||||
audit.validate_register(ROOT, "decisions.json", json.dumps(changed).encode())
|
||||
original = Path.read_bytes
|
||||
target = ROOT / audit.OUT / "ACTUAL_OPUS_NEXT_ORIGINAL_UNIT_SELECTION.json"
|
||||
def corrupt(path):
|
||||
return original(path) + (b" " if path == target else b"")
|
||||
with patch.object(Path, "read_bytes", corrupt), self.assertRaises(ValueError):
|
||||
audit.expected(ROOT)
|
||||
|
||||
def test_valid_implemented_partial_missing(self):
|
||||
# All three legitimate status classes must survive serialization and the
|
||||
# exact same verifier used by --check, without status promotion.
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
"facility_value_contracts_validation.json": "bf490a9ca585c48fc318e76c4a069ef244827d828d46e6415399f7710590dd16",
|
||||
"performance_audit.json": "0b630b15a392c3e0366f1362bfe4ddacb968f915f54549f82e4d6fa315384762",
|
||||
"progress_contract.json": "ccbdfce8c8365d5c13f59531955708834cce45acd0e136561c95295dfdb5df77",
|
||||
"progress_snapshot.json": "332dd0b3ba2e58c6801fdebf0ce42b672f7085479b6c4842b109c4e921b09686",
|
||||
"progress_snapshot.json": "4a5e3a1ad7e69406bf3aef43333eda19c07337f1d76a8f5c68da74b6bded9fd1",
|
||||
"progress_validator_guard_checks.json": "72ee513fcf1cad85c24bfd0a4b472f425f6acf117928ece0f6b41e29018da627",
|
||||
"progress_validator_guard_checks.r01.json": "14c26adffa5a1938241db4912e50ea54b660641ee6fee2e412d467dce14d0519",
|
||||
"requirement_coverage.json": "03b10e4da367579db502d0671a6e0dda36fd385111c6f1c0084acaff7605f593",
|
||||
@@ -254,6 +254,6 @@
|
||||
"validate_facility_value_contracts.py": "91640e2a76cd6cc9186f7b85c0bf379b24b6cac0d48962815235ee628e7ae43e",
|
||||
"validate_plan.py": "23678227d9b3c556f1bd903f4b5b3147c4a82ce5085e10055481026803451b80",
|
||||
"validator_update_checks.json": "f997d0f3de2cea29550840b1d5cb23647d64f81329de46758551e2b6c8fecc27",
|
||||
"work_packages.json": "9cac178af50d3320287c64aa518f6ec704fc71139a481c858f45b707eaf9f8ad"
|
||||
"work_packages.json": "0b472eaff8c208337cf2847c196add61415fbf22db2e7c298d2fc5c4ff38e5c0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,8 +156,8 @@
|
||||
"planned": 1
|
||||
},
|
||||
"current_delivery_state_counts": {
|
||||
"completed": 15,
|
||||
"in_progress": 24,
|
||||
"completed": 14,
|
||||
"in_progress": 25,
|
||||
"planned": 49
|
||||
},
|
||||
"completed_current_deliveries": [
|
||||
@@ -9713,7 +9713,7 @@
|
||||
"execution": "the-tree-p06-01 Runner; recorded Claude decision, one Codex implementer",
|
||||
"current_gate_status": "not implemented or executed; formal completion not accepted"
|
||||
},
|
||||
"next_closure_plan_id": "P04-01",
|
||||
"next_closure_plan_id": "P19-03",
|
||||
"p24_03_formal_closure": "docs/plans/original-completion-2026-10-02/execution/p24-03-formal-closure-r01/closure.json",
|
||||
"new_engine_run_scope": "Supplemental positive metadata diagnostic r01 failed cleanup preparation/log isolation; r02 passed17checks unchanged source and entire default profile. No duplicated full game regression.",
|
||||
"current_closure_targets": {
|
||||
@@ -10478,48 +10478,30 @@
|
||||
"whole_original_acceptance": false
|
||||
},
|
||||
"current_p19_03_reachability": {
|
||||
"state": "completed",
|
||||
"state": "whole_original_review_passed_integration_final_pending",
|
||||
"spec": "docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json",
|
||||
"actual_opus": "dc342e4d69154660bef7e688a70fd783",
|
||||
"original_unit_credit": 1,
|
||||
"original_unit_credit": 0,
|
||||
"source_anchor": "1b07b87d3736e777932315a4bdde8b70cbf9cb23",
|
||||
"P04_existing_questions": "preserved; no duplicate question or fake answer",
|
||||
"S": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"S": "806de25068bc423136063791afcea811d251ee1b",
|
||||
"actual_reviewer": {
|
||||
"id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"role": "reviewer",
|
||||
"status": "finished",
|
||||
"pid": 51196,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/565d4f21c12b451da2d5a7dd462d099b"
|
||||
"id": "d4e70e7f48f549b085692962f88531a8",
|
||||
"status": "running",
|
||||
"pid": 30223,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p19-03-reachability/runs/d4e70e7f48f549b085692962f88531a8"
|
||||
},
|
||||
"current_status": "docs/plans/original-completion-2026-10-02/execution/p19-03/ROOT_CURRENT_ACCEPTANCE_STATUS.json",
|
||||
"whole_review": {
|
||||
"run_id": "565d4f21c12b451da2d5a7dd462d099b",
|
||||
"run_id": "38eaaacdb31b4c76bcf982987816a391",
|
||||
"status": "pass",
|
||||
"critical_high_medium": 0,
|
||||
"low": 3,
|
||||
"artifact": "ROOT_WHOLE_REVIEW_903A2C5.json"
|
||||
"artifact": "ROOT_WHOLE_REVIEW_806DE25.json"
|
||||
},
|
||||
"actual_repair_worker": {
|
||||
"id": "bf8a86e053044bfea0051253fefb2ec7",
|
||||
"status": "finished"
|
||||
},
|
||||
"nonformal_actual_main_preflight": {
|
||||
"passed": true,
|
||||
"source": "903a2c566e73cebc874a6499410a1243bc190a63",
|
||||
"preflight_commit": "7f9b63b0c281d57be4abec1c576e5abef273ca78",
|
||||
"main": "6e17cae5c9f0133fc3eb19e58572977f4151de7c",
|
||||
"normal_integration_or_final_satisfied": false,
|
||||
"artifact": "ROOT_ACTUAL_NONFORMAL_MAIN_PREFLIGHT_903A2C5.json"
|
||||
},
|
||||
"C": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"M": "e7acd530c5d43313534d0b6ee23c915aba3cf70a",
|
||||
"normal_final": {
|
||||
"passed": true,
|
||||
"commit": "8e4f1d92fc2a2e8f1dd187e661cf52b13e4e51d4",
|
||||
"artifact": "ROOT_NORMAL_FINAL_C8E4F1D9.json"
|
||||
},
|
||||
"whole_game_acceptance": false
|
||||
},
|
||||
"next_closure_note": "P04-01 remains first upon existing D05 answers; actual Opus will select next independent original work without duplicate worker or invented values."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8996,7 +8996,7 @@
|
||||
},
|
||||
"legacy_state": "planned",
|
||||
"state_scope": "package-level; completed means whole package accepted; partial implementation is not completion",
|
||||
"current_summary": "P19-03分岐到達表の原成果を正式完了。P19-01/02のゲーム内行動・決闘・履歴等は未完。原P19-03を正式完了。S903a2c5→通常C8e4f1d9/Me7acd53、元受入7名×3ルート21セルと全8カテゴリ・23共通ルール・未制作欠損を実Opus565d全条件レビュー合格。登録3検証/16自己試験・実候補integration/final合格、レビュー済8文書と1368ゲーム入力の完全等値照合。原本/定義/未承認事項を保ち進捗メタだけ分離。原正式14→15/88(本件+1、部分点なし)。全ルート実装/完成素材/Windows等の全ゲーム完了は別未達。",
|
||||
"current_summary": "修正版806de25の登録3検証/12自己試験が実合格。実Opus38eaaが7名×3ルート21セル・全8カテゴリ・原本/全source/欠損と旧実装区分を全原条件再レビューしpass(重大/高/中0・低3)。通常integration/final・台帳確定前で原14/88に加算0。ゲーム1368入力は同一、旧全回帰証明を厳密再利用。",
|
||||
"remaining_deliverables": [
|
||||
{
|
||||
"id": "P19-01",
|
||||
@@ -9019,7 +9019,7 @@
|
||||
"title": "分岐の到達性",
|
||||
"work": "人物ごとの3ルートに必要なイベント・条件・中断処理を列挙する。",
|
||||
"acceptance": "7名×3ルートの到達表があり、未制作内容は欠損として残る。",
|
||||
"state": "completed",
|
||||
"state": "in_progress",
|
||||
"evidence": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p19-03/TASK_SPEC.json",
|
||||
@@ -9028,21 +9028,19 @@
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p19-03/ROOT_CURRENT_ACCEPTANCE_STATUS.json",
|
||||
"sha256": "02c474558fbd32e99ebb8069e5cfa3318048d8d7b72f12887e885bc37c294da2",
|
||||
"sha256": "75dd5adc99eebd16703c5f5b4df12d3e4efdc24e702b24bb7daa1a71454417e6",
|
||||
"scope": "Actual registered3checks+selftests10 PASS; exact game-input reuse qualified; whole semantic review/integration/final pending, original credit0"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p19-03/ROOT_RUNNER_COMPLETED_TRACEABILITY.json",
|
||||
"sha256": "b433a6b52bb722fa8e9cdc2a161abbca71693f45926bb5c7bf1b00716d3d7f5a",
|
||||
"scope": "Whole original P19-03 acceptance, independent review, normal exactC/M integration/final, existing real authorization; originalcredit1 only; no gamecompletion"
|
||||
}
|
||||
],
|
||||
"current_summary": "原P19-03を正式完了。S903a2c5→通常C8e4f1d9/Me7acd53、元受入7名×3ルート21セルと全8カテゴリ・23共通ルール・未制作欠損を実Opus565d全条件レビュー合格。登録3検証/16自己試験・実候補integration/final合格、レビュー済8文書と1368ゲーム入力の完全等値照合。原本/定義/未承認事項を保ち進捗メタだけ分離。原正式14→15/88(本件+1、部分点なし)。全ルート実装/完成素材/Windows等の全ゲーム完了は別未達。",
|
||||
"progress_summary": "原P19-03を正式完了。S903a2c5→通常C8e4f1d9/Me7acd53、元受入7名×3ルート21セルと全8カテゴリ・23共通ルール・未制作欠損を実Opus565d全条件レビュー合格。登録3検証/16自己試験・実候補integration/final合格、レビュー済8文書と1368ゲーム入力の完全等値照合。原本/定義/未承認事項を保ち進捗メタだけ分離。原正式14→15/88(本件+1、部分点なし)。全ルート実装/完成素材/Windows等の全ゲーム完了は別未達。",
|
||||
"updated_at_jst": "2026-10-17T20:29:39.555420+09:00",
|
||||
"current_summary": "修正版806de25の登録3検証/12自己試験が実合格。実Opus38eaaが7名×3ルート21セル・全8カテゴリ・原本/全source/欠損と旧実装区分を全原条件再レビューしpass(重大/高/中0・低3)。通常integration/final・台帳確定前で原14/88に加算0。ゲーム1368入力は同一、旧全回帰証明を厳密再利用。",
|
||||
"progress_summary": "初回実行パス未展開と実provider文脈上限の失敗を保持し、検査器実行前/推論前の障害のみを実行経路/全文ファイル参照で補正。提出版/全資料/受入条件/権限/課金に変更なし。人物固有未制作/D08/未定値は欠損。",
|
||||
"updated_at_jst": "2026-10-17T19:58:24.516684+09:00",
|
||||
"current_execution": "docs/plans/original-completion-2026-10-02/execution/p19-03/ROOT_CURRENT_ACCEPTANCE_STATUS.json",
|
||||
"remaining_gaps": [],
|
||||
"submitted_commit": "903a2c566e73cebc874a6499410a1243bc190a63"
|
||||
"remaining_gaps": [
|
||||
"Normal actual integrationC/M and independent candidate source/input equality",
|
||||
"Normal final and existing exact real-owner main authorization, thenledger/push; no new humanSHA speech fabricated"
|
||||
],
|
||||
"submitted_commit": "806de25068bc423136063791afcea811d251ee1b"
|
||||
}
|
||||
],
|
||||
"estimate_person_days_historical_2026_09_29": [
|
||||
@@ -9063,7 +9061,7 @@
|
||||
],
|
||||
"cross_cutting_acceptance_scope": "Completion requirements only, not achieved results. Apply each to relevant slices; non-applicable views require a recorded reason.",
|
||||
"initial_revision_state": "planned",
|
||||
"updated_at_jst": "2026-10-17T20:29:39.555420+09:00"
|
||||
"updated_at_jst": "2026-10-17T19:39:39.105864+09:00"
|
||||
},
|
||||
{
|
||||
"id": "P20",
|
||||
|
||||
Reference in New Issue
Block a user