codex-genesis-harness 0.1.0 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/.codebase/API_CONTRACTS.md +12 -0
  2. package/.codebase/ARCHITECTURE.md +6 -0
  3. package/.codebase/ARCHITECTURE_REVIEW_COMPLETE.md +216 -0
  4. package/.codebase/CURRENT_STATE.md +8 -0
  5. package/.codebase/DEPENDENCY_GRAPH.md +14 -0
  6. package/.codebase/DOMAIN_MODELS.md +10 -0
  7. package/.codebase/EVOLUTION_PLAN.md +35 -0
  8. package/.codebase/FILE_NAMING_CLARIFICATION.md +161 -0
  9. package/.codebase/HARNESS_COMPLETENESS_AUDIT.md +613 -0
  10. package/.codebase/IMPLEMENTATION_COMPLETE.md +429 -0
  11. package/.codebase/IMPLEMENTATION_HANDOFF.md +351 -0
  12. package/.codebase/IMPROVEMENTS_SUMMARY.md +419 -0
  13. package/.codebase/KNOWN_PROBLEMS.md +6 -0
  14. package/.codebase/MODULE_INDEX.md +13 -0
  15. package/.codebase/PHASE3_SKILLS_NAMING_COMPLETE.md +292 -0
  16. package/.codebase/PHASE_DEPENDENCY_MAP.md +486 -0
  17. package/.codebase/PIPELINE_FLOW.md +14 -0
  18. package/.codebase/QUICK_START_SPEC_IMPACT.md +456 -0
  19. package/.codebase/README.md +139 -0
  20. package/.codebase/RECOVERY_POINTS.md +438 -0
  21. package/.codebase/TEST_MATRIX.md +11 -0
  22. package/.codebase/UI_ROUTES.md +4 -0
  23. package/.codebase/context/backend-summary.md +4 -0
  24. package/.codebase/context/frontend-summary.md +4 -0
  25. package/.codebase/context/pipeline-summary.md +4 -0
  26. package/.codebase/context/providers-summary.md +4 -0
  27. package/.codebase/context/render-summary.md +4 -0
  28. package/.codebase/context/tests-summary.md +4 -0
  29. package/.codex/skills/genesis-ai-provider/SKILL.md +46 -0
  30. package/.codex/skills/genesis-ai-provider/agents/openai.yaml +7 -0
  31. package/.codex/skills/genesis-ai-provider/checklists/checklist.md +9 -0
  32. package/.codex/skills/genesis-ai-provider/examples/example.md +4 -0
  33. package/.codex/skills/genesis-ai-provider/templates/provider-contract-template.md +9 -0
  34. package/.codex/skills/genesis-api-contract/SKILL.md +46 -0
  35. package/.codex/skills/genesis-api-contract/agents/openai.yaml +7 -0
  36. package/.codex/skills/genesis-api-contract/checklists/checklist.md +8 -0
  37. package/.codex/skills/genesis-api-contract/examples/example.md +4 -0
  38. package/.codex/skills/genesis-api-contract/templates/api-contract-template.md +4 -0
  39. package/.codex/skills/genesis-api-sync/SKILL.md +354 -0
  40. package/.codex/skills/genesis-api-sync/agents/openai.yaml +7 -0
  41. package/.codex/skills/genesis-api-sync/checklists/api-sync-checklist.md +101 -0
  42. package/.codex/skills/genesis-api-sync/examples/example.md +68 -0
  43. package/.codex/skills/genesis-api-sync/templates/api-change-template.md +257 -0
  44. package/.codex/skills/genesis-architecture/SKILL.md +46 -0
  45. package/.codex/skills/genesis-architecture/agents/openai.yaml +7 -0
  46. package/.codex/skills/genesis-architecture/checklists/checklist.md +8 -0
  47. package/.codex/skills/genesis-architecture/examples/example.md +4 -0
  48. package/.codex/skills/genesis-architecture/templates/architecture-decision-template.md +14 -0
  49. package/.codex/skills/genesis-codebase-map/SKILL.md +46 -0
  50. package/.codex/skills/genesis-codebase-map/agents/openai.yaml +7 -0
  51. package/.codex/skills/genesis-codebase-map/checklists/checklist.md +7 -0
  52. package/.codex/skills/genesis-codebase-map/examples/example.md +4 -0
  53. package/.codex/skills/genesis-codebase-map/templates/map-update-template.md +8 -0
  54. package/.codex/skills/genesis-debug-guide/SKILL.md +479 -0
  55. package/.codex/skills/genesis-debug-guide/agents/openai.yaml +7 -0
  56. package/.codex/skills/genesis-debug-guide/checklists/flaky-test-investigation.md +339 -0
  57. package/.codex/skills/genesis-debug-guide/checklists/production-bug-debug.md +210 -0
  58. package/.codex/skills/genesis-debug-guide/checklists/test-failure-debug.md +158 -0
  59. package/.codex/skills/genesis-debug-guide/examples/example.md +48 -0
  60. package/.codex/skills/genesis-debug-guide/observability/debug-commands.md +365 -0
  61. package/.codex/skills/genesis-debug-guide/playbooks/unit-test-failures.md +289 -0
  62. package/.codex/skills/genesis-debug-guide/templates/debug-investigation-log.md +288 -0
  63. package/.codex/skills/genesis-design-spec/SKILL.md +46 -0
  64. package/.codex/skills/genesis-design-spec/agents/openai.yaml +7 -0
  65. package/.codex/skills/genesis-design-spec/checklists/checklist.md +7 -0
  66. package/.codex/skills/genesis-design-spec/examples/example.md +4 -0
  67. package/.codex/skills/genesis-design-spec/templates/design-spec-template.md +9 -0
  68. package/.codex/skills/genesis-docs/SKILL.md +46 -0
  69. package/.codex/skills/genesis-docs/agents/openai.yaml +7 -0
  70. package/.codex/skills/genesis-docs/checklists/checklist.md +7 -0
  71. package/.codex/skills/genesis-docs/examples/example.md +4 -0
  72. package/.codex/skills/genesis-docs/templates/docs-update-template.md +8 -0
  73. package/.codex/skills/genesis-docs-automation/SKILL.md +1003 -0
  74. package/.codex/skills/genesis-docs-automation/agents/openai.yaml +7 -0
  75. package/.codex/skills/genesis-docs-automation/checklists/docs-validation.md +359 -0
  76. package/.codex/skills/genesis-docs-automation/checklists/spec-alignment.md +312 -0
  77. package/.codex/skills/genesis-docs-automation/examples/example.md +59 -0
  78. package/.codex/skills/genesis-docs-automation/observability/docs-tracking.md +382 -0
  79. package/.codex/skills/genesis-docs-automation/playbooks/auto-update-flow.md +851 -0
  80. package/.codex/skills/genesis-docs-automation/playbooks/changelog-generation.md +491 -0
  81. package/.codex/skills/genesis-docs-automation/templates/changelog-entry-template.md +187 -0
  82. package/.codex/skills/genesis-docs-automation/templates/handoff-template.md +297 -0
  83. package/.codex/skills/genesis-harness/SKILL.md +1418 -0
  84. package/.codex/skills/genesis-harness/agents/openai.yaml +9 -0
  85. package/.codex/skills/genesis-harness/checklists/bug-fix-qa.md +169 -0
  86. package/.codex/skills/genesis-harness/checklists/checklist.md +10 -0
  87. package/.codex/skills/genesis-harness/checklists/new-feature-qa.md +157 -0
  88. package/.codex/skills/genesis-harness/checklists/refactor-qa.md +216 -0
  89. package/.codex/skills/genesis-harness/checklists/requirements-validation.md +211 -0
  90. package/.codex/skills/genesis-harness/examples/example.md +4 -0
  91. package/.codex/skills/genesis-harness/resources/change-impact-matrix-template.md +204 -0
  92. package/.codex/skills/genesis-harness/resources/foundation-phase-template.md +131 -0
  93. package/.codex/skills/genesis-harness/resources/phase-00-foundation-template.md +76 -0
  94. package/.codex/skills/genesis-harness/resources/post-implementation-guide.md +347 -0
  95. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-architecture-boundaries.sh +23 -23
  96. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-docs-sync.sh +24 -24
  97. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-no-debug-logs.sh +21 -21
  98. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-required-planning-files.sh +46 -46
  99. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-spec-changelog.sh +24 -24
  100. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/check-task-tracking.sh +25 -25
  101. package/.codex/skills/genesis-harness/scripts/compact-context.sh +54 -0
  102. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-adr.sh +74 -74
  103. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-bug.sh +160 -160
  104. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/create-feature.sh +217 -217
  105. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/detect-stack.sh +26 -26
  106. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/init-planning.sh +750 -719
  107. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/list-changed-files.sh +12 -12
  108. package/.codex/skills/genesis-harness/scripts/offload-log.sh +72 -0
  109. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/run-verification.sh +47 -47
  110. package/.codex/skills/genesis-harness/scripts/run-verify-loop.sh +75 -0
  111. package/.codex/skills/{project-genesis-harness → genesis-harness}/scripts/update-state.sh +33 -33
  112. package/.codex/skills/genesis-harness/templates/harness-workflow-template.md +10 -0
  113. package/.codex/skills/genesis-harness-engineering/SKILL.md +159 -0
  114. package/.codex/skills/genesis-harness-engineering/agents/openai.yaml +7 -0
  115. package/.codex/skills/genesis-harness-engineering/checklists/checklist.md +48 -0
  116. package/.codex/skills/genesis-harness-engineering/examples/example.md +57 -0
  117. package/.codex/skills/genesis-harness-engineering/playbooks/harness-evolution.md +99 -0
  118. package/.codex/skills/genesis-harness-engineering/templates/harness-change-template.md +37 -0
  119. package/.codex/skills/genesis-new-design/SKILL.md +95 -0
  120. package/.codex/skills/genesis-new-design/agents/openai.yaml +4 -0
  121. package/.codex/skills/genesis-new-design/checklists/checklist.md +8 -0
  122. package/.codex/skills/genesis-new-design/examples/example.md +4 -0
  123. package/.codex/skills/genesis-new-design/templates/new-design-template.md +9 -0
  124. package/.codex/skills/genesis-observability-automation/SKILL.md +382 -0
  125. package/.codex/skills/genesis-observability-automation/agents/openai.yaml +7 -0
  126. package/.codex/skills/genesis-observability-automation/examples/example.md +86 -0
  127. package/.codex/skills/genesis-performance-profiling/SKILL.md +510 -0
  128. package/.codex/skills/genesis-performance-profiling/agents/openai.yaml +6 -0
  129. package/.codex/skills/genesis-performance-profiling/checklists/optimization-verification.md +199 -0
  130. package/.codex/skills/genesis-performance-profiling/checklists/performance-baseline.md +183 -0
  131. package/.codex/skills/genesis-performance-profiling/examples/example.md +234 -0
  132. package/.codex/skills/genesis-performance-profiling/observability/performance-tracking.md +202 -0
  133. package/.codex/skills/genesis-performance-profiling/playbooks/load-testing-orchestration.md +593 -0
  134. package/.codex/skills/genesis-performance-profiling/playbooks/profiling-playbook.md +601 -0
  135. package/.codex/skills/genesis-performance-profiling/templates/load-test-config-template.md +428 -0
  136. package/.codex/skills/genesis-performance-profiling/templates/performance-report-template.md +238 -0
  137. package/.codex/skills/genesis-pipeline-orchestration/SKILL.md +46 -0
  138. package/.codex/skills/genesis-pipeline-orchestration/agents/openai.yaml +7 -0
  139. package/.codex/skills/genesis-pipeline-orchestration/checklists/checklist.md +12 -0
  140. package/.codex/skills/genesis-pipeline-orchestration/examples/example.md +4 -0
  141. package/.codex/skills/genesis-pipeline-orchestration/templates/orchestration-template.md +12 -0
  142. package/.codex/skills/genesis-planning/SKILL.md +46 -0
  143. package/.codex/skills/genesis-planning/agents/openai.yaml +7 -0
  144. package/.codex/skills/genesis-planning/checklists/checklist.md +8 -0
  145. package/.codex/skills/genesis-planning/examples/example.md +4 -0
  146. package/.codex/skills/genesis-planning/templates/plan-template.md +11 -0
  147. package/.codex/skills/genesis-release/SKILL.md +46 -0
  148. package/.codex/skills/genesis-release/agents/openai.yaml +7 -0
  149. package/.codex/skills/genesis-release/checklists/checklist.md +8 -0
  150. package/.codex/skills/genesis-release/examples/example.md +4 -0
  151. package/.codex/skills/genesis-release/templates/release-checklist-template.md +9 -0
  152. package/.codex/skills/genesis-release-orchestration/SKILL.md +653 -0
  153. package/.codex/skills/genesis-release-orchestration/agents/openai.yaml +7 -0
  154. package/.codex/skills/genesis-release-orchestration/checklists/post-deployment-verification.md +274 -0
  155. package/.codex/skills/genesis-release-orchestration/checklists/pre-release-validation.md +220 -0
  156. package/.codex/skills/genesis-release-orchestration/examples/example.md +78 -0
  157. package/.codex/skills/genesis-release-orchestration/observability/release-tracking.md +253 -0
  158. package/.codex/skills/genesis-release-orchestration/playbooks/canary-deployment-orchestration.md +472 -0
  159. package/.codex/skills/genesis-release-orchestration/playbooks/semantic-versioning-automation.md +494 -0
  160. package/.codex/skills/genesis-release-orchestration/templates/deployment-strategy-template.md +303 -0
  161. package/.codex/skills/genesis-release-orchestration/templates/release-runbook-template.md +420 -0
  162. package/.codex/skills/genesis-research/SKILL.md +46 -0
  163. package/.codex/skills/genesis-research/agents/openai.yaml +7 -0
  164. package/.codex/skills/genesis-research/checklists/checklist.md +7 -0
  165. package/.codex/skills/genesis-research/examples/example.md +4 -0
  166. package/.codex/skills/genesis-research/templates/research-note-template.md +9 -0
  167. package/.codex/skills/genesis-research-first/SKILL.md +237 -0
  168. package/.codex/skills/genesis-research-first/agents/openai.yaml +7 -0
  169. package/.codex/skills/genesis-research-first/examples/example.md +85 -0
  170. package/.codex/skills/genesis-spec-propagation/SKILL.md +534 -0
  171. package/.codex/skills/genesis-spec-propagation/agents/openai.yaml +7 -0
  172. package/.codex/skills/genesis-spec-propagation/checklists/phase-update-verification.md +384 -0
  173. package/.codex/skills/genesis-spec-propagation/checklists/spec-change-detection.md +257 -0
  174. package/.codex/skills/genesis-spec-propagation/examples/example.md +63 -0
  175. package/.codex/skills/genesis-spec-propagation/observability/propagation-tracking.md +373 -0
  176. package/.codex/skills/genesis-spec-propagation/playbooks/breaking-change-propagation.md +692 -0
  177. package/.codex/skills/genesis-spec-propagation/playbooks/feature-change-propagation.md +434 -0
  178. package/.codex/skills/genesis-spec-propagation/templates/migration-guide-template.md +407 -0
  179. package/.codex/skills/genesis-upgrade-design/SKILL.md +97 -0
  180. package/.codex/skills/genesis-upgrade-design/agents/openai.yaml +4 -0
  181. package/.codex/skills/genesis-upgrade-design/checklists/checklist.md +8 -0
  182. package/.codex/skills/genesis-upgrade-design/examples/example.md +4 -0
  183. package/.codex/skills/genesis-upgrade-design/templates/upgrade-design-template.md +9 -0
  184. package/.codex/skills/spec-impact-engine/SKILL.md +504 -0
  185. package/.codex/skills/spec-impact-engine/agents/openai.yaml +7 -0
  186. package/.codex/skills/spec-impact-engine/detect-spec-changes.sh +262 -0
  187. package/.codex/skills/spec-impact-engine/examples/example.md +98 -0
  188. package/.codex/skills/spec-impact-engine/templates/impact-report.md +248 -0
  189. package/.codex/skills/spec-impact-engine/templates/migration-guide.md +223 -0
  190. package/.codex/skills/ui-ux-test-skill/SKILL.md +46 -0
  191. package/.codex/skills/ui-ux-test-skill/agents/openai.yaml +7 -0
  192. package/.codex/skills/ui-ux-test-skill/checklists/checklist.md +8 -0
  193. package/.codex/skills/ui-ux-test-skill/examples/example.md +4 -0
  194. package/.codex/skills/ui-ux-test-skill/templates/playwright-test-template.md +4 -0
  195. package/.codex-plugin/plugin.json +13 -11
  196. package/README.EN.md +719 -0
  197. package/README.VI.md +712 -0
  198. package/README.md +318 -181
  199. package/VERSION +1 -1
  200. package/bin/genesis-harness.js +133 -79
  201. package/contracts/agents/CharacterBibleAgent/error.json +1 -0
  202. package/contracts/agents/CharacterBibleAgent/example.json +1 -0
  203. package/contracts/agents/CharacterBibleAgent/request.json +1 -0
  204. package/contracts/agents/CharacterBibleAgent/response.json +1 -0
  205. package/contracts/agents/CharacterBibleAgent/schema.json +1 -0
  206. package/contracts/agents/ImageGenerationAgent/error.json +1 -0
  207. package/contracts/agents/ImageGenerationAgent/example.json +1 -0
  208. package/contracts/agents/ImageGenerationAgent/request.json +1 -0
  209. package/contracts/agents/ImageGenerationAgent/response.json +1 -0
  210. package/contracts/agents/ImageGenerationAgent/schema.json +1 -0
  211. package/contracts/agents/PipelineOrchestrator/error.json +1 -0
  212. package/contracts/agents/PipelineOrchestrator/example.json +1 -0
  213. package/contracts/agents/PipelineOrchestrator/request.json +1 -0
  214. package/contracts/agents/PipelineOrchestrator/response.json +1 -0
  215. package/contracts/agents/PipelineOrchestrator/schema.json +1 -0
  216. package/contracts/agents/PromptGenerationAgent/error.json +1 -0
  217. package/contracts/agents/PromptGenerationAgent/example.json +1 -0
  218. package/contracts/agents/PromptGenerationAgent/request.json +1 -0
  219. package/contracts/agents/PromptGenerationAgent/response.json +1 -0
  220. package/contracts/agents/PromptGenerationAgent/schema.json +1 -0
  221. package/contracts/agents/RenderAgent/error.json +1 -0
  222. package/contracts/agents/RenderAgent/example.json +1 -0
  223. package/contracts/agents/RenderAgent/request.json +1 -0
  224. package/contracts/agents/RenderAgent/response.json +1 -0
  225. package/contracts/agents/RenderAgent/schema.json +1 -0
  226. package/contracts/agents/ScenePlanningAgent/error.json +1 -0
  227. package/contracts/agents/ScenePlanningAgent/example.json +1 -0
  228. package/contracts/agents/ScenePlanningAgent/request.json +1 -0
  229. package/contracts/agents/ScenePlanningAgent/response.json +1 -0
  230. package/contracts/agents/ScenePlanningAgent/schema.json +1 -0
  231. package/contracts/agents/ScreenplayAgent/error.json +1 -0
  232. package/contracts/agents/ScreenplayAgent/example.json +1 -0
  233. package/contracts/agents/ScreenplayAgent/request.json +1 -0
  234. package/contracts/agents/ScreenplayAgent/response.json +1 -0
  235. package/contracts/agents/ScreenplayAgent/schema.json +1 -0
  236. package/contracts/agents/StoryAnalysisAgent/error.json +1 -0
  237. package/contracts/agents/StoryAnalysisAgent/example.json +1 -0
  238. package/contracts/agents/StoryAnalysisAgent/request.json +1 -0
  239. package/contracts/agents/StoryAnalysisAgent/response.json +1 -0
  240. package/contracts/agents/StoryAnalysisAgent/schema.json +1 -0
  241. package/contracts/agents/SubtitleGenerationAgent/error.json +1 -0
  242. package/contracts/agents/SubtitleGenerationAgent/example.json +1 -0
  243. package/contracts/agents/SubtitleGenerationAgent/request.json +1 -0
  244. package/contracts/agents/SubtitleGenerationAgent/response.json +1 -0
  245. package/contracts/agents/SubtitleGenerationAgent/schema.json +1 -0
  246. package/contracts/agents/VoiceGenerationAgent/error.json +1 -0
  247. package/contracts/agents/VoiceGenerationAgent/example.json +1 -0
  248. package/contracts/agents/VoiceGenerationAgent/request.json +1 -0
  249. package/contracts/agents/VoiceGenerationAgent/response.json +1 -0
  250. package/contracts/agents/VoiceGenerationAgent/schema.json +1 -0
  251. package/contracts/api/README.md +4 -0
  252. package/contracts/api/endpoint-template/error.json +7 -0
  253. package/contracts/api/endpoint-template/example.json +11 -0
  254. package/contracts/api/endpoint-template/request.json +7 -0
  255. package/contracts/api/endpoint-template/response.json +6 -0
  256. package/contracts/api/endpoint-template/schema.json +9 -0
  257. package/contracts/events/README.md +4 -0
  258. package/contracts/events/event-template/error.json +4 -0
  259. package/contracts/events/event-template/example.json +6 -0
  260. package/contracts/events/event-template/request.json +6 -0
  261. package/contracts/events/event-template/response.json +3 -0
  262. package/contracts/events/event-template/schema.json +8 -0
  263. package/contracts/ui/README.md +4 -0
  264. package/contracts/ui/screen-template/error.json +4 -0
  265. package/contracts/ui/screen-template/example.json +7 -0
  266. package/contracts/ui/screen-template/request.json +4 -0
  267. package/contracts/ui/screen-template/response.json +4 -0
  268. package/contracts/ui/screen-template/schema.json +8 -0
  269. package/fixtures/agents/agent-fixture-template.md +14 -0
  270. package/fixtures/api/api-fixture-template.md +14 -0
  271. package/fixtures/images/image-fixture-template.md +14 -0
  272. package/fixtures/pipeline/pipeline-fixture-template.md +14 -0
  273. package/fixtures/render/render-fixture-template.md +14 -0
  274. package/fixtures/tts/tts-fixture-template.md +14 -0
  275. package/fixtures/videos/video-fixture-template.md +14 -0
  276. package/observability/agent-runs/agent-run-template.md +22 -0
  277. package/observability/decision-logs/decision-log-template.md +18 -0
  278. package/observability/failures/failure-template.md +18 -0
  279. package/package.json +8 -2
  280. package/playwright/e2e/e2e-template.md +4 -0
  281. package/playwright/fixtures/ui-fixture-template.md +4 -0
  282. package/playwright/smoke/smoke-template.md +4 -0
  283. package/playwright/visual/visual-regression-template.md +4 -0
  284. package/scripts/README.md +342 -0
  285. package/scripts/compact-context.sh +54 -0
  286. package/scripts/detect-changes.sh +152 -0
  287. package/scripts/install.sh +103 -69
  288. package/scripts/offload-log.sh +72 -0
  289. package/scripts/run-evals.sh +118 -52
  290. package/scripts/run-verify-loop.sh +75 -0
  291. package/scripts/uninstall.sh +81 -52
  292. package/scripts/verify.sh +380 -109
  293. package/tests/contracts/contract-template.test.md +10 -0
  294. package/tests/fixtures/fixture-index.md +4 -0
  295. package/tests/integration/integration-template.test.md +4 -0
  296. package/tests/unit/unit-template.test.md +4 -0
  297. package/.codex/skills/project-genesis-harness/SKILL.md +0 -727
  298. package/.codex/skills/project-genesis-harness/agents/openai.yaml +0 -9
  299. /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/planning-schema.md +0 -0
  300. /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/quality-rubric.md +0 -0
  301. /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/research-rubric.md +0 -0
  302. /package/.codex/skills/{project-genesis-harness → genesis-harness}/references/workflows.md +0 -0
  303. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/agents-template.md +0 -0
  304. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/api-docs-template.md +0 -0
  305. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/architecture-template.md +0 -0
  306. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/audit-template.md +0 -0
  307. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/bug-template.md +0 -0
  308. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/check-template.md +0 -0
  309. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/conventions-template.md +0 -0
  310. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/decision-template.md +0 -0
  311. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/design-template.md +0 -0
  312. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/escalation-template.md +0 -0
  313. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/feature-template.md +0 -0
  314. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/integrations-template.md +0 -0
  315. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/journeys-template.md +0 -0
  316. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/lessons-learned-template.md +0 -0
  317. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/observability-template.md +0 -0
  318. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/phase-template.md +0 -0
  319. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/pitfalls-template.md +0 -0
  320. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/planning-tree-template.md +0 -0
  321. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/project-template.md +0 -0
  322. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/quality-score-template.md +0 -0
  323. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/requirements-template.md +0 -0
  324. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/research-template.md +0 -0
  325. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/review-template.md +0 -0
  326. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/spec-changelog-template.md +0 -0
  327. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/stack-template.md +0 -0
  328. /package/.codex/skills/{project-genesis-harness → genesis-harness}/resources/verification-template.md +0 -0
