P3_WP00_BASELINE_MANIFEST.json 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. {
  2. "schema_version": "1.1",
  3. "work_package": "P3-WP00",
  4. "captured_at": "2026-08-02T13:24:00+08:00",
  5. "baseline_type": "PHASE3_ENGINEERING_ENTRY",
  6. "source_control": {
  7. "branch": "codex/dataops-phase3-enterprise-readiness",
  8. "captured_local_commit": "487b57d538f619407f0f2be1db7061b055b13400",
  9. "phase2_baseline_tag": "v0.3.0-phase2",
  10. "phase2_baseline_commit": "95023e59bfb9f00be4ed61f7a8307fac56fbcee9",
  11. "merge_base_with_phase2": "95023e59bfb9f00be4ed61f7a8307fac56fbcee9",
  12. "remote_phase2_tracking_ref": "refs/remotes/origin/codex/dataops-phase2-platformization",
  13. "remote_phase2_tracking_commit": "95023e59bfb9f00be4ed61f7a8307fac56fbcee9",
  14. "remote_network_refresh_performed": false,
  15. "relationship": "captured_local_commit is a direct descendant of phase2_baseline_commit",
  16. "notes": "远端第二阶段值来自现有本地 remote-tracking ref;按 P3-WP00 不联网约束未执行 fetch 或 ls-remote。",
  17. "wp00_delivery_commit_resolution": "GIT_COMMIT_CONTAINING_THIS_MANIFEST",
  18. "wp00_delivery_commit_note": "Git 提交无法在自身内容中保存自身哈希;最终提交号由提交结果和交付报告提供。"
  19. },
  20. "api_contract": {
  21. "path": "docs/architecture/OPENAPI.yaml",
  22. "operation_count": 395,
  23. "sha256": "fcb9d0e23640fb75e698519622d99466da372f6fefe3152dd84e9855421e9f3a",
  24. "git_blob_at_capture": "3133570b704ffcb2464375715f214fd441e145ac",
  25. "generator": "scripts/generate_openapi.py",
  26. "generated_output": "/private/tmp/p3-wp00-openapi.yaml",
  27. "generated_sha256": "fcb9d0e23640fb75e698519622d99466da372f6fefe3152dd84e9855421e9f3a",
  28. "generated_operation_count": 395,
  29. "generated_matches_committed": true
  30. },
  31. "migration_contract": {
  32. "source_path": "migrations",
  33. "versions_path": "migrations/versions",
  34. "heads": [
  35. "20260802_460"
  36. ],
  37. "heads_status": "AVAILABLE",
  38. "file_count": 52,
  39. "git_tree": "68755a0e738f8e7a25a374b755124e75d66037ff"
  40. },
  41. "release_copy_contract": {
  42. "source_app_path": "app",
  43. "release_app_path": "deployment/app",
  44. "app_git_tree": "9237562e058c7b911c9e5db1b102aa6963ba46df",
  45. "deployment_app_git_tree": "9237562e058c7b911c9e5db1b102aa6963ba46df",
  46. "app_matches": true,
  47. "source_migrations_path": "migrations",
  48. "release_migrations_path": "deployment/migrations",
  49. "migrations_git_tree": "68755a0e738f8e7a25a374b755124e75d66037ff",
  50. "deployment_migrations_git_tree": "68755a0e738f8e7a25a374b755124e75d66037ff",
  51. "migrations_match": true,
  52. "comparison_mode": "recursive byte/path comparison plus Git tree identity"
  53. },
  54. "data_snapshot": {
  55. "scope": "LOCAL_PHASE2_ENGINEERING_STATE",
  56. "read_only_capture": true,
  57. "enterprise_uat": false,
  58. "status": "NOT_AVAILABLE",
  59. "error_category": "MISSING_DATABASE_CONFIGURATION",
  60. "error_summary": "alembic current could not start because neither SQLALCHEMY_DATABASE_URI nor DATABASE_URL was configured for migrations.",
  61. "alembic_current": "NOT_AVAILABLE",
  62. "public_table_count": "NOT_AVAILABLE",
  63. "record_counts": "NOT_AVAILABLE",
  64. "write_attempted": false,
  65. "prior_phase2_counts_reused": false
  66. },
  67. "user_untracked_inventory": {
  68. "inspection_mode": "PATHS_ONLY_CONTENT_NOT_READ",
  69. "modified": false,
  70. "captured_before_wp00_files_were_added": true,
  71. "paths": [
  72. "canvas/cowart-selection.json",
  73. "canvas/cowart-view-state.json",
  74. "canvas/pages/manifest.json",
  75. "canvas/pages/page/assets/DATAOPS_PLATFORM_ENTRY_AND_CORE_ARCHITECTURE_20260801-cowart-edit-01.png",
  76. "canvas/pages/page/assets/DATAOPS_PLATFORM_ENTRY_AND_CORE_ARCHITECTURE_20260801-cowart.png",
  77. "canvas/pages/page/assets/DATAOPS_PLATFORM_ENTRY_AND_FOUNDATION_ARCHITECTURE_20260801-cowart.png",
  78. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-01.png",
  79. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-02.png",
  80. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-03.png",
  81. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-04.png",
  82. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-05.png",
  83. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-06.png",
  84. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-07.png",
  85. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-08.png",
  86. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-09.png",
  87. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-10.png",
  88. "canvas/pages/page/assets/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801-cowart-edit-11.png",
  89. "canvas/pages/page/assets/asset-877967025.svg",
  90. "canvas/pages/page/cowart-canvas.json",
  91. "docs/architecture/DATAOPS_PLATFORM_ENTRY_AND_CORE_ARCHITECTURE_20260801.png",
  92. "docs/architecture/DATAOPS_PLATFORM_ENTRY_AND_CORE_ARCHITECTURE_20260801.svg",
  93. "docs/architecture/DATAOPS_PLATFORM_ENTRY_AND_FOUNDATION_ARCHITECTURE_20260801.md",
  94. "docs/architecture/DATAOPS_PLATFORM_ENTRY_AND_FOUNDATION_ARCHITECTURE_20260801.png",
  95. "docs/architecture/DATAOPS_PLATFORM_ENTRY_AND_FOUNDATION_ARCHITECTURE_20260801.svg",
  96. "docs/architecture/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801.md",
  97. "docs/architecture/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801.png",
  98. "docs/architecture/DATAOPS_PLATFORM_SYSTEM_ARCHITECTURE_20260801.svg"
  99. ]
  100. },
  101. "verification_commands": [
  102. "git rev-parse HEAD v0.3.0-phase2^{commit}",
  103. "git merge-base HEAD v0.3.0-phase2",
  104. "git rev-parse refs/remotes/origin/codex/dataops-phase2-platformization",
  105. "PYTHONPATH=. .venv/bin/python scripts/generate_openapi.py --output /private/tmp/p3-wp00-openapi.yaml",
  106. "PYTHONPATH=. .venv/bin/alembic heads",
  107. "PYTHONPATH=. .venv/bin/alembic current",
  108. "diff -qr app deployment/app",
  109. "diff -qr migrations deployment/migrations"
  110. ],
  111. "verification_results": [
  112. {
  113. "id": "P3-EVD-001",
  114. "command": "PYTHONPATH=. .venv/bin/pytest -q tests/test_phase3_wp00_baseline_contract.py",
  115. "case_count": 12,
  116. "result": "PASSED",
  117. "summary": "12 passed",
  118. "exit_code": 0,
  119. "enterprise_uat": false
  120. },
  121. {
  122. "id": "P3-EVD-002",
  123. "command": "PYTHONPATH=. .venv/bin/pytest -q tests/test_phase2_wp00_baseline_contract.py",
  124. "case_count": 7,
  125. "result": "PASSED",
  126. "summary": "7 passed",
  127. "exit_code": 0,
  128. "enterprise_uat": false
  129. },
  130. {
  131. "id": "P3-EVD-003",
  132. "command": "git archive captured_local_commit; run archived scripts/generate_openapi.py against archived app/ and compare archived OPENAPI.yaml",
  133. "case_count": 395,
  134. "result": "PASSED",
  135. "summary": "395 operations; committed and generated SHA-256 matched",
  136. "exit_code": 0,
  137. "enterprise_uat": false
  138. },
  139. {
  140. "id": "P3-EVD-004",
  141. "command": "git archive captured_local_commit migrations/ and alembic.ini; run archived alembic heads",
  142. "case_count": 1,
  143. "result": "PASSED",
  144. "summary": "20260802_460 (head)",
  145. "exit_code": 0,
  146. "enterprise_uat": false
  147. },
  148. {
  149. "id": "P3-EVD-005",
  150. "command": "PYTHONPATH=. .venv/bin/alembic current",
  151. "case_count": 0,
  152. "result": "NOT_AVAILABLE",
  153. "summary": "MISSING_DATABASE_CONFIGURATION",
  154. "exit_code": 1,
  155. "enterprise_uat": false
  156. },
  157. {
  158. "id": "P3-EVD-006",
  159. "command": "diff -qr app deployment/app; diff -qr migrations deployment/migrations",
  160. "case_count": 2,
  161. "result": "PASSED",
  162. "summary": "app parity exit 0; migrations parity exit 0",
  163. "exit_code": 0,
  164. "enterprise_uat": false
  165. },
  166. {
  167. "id": "P3-EVD-007",
  168. "command": "git rev-parse; git merge-base; local remote-tracking ref",
  169. "case_count": 3,
  170. "result": "PASSED_WITH_LIMITATION",
  171. "summary": "branch capture 487b57d; tag, merge-base and local remote-tracking commit 95023e5; no network refresh",
  172. "exit_code": 0,
  173. "enterprise_uat": false
  174. },
  175. {
  176. "id": "P3-EVD-008",
  177. "command": "git diff --check; git diff --cached --check",
  178. "case_count": 2,
  179. "result": "PASSED",
  180. "summary": "exit 0",
  181. "exit_code": 0,
  182. "enterprise_uat": false
  183. }
  184. ],
  185. "limitations": [
  186. "清单是本地工程基线,不是企业生产状态或企业 UAT 证据。",
  187. "数据库不可用时不继承或推断第二阶段历史计数。",
  188. "远端跟踪提交仅代表本地 remote-tracking ref 的当前值,未进行网络刷新。",
  189. "用户未跟踪文件只记录路径;未读取 canvas/ 或 docs/architecture 下未跟踪内容。"
  190. ]
  191. }