@@ -0,0 +1,692 @@
1
+ # Breaking Change Propagation Playbook
2
+
3
+ ## Overview
4
+
5
+ **Scenario**: API field is removed or changed in incompatible way (breaking change)
6
+
7
+ **Complexity**: HIGH (requires manual review, migration strategy, backward compatibility considerations)
8
+
9
+ **Time**: 2-4 hours
10
+
11
+ **Manual Review**: Required (CRITICAL gate before propagation)
12
+
13
+ **Risk Level**: HIGH (can break production if not handled correctly)
14
+
15
+ ---
16
+
17
+ ## Example: Removing Field from API Response
18
+
19
+ Suppose API response loses field `avatar`:
20
+
21
+ ```diff
22
+ // OLD API response (v1)
23
+ {
24
+ "id": 123,
25
+ "name": "John Doe",
26
+ "avatar": "/avatars/john.jpg"
27
+ }
28
+
29
+ // NEW API response (v2)
30
+ {
31
+ "id": 123,
32
+ "name": "John Doe",
33
+ // "avatar" removed - client must migrate
34
+ }
35
+ ```
36
+
37
+ This is **BREAKING** because existing clients rely on `avatar` field.
38
+
39
+ ---
40
+
41
+ ## Pre-Propagation: CRITICAL REVIEW GATE
42
+
43
+ ### ⛔ STOP - Manual Review Required
44
+
45
+ **Do NOT auto-propagate breaking changes without this review.**
46
+
47
+ ### Review Checklist
48
+
49
+ - [ ] Why is this field being removed? (business justification)
50
+ - [ ] Who are the consumers? (internal clients, external API users)
51
+ - [ ] How many consumers affected? (1 or 100+?)
52
+ - [ ] Can we do this gradually? (deprecation period?)
53
+ - [ ] Do we need a migration period? (6 months? 1 year?)
54
+ - [ ] Backward compatibility possible? (keep old field but deprecated)
55
+ - [ ] Communication plan: When do consumers migrate by?
56
+
57
+ ### Decision: Which Strategy?
58
+
59
+ **Option A: Hard Break** (v2 breaking API)
60
+ - Remove field completely
61
+ - Old clients get error or field missing
62
+ - Requires immediate migration
63
+ - Timeline: All consumers migrate in 1-2 weeks
64
+
65
+ **Option B: Gradual Migration** (v1.5 → v2)
66
+ - Keep field for 6 months (deprecated)
67
+ - New field replaces it (e.g., `avatarUrl`)
68
+ - Clients migrate at their pace
69
+ - Timeline: All consumers migrate by end of year
70
+
71
+ **Option C: Parallel APIs** (v1 & v2 coexist)
72
+ - v1 API includes `avatar`
73
+ - v2 API replaces with `avatarUrl`
74
+ - Clients choose which version to use
75
+ - Timeline: Flexible, v1 sunset in 12 months
76
+
77
+ **Recommendation**: Choose Option B (gradual) for external APIs, Option A for internal
78
+
79
+ ### Record Decision
80
+
81
+ ```markdown
82
+ ## BREAKING CHANGE: Remove 'avatar' Field
83
+
84
+ **Decision**: Gradual Migration (Option B)
85
+
86
+ **Timeline**:
87
+ - v1.5 (Current): avatar field deprecated, avatarUrl added
88
+ - Migration Period: 6 months (now to Dec 31, 2026)
89
+ - v2.0 (Jan 1, 2027): avatar field removed completely
90
+
91
+ **Deprecation Notice**:
92
+ "The 'avatar' field is deprecated as of v1.5.
93
+ Use 'avatarUrl' instead.
94
+ The 'avatar' field will be removed in v2.0 (Jan 1, 2027)."
95
+
96
+ **Communication**:
97
+ - Email all API consumers on signup date
98
+ - Add deprecation warning to API docs
99
+ - Provide migration guide & code examples
100
+ - Track migration progress (which clients updated)
101
+
102
+ **Sign-Off**: Engineering Lead + Product Manager
103
+ ```
104
+
105
+ **Once approved**: Proceed with propagation.
106
+
107
+ ---
108
+
109
+ ## Step 1: Create Migration Guide (30 min)
110
+
111
+ Create `docs/migration-v1-to-v2.md`:
112
+
113
+ ```markdown
114
+ # Migration Guide: API v1 → v2
115
+
116
+ ## Overview
117
+
118
+ The API is evolving from v1 to v2 with some breaking changes.
119
+ This guide helps you migrate your client in minutes.
120
+
121
+ ## What Changed
122
+
123
+ ### Field Removed: `avatar`
124
+ - **Removed in**: v2.0 (January 1, 2027)
125
+ - **Deprecation period**: 6 months
126
+ - **Replacement**: Use `avatarUrl` field instead
127
+
128
+ ```diff
129
+ // v1 API Response
130
+ {
131
+ "id": 123,
132
+ "name": "John",
133
+ "avatar": "/avatars/john.jpg" // Deprecated
134
+ }
135
+
136
+ // v2 API Response
137
+ {
138
+ "id": 123,
139
+ "name": "John",
140
+ "avatarUrl": "https://cdn.example.com/avatars/john.jpg" // New
141
+ }
142
+ ```
143
+
144
+ ## Migration Steps
145
+
146
+ ### Step 1: Update Dependencies (5 min)
147
+
148
+ ```bash
149
+ npm update @example/api-client@1.5.0
150
+ ```
151
+
152
+ ### Step 2: Update Code - Before
153
+
154
+ ```javascript
155
+ // v1: Using deprecated avatar field
156
+ const user = await api.getUser(123);
157
+ console.log(user.avatar); // "/avatars/john.jpg"
158
+ ```
159
+
160
+ ### Step 3: Update Code - After
161
+
162
+ ```javascript
163
+ // v2: Using new avatarUrl field
164
+ const user = await api.getUser(123);
165
+ console.log(user.avatarUrl); // "https://cdn.example.com/avatars/john.jpg"
166
+ ```
167
+
168
+ ### Step 4: Find All Usages
169
+
170
+ ```bash
171
+ # Find all references to deprecated field
172
+ grep -r "\.avatar" src/
173
+ grep -r "'avatar'" src/
174
+ grep -r '"avatar"' src/
175
+ ```
176
+
177
+ ### Step 5: Update UI Components
178
+
179
+ ```javascript
180
+ // BEFORE
181
+ <img src={user.avatar} alt={user.name} />
182
+
183
+ // AFTER
184
+ <img src={user.avatarUrl} alt={user.name} />
185
+ ```
186
+
187
+ ## Testing
188
+
189
+ ```bash
190
+ # Run your tests with new field
191
+ npm test
192
+
193
+ # Verify all tests pass
194
+ ```
195
+
196
+ ## Timeline
197
+
198
+ - **Now**: Deprecation announced, 6-month migration period starts
199
+ - **Dec 15, 2026**: Deprecation warnings increase (last 2 weeks)
200
+ - **Jan 1, 2027**: v2.0 released, `avatar` field removed
201
+ - **After Jan 1**: Old clients will receive 400 error or field missing
202
+
203
+ ## Support
204
+
205
+ - Email: api-support@example.com
206
+ - Slack: #api-help
207
+ - Docs: https://docs.example.com/api/v2
208
+ - Migration Issues: GitHub Discussions
209
+ ```
210
+
211
+ ---
212
+
213
+ ## Step 2: Phase 2 - Update Tests (30 min)
214
+
215
+ ### 2a. Remove Test References to Deprecated Field
216
+
217
+ File: `tests/api.test.js`
218
+
219
+ ```javascript
220
+ // BEFORE - Testing deprecated field
221
+ test('should return user with avatar', async () => {
222
+ const user = await api.getUser(1);
223
+ expect(user.avatar).toBeDefined();
224
+ expect(user.avatar).toMatch(/^\/avatars\//);
225
+ });
226
+
227
+ // AFTER - Test removed (field no longer exists)
228
+ // ✅ Test deleted - avatar field no longer in API
229
+ ```
230
+
231
+ ### 2b. Add Tests for Deprecation Period
232
+
233
+ Add `tests/deprecation.test.js`:
234
+
235
+ ```javascript
236
+ describe('Deprecation: avatar field', () => {
237
+ test('should NOT include avatar field in v2 responses', async () => {
238
+ const user = await api.getUser(1);
239
+ expect(user).not.toHaveProperty('avatar');
240
+ });
241
+
242
+ test('should include NEW avatarUrl field instead', async () => {
243
+ const user = await api.getUser(1);
244
+ expect(user).toHaveProperty('avatarUrl');
245
+ });
246
+
247
+ test('should include deprecation warning in headers', async () => {
248
+ const response = await api.getUser(1);
249
+ expect(response.headers['x-deprecated-fields']).toBeDefined();
250
+ expect(response.headers['x-deprecated-fields']).toContain('avatar');
251
+ });
252
+ });
253
+ ```
254
+
255
+ ### 2c. Update Mock Data
256
+
257
+ ```javascript
258
+ // BEFORE
259
+ const mockUser = { id: 1, name: 'Alice', avatar: '/avatars/alice.jpg' };
260
+
261
+ // AFTER - Remove avatar, add avatarUrl
262
+ const mockUser = { id: 1, name: 'Alice', avatarUrl: 'https://cdn.example.com/avatars/alice.jpg' };
263
+ ```
264
+
265
+ ### 2d. Run Tests
266
+
267
+ ```bash
268
+ npm test -- tests/
269
+
270
+ # All tests pass? ✅
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Step 3: Phase 3 - Update Backend Implementation (30 min)
276
+
277
+ ### 3a. Remove Deprecated Field from Handler
278
+
279
+ File: `src/handlers/user.handler.js`
280
+
281
+ ```javascript
282
+ // BEFORE - Returning deprecated field
283
+ async function getUser(req, res) {
284
+ const user = await db.users.findById(req.params.id);
285
+ return res.json({
286
+ id: user.id,
287
+ name: user.name,
288
+ avatar: user.avatar_path // Deprecated - remove
289
+ });
290
+ }
291
+
292
+ // AFTER - Remove avatar, return avatarUrl
293
+ async function getUser(req, res) {
294
+ const user = await db.users.findById(req.params.id);
295
+ return res.json({
296
+ id: user.id,
297
+ name: user.name,
298
+ avatarUrl: user.avatar_url // New field
299
+ });
300
+ }
301
+ ```
302
+
303
+ ### 3b. Update Contract Schema
304
+
305
+ File: `contracts/api/response.json`
306
+
307
+ ```json
308
+ {
309
+ "type": "object",
310
+ "properties": {
311
+ "id": { "type": "integer" },
312
+ "name": { "type": "string" },
313
+ "avatarUrl": { // New field
314
+ "type": ["string", "null"],
315
+ "description": "URL to user avatar"
316
+ }
317
+ // avatar field removed
318
+ },
319
+ "required": ["id", "name"]
320
+ }
321
+ ```
322
+
323
+ ### 3c. Update API Docstring
324
+
325
+ ```javascript
326
+ /**
327
+ * GET /api/users/:id
328
+ *
329
+ * Returns user data (v2 format).
330
+ *
331
+ * BREAKING CHANGE (v2.0): Field 'avatar' removed.
332
+ * Use 'avatarUrl' instead.
333
+ *
334
+ * Migration guide: /docs/migration-v1-to-v2
335
+ * Deprecation period: Until January 1, 2027
336
+ *
337
+ * Response: { id, name, avatarUrl }
338
+ */
339
+ ```
340
+
341
+ ### 3d. Add Deprecation Header (v1 only)
342
+
343
+ If supporting v1 for compatibility period:
344
+
345
+ ```javascript
346
+ // v1 handler (deprecated)
347
+ app.get('/v1/users/:id', (req, res) => {
348
+ const user = await db.users.findById(req.params.id);
349
+ res.set('X-API-Version', '1.0');
350
+ res.set('X-Deprecated-Since', '2026-05-31');
351
+ res.set('X-Sunset', '2027-01-01');
352
+ res.set('X-Deprecated-Fields', 'avatar');
353
+ res.json({
354
+ id: user.id,
355
+ name: user.name,
356
+ avatar: user.avatar_path, // v1 still returns it
357
+ avatarUrl: user.avatar_url // v2 field preview
358
+ });
359
+ });
360
+
361
+ // v2 handler (current)
362
+ app.get('/v2/users/:id', (req, res) => {
363
+ const user = await db.users.findById(req.params.id);
364
+ res.set('X-API-Version', '2.0');
365
+ res.json({
366
+ id: user.id,
367
+ name: user.name,
368
+ avatarUrl: user.avatar_url // Only new field
369
+ });
370
+ });
371
+ ```
372
+
373
+ ### 3e. Validate Contract
374
+
375
+ ```bash
376
+ npm run validate:contracts
377
+
378
+ # Expected: Valid ✅
379
+ ```
380
+
381
+ ---
382
+
383
+ ## Step 4: Phase 4 - Update Client SDK (20 min)
384
+
385
+ ### 4a. Update Type Definitions
386
+
387
+ File: `types/api.ts`
388
+
389
+ ```typescript
390
+ // BEFORE
391
+ interface User {
392
+ id: number;
393
+ name: string;
394
+ avatar: string; // Deprecated
395
+ }
396
+
397
+ // AFTER
398
+ interface User {
399
+ id: number;
400
+ name: string;
401
+ avatarUrl: string | null; // New field
402
+ // avatar removed
403
+ }
404
+
405
+ // For v1 backward compatibility (optional)
406
+ interface UserV1 extends User {
407
+ avatar: string; // Deprecated - only in v1
408
+ }
409
+ ```
410
+
411
+ ### 4b. Update Client Methods
412
+
413
+ ```typescript
414
+ // Update method to return new type
415
+ async function fetchUser(id: number): Promise<User> {
416
+ const response = await fetch(`/api/users/${id}`);
417
+ return response.json(); // Now avatarUrl instead of avatar
418
+ }
419
+
420
+ // Provide helper for migration (optional)
421
+ function migrateUserToV2(userV1: UserV1): User {
422
+ return {
423
+ id: userV1.id,
424
+ name: userV1.name,
425
+ avatarUrl: userV1.avatar // Map old field to new
426
+ };
427
+ }
428
+ ```
429
+
430
+ ### 4c. Add Deprecation Warning
431
+
432
+ ```typescript
433
+ /**
434
+ * @deprecated The 'avatar' field is removed in v2.
435
+ * Use 'avatarUrl' instead.
436
+ * Migration: https://docs.example.com/migration-v1-to-v2
437
+ * Removal date: 2027-01-01
438
+ */
439
+ export interface UserV1 {
440
+ avatar: string;
441
+ }
442
+ ```
443
+
444
+ ### 4d: Type Check
445
+
446
+ ```bash
447
+ npm run tsc --noEmit
448
+
449
+ # No errors? ✅
450
+ ```
451
+
452
+ ---
453
+
454
+ ## Step 5: Phase 5 - Update E2E Tests (20 min)
455
+
456
+ ### 5a. Remove Tests for Deprecated Field
457
+
458
+ ```javascript
459
+ // BEFORE - Testing deprecated field
460
+ test('should display user avatar', async ({ page }) => {
461
+ await page.goto('/users/1');
462
+ expect(page.locator('[data-avatar]')).toBeVisible();
463
+ });
464
+
465
+ // AFTER - Test removed, feature uses new field
466
+ // ✅ Test deleted - avatar functionality replaced with avatarUrl
467
+ ```
468
+
469
+ ### 5b. Add Tests for New Field
470
+
471
+ ```javascript
472
+ test('should display user avatar using new avatarUrl field', async ({ page }) => {
473
+ await page.goto('/users/1');
474
+ const avatar = page.locator('[data-avatar-url]');
475
+ await expect(avatar).toBeVisible();
476
+ await expect(avatar).toHaveAttribute('src', /^https:\/\//);
477
+ });
478
+ ```
479
+
480
+ ### 5c. Run E2E Tests
481
+
482
+ ```bash
483
+ npm run test:e2e -- user.spec.ts
484
+
485
+ # All tests pass? ✅
486
+ ```
487
+
488
+ ---
489
+
490
+ ## Step 6: Validation (10 min)
491
+
492
+ ### 6a. Full Test Suite
493
+
494
+ ```bash
495
+ npm run test
496
+
497
+ # Phase 2, 3, 4, 5 all pass? ✅
498
+ ```
499
+
500
+ ### 6b. Breaking Change Validation
501
+
502
+ ```bash
503
+ # Verify old field is truly gone
504
+ npm run test:contracts -- --breakingChanges
505
+
506
+ # Should show: 'avatar' field removed (BREAKING)
507
+ ```
508
+
509
+ ### 6c. Migration Documentation
510
+
511
+ ```bash
512
+ # Verify migration guide exists and is complete
513
+ ls -la docs/migration-v1-to-v2.md
514
+
515
+ # Check content includes all scenarios
516
+ grep -i "migration steps" docs/migration-v1-to-v2.md
517
+ grep -i "timeline" docs/migration-v1-to-v2.md
518
+ ```
519
+
520
+ ---
521
+
522
+ ## Step 7: Communication (15 min)
523
+
524
+ ### 7a. Update SPEC_CHANGELOG.md
525
+
526
+ ```markdown
527
+ - 2026-05-31T14:30:00Z | BREAKING | Removed 'avatar' field from User response
528
+ Migration: Gradual deprecation period (6 months) then removal in v2.0
529
+ Timeline: Until January 1, 2027 to migrate
530
+ Migration guide: /docs/migration-v1-to-v2
531
+ Auto-updated phases: 2, 3, 4, 5
532
+ Requires: Manual consumer notification
533
+ ```
534
+
535
+ ### 7b. Notify Consumers
536
+
537
+ Create notification template:
538
+
539
+ ```
540
+ Subject: API Breaking Change: avatar field deprecation
541
+
542
+ Dear API Consumers,
543
+
544
+ Effective May 31, 2026, the 'avatar' field in the User API response is deprecated.
545
+
546
+ DEPRECATION PERIOD: Until January 1, 2027
547
+ ACTION: Migrate to use 'avatarUrl' field instead
548
+
549
+ Migration Guide: https://docs.example.com/migration-v1-to-v2
550
+
551
+ Questions? Contact: api-support@example.com
552
+
553
+ Best regards,
554
+ API Team
555
+ ```
556
+
557
+ ### 7c. Update API Documentation
558
+
559
+ - Add deprecation warning to API docs
560
+ - Link to migration guide
561
+ - Add upgrade timeline
562
+ - Provide code examples
563
+
564
+ ---
565
+
566
+ ## Step 8: Release Planning (30 min)
567
+
568
+ ### 8a. Version Strategy
569
+
570
+ - **v1.5.0**: Deprecation announced, new field available
571
+ - **v2.0.0**: Breaking change, old field removed
572
+
573
+ ### 8b. Release Notes
574
+
575
+ ```markdown
576
+ ## v2.0.0 - Breaking Changes Release
577
+
578
+ ### Breaking Changes
579
+ - REMOVED: User API 'avatar' field
580
+ - Replaced by: 'avatarUrl' field
581
+ - Migration guide: https://docs.example.com/migration-v1-to-v2
582
+ - Deprecation started: v1.5.0 (May 31, 2026)
583
+
584
+ ### Migration Required
585
+ All clients must migrate to use 'avatarUrl' before deploying v2.0.0
586
+
587
+ ### Support
588
+ - Migration assistance: api-support@example.com
589
+ - Slack channel: #api-help
590
+ ```
591
+
592
+ ### 8c: Rollback Strategy (if needed)
593
+
594
+ ```markdown
595
+ ## Rollback Procedure
596
+
597
+ If breaking change causes unexpected issues in production:
598
+
599
+ 1. Identify affected consumers (check logs)
600
+ 2. Revert v2.0.0 → v1.5.0:
601
+ ```bash
602
+ git revert <v2.0.0-tag>
603
+ npm publish
604
+ ```
605
+ 3. Notify consumers of reversion
606
+ 4. Schedule post-mortem (why did this break?)
607
+ 5. Fix and re-release as v2.0.1
608
+
609
+ **Timeline**: Rollback can be done in < 1 hour
610
+ ```
611
+
612
+ ---
613
+
614
+ ## Step 9: Sign-Off
615
+
616
+ - [ ] Migration guide written ✅
617
+ - [ ] Phase 2: Tests updated ✅
618
+ - [ ] Phase 3: Handler & contract updated ✅
619
+ - [ ] Phase 4: SDK types updated ✅
620
+ - [ ] Phase 5: E2E tests updated ✅
621
+ - [ ] All tests green ✅
622
+ - [ ] SPEC_CHANGELOG.md: Updated ✅
623
+ - [ ] Migration guide complete ✅
624
+ - [ ] Communication plan ready ✅
625
+ - [ ] Rollback strategy documented ✅
626
+ - [ ] Ready for code review ✅
627
+ - [ ] **ENGINEERING LEAD APPROVAL REQUIRED** ✅
628
+
629
+ ---
630
+
631
+ ## Common Issues & Recovery
632
+
633
+ ### Issue: Clients Break Immediately
634
+
635
+ **Cause**: Didn't provide deprecation period, broke in-flight requests
636
+
637
+ **Recovery**:
638
+ 1. Rollback to v1.5.0 immediately
639
+ 2. Restore the `avatar` field for backward compatibility
640
+ 3. Create longer deprecation period (6-12 months)
641
+ 4. Re-plan breaking change for future release
642
+
643
+ ### Issue: Some Clients Still Using Old Field
644
+
645
+ **Cause**: Deprecation communication missed some consumers
646
+
647
+ **Recovery**:
648
+ 1. Extend migration timeline (add 3 months)
649
+ 2. Provide tools to find field usage: `api-audit --field avatar`
650
+ 3. Reach out to non-compliant consumers directly
651
+ 4. Offer migration assistance
652
+
653
+ ### Issue: Downstream Services Depend on Old Field
654
+
655
+ **Cause**: Internal services also use the deprecated field
656
+
657
+ **Recovery**:
658
+ 1. Update internal services first (before public breaking change)
659
+ 2. Add feature flag: `use_avatarUrl` (allow gradual rollout)
660
+ 3. Test both code paths before removing old field
661
+ 4. Remove old field after internal services upgraded
662
+
663
+ ---
664
+
665
+ ## Time Breakdown
666
+
667
+ | Task | Time |
668
+ |------|------|
669
+ | Pre-propagation review & decision | 30 min |
670
+ | Create migration guide | 30 min |
671
+ | Phase 2: Update tests | 30 min |
672
+ | Phase 3: Update handler | 30 min |
673
+ | Phase 4: Update SDK | 20 min |
674
+ | Phase 5: Update E2E | 20 min |
675
+ | Validation & testing | 10 min |
676
+ | Communication & docs | 15 min |
677
+ | Release planning | 30 min |
678
+ | **Total** | **225 min (3.75 hours)** |
679
+
680
+ ---
681
+
682
+ ## Success Criteria
683
+
684
+ ✅ Migration guide is clear & comprehensive
685
+ ✅ All tests pass (Phase 2-5)
686
+ ✅ Breaking change is properly detected
687
+ ✅ Consumers notified with migration timeline
688
+ ✅ Deprecation period is sufficient (6+ months recommended)
689
+ ✅ Rollback procedure is documented
690
+ ✅ Engineering lead approved
691
+ ✅ Ready for release & communication
692
+