engineering-process 0.7.0__tar.gz → 0.9.0__tar.gz

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 (217) hide show
  1. {engineering_process-0.7.0/engineering_process.egg-info → engineering_process-0.9.0}/PKG-INFO +154 -27
  2. {engineering_process-0.7.0 → engineering_process-0.9.0}/PROCESS_IMPROVEMENT.md +8 -0
  3. {engineering_process-0.7.0 → engineering_process-0.9.0}/PRODUCTION_STANDARD.md +73 -0
  4. {engineering_process-0.7.0 → engineering_process-0.9.0}/README.md +152 -26
  5. {engineering_process-0.7.0 → engineering_process-0.9.0}/VERSIONING.md +126 -14
  6. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/__init__.py +1 -1
  7. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/adoption.py +5 -0
  8. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/artifact_attestation.py +20 -2
  9. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/bundles.py +21 -3
  10. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/cli.py +355 -4
  11. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/command_catalog.py +5 -0
  12. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/contracts.py +1533 -201
  13. engineering_process-0.9.0/engineering_process/distribution.py +261 -0
  14. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/distribution_verify.py +11 -0
  15. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/evidence.py +273 -5
  16. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/lifecycle.py +926 -30
  17. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/process_graph.py +15 -2
  18. engineering_process-0.9.0/engineering_process/publication.py +1981 -0
  19. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/release.py +23 -3
  20. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/release_candidate.py +86 -18
  21. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/remote_verification.py +18 -5
  22. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/requirements-release.txt +2 -0
  23. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/requirements-runtime.txt +1 -0
  24. engineering_process-0.9.0/engineering_process/skills.py +225 -0
  25. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/supplemental.py +14 -4
  26. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/syncing.py +191 -16
  27. engineering_process-0.9.0/engineering_process/transition.py +2606 -0
  28. {engineering_process-0.7.0 → engineering_process-0.9.0/engineering_process.egg-info}/PKG-INFO +154 -27
  29. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process.egg-info/SOURCES.txt +18 -0
  30. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process.egg-info/requires.txt +1 -0
  31. engineering_process-0.9.0/examples/authority-transition-evidence.json +42 -0
  32. engineering_process-0.9.0/examples/authority-transition-request.json +43 -0
  33. engineering_process-0.9.0/examples/automation-process-adoption-policy.json +36 -0
  34. engineering_process-0.9.0/examples/automation-process-adoption-proposal.json +174 -0
  35. engineering_process-0.9.0/examples/bootstrap-adoption-consumption.json +17 -0
  36. engineering_process-0.9.0/examples/bootstrap-adoption-intent.json +34 -0
  37. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/change.json +29 -1
  38. engineering_process-0.9.0/examples/protected-transition-policy.json +16 -0
  39. engineering_process-0.9.0/examples/release-authority-transition.json +32 -0
  40. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/review.json +4 -0
  41. {engineering_process-0.7.0 → engineering_process-0.9.0}/improvement-catalog.json +29 -0
  42. {engineering_process-0.7.0 → engineering_process-0.9.0}/process-graph.json +2 -2
  43. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/define-change-contract/SKILL.md +7 -0
  44. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/evolve-process/SKILL.md +19 -2
  45. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/finish-change/SKILL.md +4 -0
  46. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/implement-change/SKILL.md +18 -0
  47. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/publish-change/SKILL.md +48 -16
  48. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/review-change/SKILL.md +16 -0
  49. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/run-change/SKILL.md +19 -2
  50. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/run-change/references/execution.md +70 -2
  51. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/verify-change/SKILL.md +5 -0
  52. {engineering_process-0.7.0 → engineering_process-0.9.0}/pyproject.toml +14 -1
  53. engineering_process-0.9.0/release.json +87 -0
  54. engineering_process-0.9.0/schemas/authority-transition-evidence.schema.json +53 -0
  55. engineering_process-0.9.0/schemas/authority-transition-request.schema.json +67 -0
  56. engineering_process-0.9.0/schemas/automation-proposal-policy.schema.json +193 -0
  57. engineering_process-0.9.0/schemas/automation-proposal.schema.json +432 -0
  58. engineering_process-0.9.0/schemas/bootstrap-adoption-consumption.schema.json +23 -0
  59. engineering_process-0.9.0/schemas/bootstrap-adoption-intent.schema.json +32 -0
  60. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/change.schema.json +97 -2
  61. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/evidence-receipt.schema.json +43 -2
  62. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/lifecycle.schema.json +156 -2
  63. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/plan-decision-review-assignment.schema.json +25 -0
  64. engineering_process-0.9.0/schemas/protected-transition-policy.schema.json +23 -0
  65. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/recommendation.schema.json +1 -0
  66. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/release.schema.json +50 -4
  67. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/remote-verification-evidence.schema.json +31 -2
  68. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/remote-verification-request.schema.json +32 -3
  69. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/review.schema.json +82 -2
  70. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/supplemental-verification.schema.json +41 -2
  71. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/verification.schema.json +65 -1
  72. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_adoption.py +31 -0
  73. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_cli.py +1 -0
  74. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_contracts.py +700 -1
  75. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_distribution.py +62 -0
  76. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_evals.py +20 -0
  77. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_lifecycle.py +925 -0
  78. engineering_process-0.9.0/tests/test_publication.py +2232 -0
  79. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_candidate.py +71 -0
  80. engineering_process-0.9.0/tests/test_release_plan_continuation.py +115 -0
  81. engineering_process-0.9.0/tests/test_release_plan_review_dispatch.py +170 -0
  82. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_qualification.py +4 -1
  83. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_remote_verification_adapter.py +42 -0
  84. engineering_process-0.9.0/tests/test_review_context_handoff.py +150 -0
  85. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_runner.py +95 -0
  86. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_runtime.py +13 -0
  87. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_schemas.py +10 -0
  88. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_self_hosting.py +223 -0
  89. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_skills.py +66 -1
  90. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_syncing.py +54 -0
  91. engineering_process-0.9.0/tests/test_test_suite.py +496 -0
  92. engineering_process-0.9.0/tests/test_transition.py +1090 -0
  93. engineering_process-0.7.0/engineering_process/distribution.py +0 -113
  94. engineering_process-0.7.0/engineering_process/publication.py +0 -871
  95. engineering_process-0.7.0/engineering_process/skills.py +0 -118
  96. engineering_process-0.7.0/release.json +0 -50
  97. engineering_process-0.7.0/schemas/automation-proposal-policy.schema.json +0 -117
  98. engineering_process-0.7.0/schemas/automation-proposal.schema.json +0 -223
  99. engineering_process-0.7.0/tests/test_publication.py +0 -976
  100. engineering_process-0.7.0/tests/test_test_suite.py +0 -62
  101. {engineering_process-0.7.0 → engineering_process-0.9.0}/LICENSE +0 -0
  102. {engineering_process-0.7.0 → engineering_process-0.9.0}/MANIFEST.in +0 -0
  103. {engineering_process-0.7.0 → engineering_process-0.9.0}/bundles.json +0 -0
  104. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/__main__.py +0 -0
  105. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/_download_worker.py +0 -0
  106. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/_supervisor_posix.py +0 -0
  107. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/_supervisor_windows.py +0 -0
  108. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/_windows_job.py +0 -0
  109. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/bootstrap.py +0 -0
  110. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/bounded_process.py +0 -0
  111. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/diagnostics.py +0 -0
  112. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/environment.py +0 -0
  113. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/evidence_transport.py +0 -0
  114. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/git.py +0 -0
  115. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/git_attributes.py +0 -0
  116. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/helper_launch.py +0 -0
  117. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/impact.py +0 -0
  118. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/improvement.py +0 -0
  119. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/lifecycle_routes.py +0 -0
  120. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/managed.py +0 -0
  121. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/markdown.py +0 -0
  122. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/recommendation.py +0 -0
  123. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/requirements-build.txt +0 -0
  124. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/requirements-dev.txt +0 -0
  125. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/runner.py +0 -0
  126. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/runtime.py +0 -0
  127. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/supervision.py +0 -0
  128. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process/tooling.py +0 -0
  129. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process.egg-info/dependency_links.txt +0 -0
  130. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process.egg-info/entry_points.txt +0 -0
  131. {engineering_process-0.7.0 → engineering_process-0.9.0}/engineering_process.egg-info/top_level.txt +0 -0
  132. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/adoption-migration.json +0 -0
  133. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/automation-policy.json +0 -0
  134. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/automation-proposal-policy.json +0 -0
  135. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/automation-proposal.json +0 -0
  136. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/improvement-catalog.json +0 -0
  137. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/improvement-disposition.json +0 -0
  138. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/improvement-reproduction.json +0 -0
  139. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/improvement-resolution.json +0 -0
  140. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/improvement-signal.json +0 -0
  141. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/plan-decision-review-assignment.json +0 -0
  142. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/plan-decision-review.json +0 -0
  143. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/plan.json +0 -0
  144. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/project.json +0 -0
  145. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/recommendation-resolution.json +0 -0
  146. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/recommendation-review-assignment.json +0 -0
  147. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/recommendation-review.json +0 -0
  148. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/recommendation.json +0 -0
  149. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/release-change.json +0 -0
  150. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/release.json +0 -0
  151. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/remote-verification-evidence.json +0 -0
  152. {engineering_process-0.7.0 → engineering_process-0.9.0}/examples/remote-verification-request.json +0 -0
  153. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/assess-design/SKILL.md +0 -0
  154. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
  155. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
  156. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/change-api/SKILL.md +0 -0
  157. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/cross-repo-change/SKILL.md +0 -0
  158. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/design-module/SKILL.md +0 -0
  159. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
  160. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/implement-module/SKILL.md +0 -0
  161. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
  162. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
  163. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
  164. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/plan-change/SKILL.md +0 -0
  165. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/run-project-command/SKILL.md +0 -0
  166. {engineering_process-0.7.0 → engineering_process-0.9.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
  167. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/adoption-migration.schema.json +0 -0
  168. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/automation-policy.schema.json +0 -0
  169. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/improvement-catalog.schema.json +0 -0
  170. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/improvement-disposition.schema.json +0 -0
  171. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/improvement-reproduction.schema.json +0 -0
  172. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/improvement-resolution.schema.json +0 -0
  173. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/improvement-signal.schema.json +0 -0
  174. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/plan-decision-review.schema.json +0 -0
  175. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/plan.schema.json +0 -0
  176. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/process-graph.schema.json +0 -0
  177. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/process-lock.schema.json +0 -0
  178. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/project.schema.json +0 -0
  179. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/recommendation-resolution.schema.json +0 -0
  180. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/recommendation-review-assignment.schema.json +0 -0
  181. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/recommendation-review.schema.json +0 -0
  182. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/release-change.schema.json +0 -0
  183. {engineering_process-0.7.0 → engineering_process-0.9.0}/schemas/reviewer-attestation.schema.json +0 -0
  184. {engineering_process-0.7.0 → engineering_process-0.9.0}/setup.cfg +0 -0
  185. {engineering_process-0.7.0 → engineering_process-0.9.0}/templates/AGENTS.process.md +0 -0
  186. {engineering_process-0.7.0 → engineering_process-0.9.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
  187. {engineering_process-0.7.0 → engineering_process-0.9.0}/templates/adopt-process-windows-job.py +0 -0
  188. {engineering_process-0.7.0 → engineering_process-0.9.0}/templates/adopt-process.py +0 -0
  189. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_adoption_runner.py +0 -0
  190. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_artifact_attestation.py +0 -0
  191. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_bootstrap.py +0 -0
  192. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_bounded_process.py +0 -0
  193. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_bundles.py +0 -0
  194. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_completed_release_dispatch.py +0 -0
  195. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_completion_evidence_transport.py +0 -0
  196. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_diagnostics.py +0 -0
  197. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_distribution_verify.py +0 -0
  198. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_environment.py +0 -0
  199. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_impact.py +0 -0
  200. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_improvement.py +0 -0
  201. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_process_graph.py +0 -0
  202. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_process_install.py +0 -0
  203. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_publish_event.py +0 -0
  204. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_pypi_publication.py +0 -0
  205. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_recommendation.py +0 -0
  206. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release.py +0 -0
  207. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_candidate_boundary.py +0 -0
  208. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_completion_identity.py +0 -0
  209. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_evidence_restore.py +0 -0
  210. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_evidence_selection.py +0 -0
  211. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_release_preparation.py +0 -0
  212. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_remote_verification.py +0 -0
  213. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_source_checkout.py +0 -0
  214. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_supervision.py +0 -0
  215. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_supplemental.py +0 -0
  216. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_tooling.py +0 -0
  217. {engineering_process-0.7.0 → engineering_process-0.9.0}/tests/test_windows_job.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: engineering-process
3
- Version: 0.7.0
3
+ Version: 0.9.0
4
4
  Summary: Agent-neutral end-to-end engineering lifecycle and deterministic process CLI
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/phuongnse/engineering-process
@@ -19,6 +19,7 @@ Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: markdown-it-py==4.2.0
21
21
  Requires-Dist: mdurl==0.1.2
22
+ Requires-Dist: pyyaml==6.0.3
22
23
  Requires-Dist: regex==2026.7.19
23
24
  Provides-Extra: dev
24
25
  Requires-Dist: attrs==26.1.0; extra == "dev"
@@ -175,17 +176,18 @@ Renovate must install and verify a target authority before that target exists in
175
176
  checkout, and `processctl sync --check` compares those bytes with the pinned
176
177
  distribution.
177
178
 
178
- For an existing consumer, automation may prepare one unpublished adoption candidate,
179
- but the normal Renovate PR-first route is excluded from process-authority updates.
180
- The managed runner installs the target authority from the complete hash lock outside
181
- the checkout and atomically updates the process lock and managed assets before the
182
- lifecycle host publishes the completed candidate. If the consumer chooses or requires
183
- new project configuration, it adds
179
+ For an existing opted-in consumer, Renovate may prepare and publish one complete
180
+ process-adoption proposal before consumer-owner review. The managed runner installs
181
+ the target authority from the complete hash lock outside the checkout and atomically
182
+ updates the process lock and managed assets before PR creation. If the consumer
183
+ chooses or requires new project configuration, it adds
184
184
  `.process/adoption-migrations/<target-version>.json`; the installed target authority
185
185
  binds the source and target manifest digests, validates the complete target manifest,
186
186
  and updates `.process/project.json` in the same rollback transaction. Optional
187
- capabilities are never inferred. CI and a fresh isolated review context approve the
188
- fully materialized checkpoint; merge completes adoption and no post-merge sync runs.
187
+ capabilities are never inferred. Consumer CI and its chosen review approve the fully
188
+ materialized checkpoint. Renovate cannot auto-merge it; consumer-owner merge completes
189
+ adoption and no post-merge sync runs. Separately, an agent-host candidate created only
190
+ after lifecycle completion retains normal standing-policy auto-merge.
189
191
 
190
192
  The engineering-process producer repository separately owns its root
191
193
  `.gitattributes` policy so tracked text sources and distribution inputs are LF and
@@ -462,8 +464,13 @@ processctl change review submit --change-id issue-123 --report review.json
462
464
  ~~~
463
465
 
464
466
  `changes-requested` returns to `change implement`, which starts a new cycle and
465
- invalidates prior verification and approval. `approved` can advance only while the
466
- source still matches:
467
+ invalidates prior verification and approval. Under the bounded-loop authority this
468
+ is finite: the third changes-requested final-review cycle in one decision window
469
+ records an owner-decision escalation and blocks a fourth autonomous implementation
470
+ cycle. Finding renames, splits, paths, severities and invariant labels do not reset
471
+ the count. The existing decision-required assessment, challenged recommendation and
472
+ owner resolution may open one fresh three-cycle window; they never approve or remove
473
+ findings. `approved` can advance only while the source still matches:
467
474
 
468
475
  ~~~text
469
476
  processctl change finish --change-id issue-123 \
@@ -471,6 +478,43 @@ processctl change finish --change-id issue-123 \
471
478
  processctl change status --change-id issue-123
472
479
  ~~~
473
480
 
481
+ ### Process authority transition
482
+
483
+ A trust-root adoption uses a clean N-1 control checkout and a separate N+1 candidate
484
+ checkout. Register the exact transition before the target changes any candidate file,
485
+ then let the installed target emit only non-authoritative evidence:
486
+
487
+ ~~~text
488
+ processctl change transition register --project-root control \
489
+ --change-id adopt-process-0-9-0 --request transition-request.json \
490
+ --target-checkout target-tag-checkout --artifact-root target-artifacts \
491
+ --release-receipt target-evidence.json --artifact-attestation target-artifacts.json \
492
+ --actor worker --context worker-session --actor-kind agent
493
+
494
+ processctl authority-transition candidate-evidence \
495
+ --candidate-root candidate --target-process-root /installed/target \
496
+ --request transition-request.json --output candidate-evidence.json \
497
+ --actor candidate-materializer --context candidate-session --actor-kind agent
498
+
499
+ processctl change transition ingest --project-root control \
500
+ --change-id adopt-process-0-9-0 --candidate-root candidate \
501
+ --target-process-root /installed/target --evidence candidate-evidence.json \
502
+ --actor worker --context worker-session --actor-kind agent
503
+ ~~~
504
+
505
+ Every later `change verify`, `change remote`, `change review`, `change finish`, and
506
+ `change status` command supplies the same `--candidate-root`; lifecycle state and the
507
+ CLI authority remain in `control`. The target lock never becomes an ordinary bypass.
508
+ Transition verification, review, completion, remote evidence and receipt use their
509
+ transition-only schema majors.
510
+
511
+ The initial producer bootstrap is separate. Public 0.7.0 completes an exact intent
512
+ and protected-transition policy. A verifier checked out from the policy's fixed
513
+ protected-base feature commit validates the 0.7.0 bundle, immutable target release,
514
+ complete candidate and current base. Only its fixed
515
+ `authority-transition-completion` check may feed the policy-bound exact-head merge;
516
+ the successful merge consumes the authorization and activates the target.
517
+
474
518
  One worker owning specification, planning, implementation, and verification is the
475
519
  default topology. Bounded helpers are optional optimizations, not required roles;
476
520
  only review requires a separate actor and context.
@@ -578,7 +622,22 @@ drift repeats the assessment with a newly reserved reviewer context bound to the
578
622
  source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
579
623
  historical and cannot authorize the new cycle.
580
624
 
581
- When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
625
+ New finite-boundary changes use change schema 4. Their `reviewBoundary` is a closed
626
+ set of trust boundaries and fault rows; every row names its trigger or injection
627
+ boundary, expected outcome, criteria, proving profiles/evidence, and stop condition.
628
+ Every review finding is exactly `covered` or `contract-gap`. Covered findings bind
629
+ one declared row and carry that identity unchanged. Contract gaps bind no row, remain
630
+ open, and trigger owner decision on the first review. The registered contract is
631
+ never extended in place: after owner decision the current lifecycle stays
632
+ superseded, and a new contract must explicitly own the expanded boundary.
633
+
634
+ Review-loop decision windows start prospectively under the adopted authority; older
635
+ lifecycle artifacts are not replayed into a new counter. Resolved escalation chains
636
+ are retained separately from the mutable current plan-decision slot and are included
637
+ in completion and exported receipt evidence. This reuses existing reviewers and
638
+ recommendation authority; it adds no loop arbiter or reviewer-of-reviewer.
639
+
640
+ When a schema-3 or schema-4 change selects a project-owned `requiredEvidence` id, local profiles
582
641
  alone do not advance it to review. Create the exact no-authority request, run the
583
642
  project adapter, and ingest the complete supplemental set first:
584
643
 
@@ -600,7 +659,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
600
659
  service ids remain lifecycle evidence, not merge, release, deployment, or adoption
601
660
  authority.
602
661
 
603
- The canonical publication order is stricter than a PR-first workflow: implementation
662
+ The default agent-host publication order is stricter than a PR-first workflow: implementation
604
663
  and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
605
664
  agent or human semantically reviews that checkpoint; findings repeat implementation,
606
665
  complete verification, and fresh review until approved; `change finish` records
@@ -608,6 +667,9 @@ completion; only then may automation push and create the PR. Static policy/secre
608
667
  checks supplement this review and cannot generate a semantic verdict. With a valid
609
668
  standing policy, automation then waits for exact-head/current-base required checks and
610
669
  performs the configured merge without a separate human step.
670
+ An opted-in schema-3 Renovate process-adoption proposal is the explicit pre-review
671
+ publication exception; its complete candidate passes protected-base proposal
672
+ validation first, then consumer-owner review and manual terminal merge.
611
673
 
612
674
  Completed local evidence can be moved across machines or attached to a release as a
613
675
  bounded receipt. Export and validate it before any explicit prune:
@@ -686,13 +748,14 @@ without per-action confirmation.
686
748
  ### Controlled automation proposals
687
749
 
688
750
  Completion-before-publication remains the default. A consumer may enable an untrusted
689
- dependency proposal before completion only through a policy file already present on
690
- the protected base at `.process/automation-proposals.json`. The policy uses the
691
- shape in `examples/automation-proposal-policy.json`: current policy uses schema 2,
692
- selects the target and automation prefix, allows only `dependency-update`,
693
- requires the canonical `lifecycle-completion` check, and fixes every dangerous control
694
- to its fail-closed value. Absence, disablement, a branch-only policy, or a policy digest
695
- mismatch blocks the route.
751
+ automation proposal before completion only through a policy file already present on
752
+ the protected base at `.process/automation-proposals.json`. Schema 1 and schema 2 use
753
+ the shape in `examples/automation-proposal-policy.json`, allow only
754
+ `dependency-update`, require the canonical `lifecycle-completion` check, and retain
755
+ their released human-only and completion-gated meanings. Schema 3 uses
756
+ `examples/automation-process-adoption-policy.json` for the distinct
757
+ `process-adoption` route. Absence, disablement, a branch-only policy, or a policy
758
+ digest mismatch blocks every route.
696
759
 
697
760
  The immutable provider verifier emits one bounded
698
761
  `engineering-process-controlled-automation-proposal` report for the exact repository,
@@ -717,9 +780,9 @@ processctl publication validate-proposal --project-root . \
717
780
 
718
781
  This pass proves only that the proposal is safe to expose as untrusted input. It is
719
782
  not verification, semantic review, completion, or merge authority. Proposal checks
720
- remain read-only and receive no secrets; automerge, scripts, plugins, shell execution,
721
- privileged CI, process-authority, workflow, release, deployment, security-policy, and
722
- trust-root changes are excluded.
783
+ remain read-only and receive no secrets. Dependency proposals exclude automerge,
784
+ scripts, plugins, shell execution, privileged CI, process-authority, workflow,
785
+ release, deployment, security-policy, and trust-root changes.
723
786
 
724
787
  The required completion check is absent on every new proposal head. After the exact
725
788
  head completes the lifecycle, export its receipt, finalize the managed PR requirements,
@@ -747,6 +810,53 @@ after the protected base's standing automation policy and exact completion gate
747
810
  Provider tokens, check APIs, branch protection, retries, and repository selection
748
811
  remain consumer-owned adapter behavior.
749
812
 
813
+ Schema-3 process adoption has a different merge boundary. Renovate may create the PR
814
+ only after its allowlisted managed runner has materialized the complete target: direct
815
+ pin, cross-platform hash lock, process lock, managed files, any declared project
816
+ migration, and every immutable action pin. A protected-base immutable verifier is
817
+ fixed by repository and commit in the opt-in policy. Its evidence binds the producer
818
+ release/tag/commit/attestation, source and target authority versions and digests,
819
+ requirements bytes, exact base/head/path set, migration result, complete managed-file
820
+ set, and exact verifier identity. Workflow changes must be only the declared full-SHA
821
+ action-pin replacements with their release annotations.
822
+
823
+ The protected-base policy also fixes the producer repository. The report binds bounded
824
+ raw release-contract and distribution-attestation bytes, their digests, lifecycle
825
+ receipt identity, complete artifact hashes, and the verifier's exact target
826
+ materialization result. The adapter independently supplies a clean producer checkout
827
+ with the exact tag and origin plus downloaded release artifacts, lifecycle receipt,
828
+ and attestation; report bytes alone never pass. Existing release and
829
+ artifact-attestation validators resolve those objects before the target distribution
830
+ is compared with the complete consumer materialization. Validation also requires the
831
+ target wheel hash in the committed requirements lock and every use of that producer action
832
+ across the complete regular-workflow tree; the protected base must be an ancestor and
833
+ workflow mode may not change. Workflow semantics are read with the pinned maintained
834
+ PyYAML safe loader; the process does not maintain a substitute YAML scanner.
835
+
836
+ For schema 3, add these independently resolved inputs to `validate-proposal`:
837
+
838
+ ~~~text
839
+ --producer-root <clean-release-checkout> \
840
+ --producer-artifact-root <downloaded-release-artifacts> \
841
+ --producer-receipt <release-lifecycle-receipt> \
842
+ --producer-attestation <distribution-attestation>
843
+ ~~~
844
+
845
+ The schema fixes `automerge` to false, `consumerOwnerMergeRequired` to true, and
846
+ `postMergeMutation` to false. `publication validate-proposal-completion` always rejects
847
+ this kind: lifecycle completion, standing automation, provider state, and a successful
848
+ proposal check cannot convert it to automatic merge. The consumer chooses project
849
+ configuration, commands, verification, review method, and whether to merge. Its owner
850
+ manually merges the reviewed PR; that merge is the terminal adoption cutover and no
851
+ post-merge synchronization runs.
852
+
853
+ This does not alter the ordinary agent-host route. When an agent host completes the
854
+ full lifecycle before it creates a source or adoption PR, the completed exact head may
855
+ still auto-merge under the protected base's standing policy. Origin and publication
856
+ state select the route: an agent-host completed PR is not reclassified as a Renovate
857
+ proposal, and a Renovate process-adoption proposal never inherits completed-source
858
+ auto-merge authority.
859
+
750
860
  ## Trust boundary
751
861
 
752
862
  The CLI proves structural separation: reviewer actor id and context id must both be
@@ -771,10 +881,27 @@ carried findings; the attesting host or human boundary, not local process state,
771
881
  authenticates who produced it.
772
882
 
773
883
  The producer release workflows implement the same host-neutral chain with explicit
774
- artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle;
775
- `release-candidate.yml` restores it and runs `change start`, `change plan`,
776
- `change implement`, and every required `change verify`; the resulting
777
- `engineering-process-review-required` event names the exact artifact and checkpoint.
884
+ artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle.
885
+ For an ordinary governed Release, `release-candidate.yml` restores it and runs
886
+ `change start`, `change plan`, `change implement`, and every required `change verify`;
887
+ the resulting `engineering-process-review-required` event names the exact artifact
888
+ and checkpoint. The one `authority-transition-bootstrap` Release instead contains an
889
+ authored schema-3 plan readable by immutable public 0.7. The initial workflow runs
890
+ `change start`, `change plan`, and `change decision start`, then emits
891
+ `engineering-process-plan-review-required` without implementing the candidate. A
892
+ fresh read-only plan reviewer returns the exact assigned report to
893
+ `release-plan-approval.yml`; that protected-main callback authenticates the producing
894
+ workflow path, protected-base SHA, run id and attempt before restoring the same source
895
+ and lifecycle. The provider handoff carries the id and attempt together as the
896
+ required `plannedRun` object so every identity remains explicit without exceeding
897
+ GitHub's ten-property `client_payload` limit. A protected-base adapter renders and
898
+ validates that bounded event before the provider call. It submits the report,
899
+ implements, verifies, and emits the ordinary
900
+ source-review handoff. A separate bounded `needs: continue`, `always()` cleanup job
901
+ runs on another runner after primary-job success, failure, timeout, or interruption;
902
+ after artifact resolution it preserves bounded diagnostics, consumes and reconciles
903
+ the single-use planned artifact, and makes a retry require a fresh planned run and
904
+ assignment. It cannot finish, publish, or merge the Release.
778
905
  The consumer-selected host restores that lifecycle, chooses an agent or human,
779
906
  registers the assignment, submits the exact report, resolves any finding loop, runs
780
907
  `change finish`, and exports completion evidence. It sends only that bounded
@@ -97,6 +97,14 @@ with the same reusable class and `activeChangeId` as the selected lifecycle. Rel
97
97
  PR materialization resolves only entries whose active change is in the exact release
98
98
  change set.
99
99
 
100
+ Repeated friction is also counted at the lifecycle boundary. Three
101
+ changes-requested final-review cycles in one prospective decision window are one
102
+ owner-escalation class even when findings are renamed, split, moved, or assigned new
103
+ local invariant ids. Core blocks the next implementation cycle and preserves the
104
+ complete chain. For a finite-boundary contract, an observed failure outside every
105
+ declared row is a contract gap on its first review and requires a superseding change;
106
+ it cannot be closed through another local-fix label.
107
+
100
108
  ## Release and adoption
101
109
 
102
110
  Producer completion, producer release, consumer adoption, and consumer reproduction
@@ -143,6 +143,22 @@ evidence. Reviewer-of-reviewer, meta-assessment, assessment-of-assessment,
143
143
  policy-for-policy, dynamically generated approval chains, and generic workflow
144
144
  engines are outside the portable contract.
145
145
 
146
+ Correction autonomy is finite. Under the adopted bounded-loop authority, three
147
+ distinct final-review cycles with changes-requested in one decision window trigger a
148
+ durable owner-decision escalation and block a fourth implementation cycle. Counting
149
+ is independent of finding names, invariant labels, paths, severities and splits. The
150
+ stop preserves every finding and failed quality assessment; it never creates
151
+ approval. Recovery reuses the existing decision-required plan assessment,
152
+ independently challenged recommendation and explicit owner resolution. A resolved
153
+ covered-boundary decision opens one fresh window; a contract-gap decision supersedes
154
+ the lifecycle and requires a new immutable contract.
155
+
156
+ New finite-boundary contracts enumerate closed fault rows with trigger or injection
157
+ boundary, expected outcome, criteria, proof and stop condition. Every finding is
158
+ exactly covered by one row or is a contract gap. Review does not expand the model by
159
+ inventing adjacent instruction-level injection points, and it never hides an observed
160
+ gap as out of scope. Historical artifacts are not retroactively counted.
161
+
146
162
  A material owner decision derives recommendation eligibility before optimization.
147
163
  Every option assesses every governing hard invariant and references only proven or
148
164
  explicitly unproven assumptions. Any violated invariant makes the option invalid; any
@@ -164,6 +180,15 @@ release, deployment, or adoption authority.
164
180
 
165
181
  ## Resource and generated-state policy
166
182
 
183
+ Before implementing a standard format, protocol, parser, serializer, cryptographic
184
+ primitive, or platform integration, evaluate maintained dependencies and supported
185
+ tools at the owning boundary. Prefer a mature dependency when it materially reduces
186
+ custom semantics and satisfies compatibility, licensing, supply-chain, portability,
187
+ and resource-bound requirements; add it through the project's managed dependency and
188
+ lock flow. A custom implementation requires concrete evidence that available
189
+ dependencies cannot meet the accepted contract. Do not recreate a mature standard
190
+ merely to avoid proposing or installing a useful dependency.
191
+
167
192
  Every operation over repository-controlled or remote input has explicit limits for
168
193
  time, count, individual item size, aggregate size, output, and process descendants.
169
194
  Limits fail closed and have regression coverage for success, failure, timeout, and
@@ -177,6 +202,54 @@ authority, and shares one rollback boundary with the process lock and managed as
177
202
  Optional capabilities are never inferred, while configuration required by the target
178
203
  authority blocks adoption when it is missing or invalid.
179
204
 
205
+ A self-hosted authority transition keeps the governing and candidate workspaces
206
+ separate. N-1 owns lifecycle state and every authoritative decision; N+1 output is
207
+ bounded untrusted input. The pre-registered request fixes source and target authority,
208
+ release provenance, base, paths, migration, selected assets and expiry. Transition
209
+ verification recomputes the clean candidate commit, tree, workspace, lock, hash graph,
210
+ managed distribution and action-pin set. A protected-transition policy is a separate
211
+ schema-1 mutation grant: it fixes the source-owned verifier commit, protected workflow,
212
+ check context and App identity, exact current base and head, target, required checks, no post-merge
213
+ mutation, and one-use protected auto-merge. Target or candidate code can never
214
+ interpret the authorization that activates itself.
215
+
216
+ Transition artifact schemas and portable contract validation share one serialized
217
+ shape boundary. Operational entrypoints additionally enforce cross-field relations
218
+ that standard JSON Schema cannot represent. Those semantic checks are mandatory at
219
+ registration, evidence ingestion, protected validation and terminal consumption; a
220
+ shape-only validation never grants authority. Candidate evidence includes observed
221
+ apply/check/idempotence trees and an after-write rollback probe executed in disposable
222
+ worktrees under a bounded target process.
223
+ Repository identity comes from deterministic provider service evidence resolved by
224
+ the existing project adapter: repository/release/tag/asset ids and URLs, immutable
225
+ release state, peeled tag commit and artifact digests are pre-bound by canonical
226
+ digest. Mutable local Git remote configuration is never repository provenance, and
227
+ the provider adapter gains no acceptance authority.
228
+
229
+ Proposal merge authority derives from proposal origin and publication state. An
230
+ agent-host review object created only after full lifecycle completion may use standing
231
+ policy auto-merge for its exact approved head. A Renovate `process-adoption` proposal
232
+ is created before consumer-owner review and must instead fix automerge false,
233
+ `consumerOwnerMergeRequired` true, and post-merge mutation false. Lifecycle
234
+ completion, standing policy, provider state, and successful static checks never move
235
+ that proposal onto the agent-host route. The consumer owns review and manually
236
+ authorizes merge; merge is the terminal cutover.
237
+
238
+ Before candidate-owned commands, a protected-base immutable verifier independently
239
+ binds the actual base and exact head, producer release/tag/commit/attestation, source
240
+ and target process identities, requirements bytes, process lock, migration result,
241
+ complete selected managed-file set, grouped full-SHA action-pin-only workflow delta,
242
+ and verifier identity. Producer and verifier repositories are protected-base owned;
243
+ report-controlled release claims never authenticate themselves. A separately supplied
244
+ clean tagged producer checkout, artifacts, receipt, and attestation pass the existing
245
+ release/attestation validators and exact target synchronization. Base must be
246
+ an ancestor of head, and every producer use in the regular-workflow tree moves as one
247
+ unchanged-mode pin group. Partial, stale, inferred, unauthorized, or post-merge-dependent
248
+ candidates fail closed. This portable boundary reuses ordinary Renovate generation,
249
+ managed adoption, consumer CI, review and branch protection. It does not introduce a
250
+ reviewer host, daemon, scheduler, generic workflow engine, dynamically generated
251
+ approval chain, meta-assessment, or reviewer-of-reviewer layer.
252
+
180
253
  Released serialized contracts are never tightened in place. A new resource bound or
181
254
  meaning-changing requirement uses a new integer schema major with explicit migration;
182
255
  historical readers retain their published behavior. A new optional capability may
@@ -140,17 +140,18 @@ Renovate must install and verify a target authority before that target exists in
140
140
  checkout, and `processctl sync --check` compares those bytes with the pinned
141
141
  distribution.
142
142
 
143
- For an existing consumer, automation may prepare one unpublished adoption candidate,
144
- but the normal Renovate PR-first route is excluded from process-authority updates.
145
- The managed runner installs the target authority from the complete hash lock outside
146
- the checkout and atomically updates the process lock and managed assets before the
147
- lifecycle host publishes the completed candidate. If the consumer chooses or requires
148
- new project configuration, it adds
143
+ For an existing opted-in consumer, Renovate may prepare and publish one complete
144
+ process-adoption proposal before consumer-owner review. The managed runner installs
145
+ the target authority from the complete hash lock outside the checkout and atomically
146
+ updates the process lock and managed assets before PR creation. If the consumer
147
+ chooses or requires new project configuration, it adds
149
148
  `.process/adoption-migrations/<target-version>.json`; the installed target authority
150
149
  binds the source and target manifest digests, validates the complete target manifest,
151
150
  and updates `.process/project.json` in the same rollback transaction. Optional
152
- capabilities are never inferred. CI and a fresh isolated review context approve the
153
- fully materialized checkpoint; merge completes adoption and no post-merge sync runs.
151
+ capabilities are never inferred. Consumer CI and its chosen review approve the fully
152
+ materialized checkpoint. Renovate cannot auto-merge it; consumer-owner merge completes
153
+ adoption and no post-merge sync runs. Separately, an agent-host candidate created only
154
+ after lifecycle completion retains normal standing-policy auto-merge.
154
155
 
155
156
  The engineering-process producer repository separately owns its root
156
157
  `.gitattributes` policy so tracked text sources and distribution inputs are LF and
@@ -427,8 +428,13 @@ processctl change review submit --change-id issue-123 --report review.json
427
428
  ~~~
428
429
 
429
430
  `changes-requested` returns to `change implement`, which starts a new cycle and
430
- invalidates prior verification and approval. `approved` can advance only while the
431
- source still matches:
431
+ invalidates prior verification and approval. Under the bounded-loop authority this
432
+ is finite: the third changes-requested final-review cycle in one decision window
433
+ records an owner-decision escalation and blocks a fourth autonomous implementation
434
+ cycle. Finding renames, splits, paths, severities and invariant labels do not reset
435
+ the count. The existing decision-required assessment, challenged recommendation and
436
+ owner resolution may open one fresh three-cycle window; they never approve or remove
437
+ findings. `approved` can advance only while the source still matches:
432
438
 
433
439
  ~~~text
434
440
  processctl change finish --change-id issue-123 \
@@ -436,6 +442,43 @@ processctl change finish --change-id issue-123 \
436
442
  processctl change status --change-id issue-123
437
443
  ~~~
438
444
 
445
+ ### Process authority transition
446
+
447
+ A trust-root adoption uses a clean N-1 control checkout and a separate N+1 candidate
448
+ checkout. Register the exact transition before the target changes any candidate file,
449
+ then let the installed target emit only non-authoritative evidence:
450
+
451
+ ~~~text
452
+ processctl change transition register --project-root control \
453
+ --change-id adopt-process-0-9-0 --request transition-request.json \
454
+ --target-checkout target-tag-checkout --artifact-root target-artifacts \
455
+ --release-receipt target-evidence.json --artifact-attestation target-artifacts.json \
456
+ --actor worker --context worker-session --actor-kind agent
457
+
458
+ processctl authority-transition candidate-evidence \
459
+ --candidate-root candidate --target-process-root /installed/target \
460
+ --request transition-request.json --output candidate-evidence.json \
461
+ --actor candidate-materializer --context candidate-session --actor-kind agent
462
+
463
+ processctl change transition ingest --project-root control \
464
+ --change-id adopt-process-0-9-0 --candidate-root candidate \
465
+ --target-process-root /installed/target --evidence candidate-evidence.json \
466
+ --actor worker --context worker-session --actor-kind agent
467
+ ~~~
468
+
469
+ Every later `change verify`, `change remote`, `change review`, `change finish`, and
470
+ `change status` command supplies the same `--candidate-root`; lifecycle state and the
471
+ CLI authority remain in `control`. The target lock never becomes an ordinary bypass.
472
+ Transition verification, review, completion, remote evidence and receipt use their
473
+ transition-only schema majors.
474
+
475
+ The initial producer bootstrap is separate. Public 0.7.0 completes an exact intent
476
+ and protected-transition policy. A verifier checked out from the policy's fixed
477
+ protected-base feature commit validates the 0.7.0 bundle, immutable target release,
478
+ complete candidate and current base. Only its fixed
479
+ `authority-transition-completion` check may feed the policy-bound exact-head merge;
480
+ the successful merge consumes the authorization and activates the target.
481
+
439
482
  One worker owning specification, planning, implementation, and verification is the
440
483
  default topology. Bounded helpers are optional optimizations, not required roles;
441
484
  only review requires a separate actor and context.
@@ -543,7 +586,22 @@ drift repeats the assessment with a newly reserved reviewer context bound to the
543
586
  source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
544
587
  historical and cannot authorize the new cycle.
545
588
 
546
- When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
589
+ New finite-boundary changes use change schema 4. Their `reviewBoundary` is a closed
590
+ set of trust boundaries and fault rows; every row names its trigger or injection
591
+ boundary, expected outcome, criteria, proving profiles/evidence, and stop condition.
592
+ Every review finding is exactly `covered` or `contract-gap`. Covered findings bind
593
+ one declared row and carry that identity unchanged. Contract gaps bind no row, remain
594
+ open, and trigger owner decision on the first review. The registered contract is
595
+ never extended in place: after owner decision the current lifecycle stays
596
+ superseded, and a new contract must explicitly own the expanded boundary.
597
+
598
+ Review-loop decision windows start prospectively under the adopted authority; older
599
+ lifecycle artifacts are not replayed into a new counter. Resolved escalation chains
600
+ are retained separately from the mutable current plan-decision slot and are included
601
+ in completion and exported receipt evidence. This reuses existing reviewers and
602
+ recommendation authority; it adds no loop arbiter or reviewer-of-reviewer.
603
+
604
+ When a schema-3 or schema-4 change selects a project-owned `requiredEvidence` id, local profiles
547
605
  alone do not advance it to review. Create the exact no-authority request, run the
548
606
  project adapter, and ingest the complete supplemental set first:
549
607
 
@@ -565,7 +623,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
565
623
  service ids remain lifecycle evidence, not merge, release, deployment, or adoption
566
624
  authority.
567
625
 
568
- The canonical publication order is stricter than a PR-first workflow: implementation
626
+ The default agent-host publication order is stricter than a PR-first workflow: implementation
569
627
  and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
570
628
  agent or human semantically reviews that checkpoint; findings repeat implementation,
571
629
  complete verification, and fresh review until approved; `change finish` records
@@ -573,6 +631,9 @@ completion; only then may automation push and create the PR. Static policy/secre
573
631
  checks supplement this review and cannot generate a semantic verdict. With a valid
574
632
  standing policy, automation then waits for exact-head/current-base required checks and
575
633
  performs the configured merge without a separate human step.
634
+ An opted-in schema-3 Renovate process-adoption proposal is the explicit pre-review
635
+ publication exception; its complete candidate passes protected-base proposal
636
+ validation first, then consumer-owner review and manual terminal merge.
576
637
 
577
638
  Completed local evidence can be moved across machines or attached to a release as a
578
639
  bounded receipt. Export and validate it before any explicit prune:
@@ -651,13 +712,14 @@ without per-action confirmation.
651
712
  ### Controlled automation proposals
652
713
 
653
714
  Completion-before-publication remains the default. A consumer may enable an untrusted
654
- dependency proposal before completion only through a policy file already present on
655
- the protected base at `.process/automation-proposals.json`. The policy uses the
656
- shape in `examples/automation-proposal-policy.json`: current policy uses schema 2,
657
- selects the target and automation prefix, allows only `dependency-update`,
658
- requires the canonical `lifecycle-completion` check, and fixes every dangerous control
659
- to its fail-closed value. Absence, disablement, a branch-only policy, or a policy digest
660
- mismatch blocks the route.
715
+ automation proposal before completion only through a policy file already present on
716
+ the protected base at `.process/automation-proposals.json`. Schema 1 and schema 2 use
717
+ the shape in `examples/automation-proposal-policy.json`, allow only
718
+ `dependency-update`, require the canonical `lifecycle-completion` check, and retain
719
+ their released human-only and completion-gated meanings. Schema 3 uses
720
+ `examples/automation-process-adoption-policy.json` for the distinct
721
+ `process-adoption` route. Absence, disablement, a branch-only policy, or a policy
722
+ digest mismatch blocks every route.
661
723
 
662
724
  The immutable provider verifier emits one bounded
663
725
  `engineering-process-controlled-automation-proposal` report for the exact repository,
@@ -682,9 +744,9 @@ processctl publication validate-proposal --project-root . \
682
744
 
683
745
  This pass proves only that the proposal is safe to expose as untrusted input. It is
684
746
  not verification, semantic review, completion, or merge authority. Proposal checks
685
- remain read-only and receive no secrets; automerge, scripts, plugins, shell execution,
686
- privileged CI, process-authority, workflow, release, deployment, security-policy, and
687
- trust-root changes are excluded.
747
+ remain read-only and receive no secrets. Dependency proposals exclude automerge,
748
+ scripts, plugins, shell execution, privileged CI, process-authority, workflow,
749
+ release, deployment, security-policy, and trust-root changes.
688
750
 
689
751
  The required completion check is absent on every new proposal head. After the exact
690
752
  head completes the lifecycle, export its receipt, finalize the managed PR requirements,
@@ -712,6 +774,53 @@ after the protected base's standing automation policy and exact completion gate
712
774
  Provider tokens, check APIs, branch protection, retries, and repository selection
713
775
  remain consumer-owned adapter behavior.
714
776
 
777
+ Schema-3 process adoption has a different merge boundary. Renovate may create the PR
778
+ only after its allowlisted managed runner has materialized the complete target: direct
779
+ pin, cross-platform hash lock, process lock, managed files, any declared project
780
+ migration, and every immutable action pin. A protected-base immutable verifier is
781
+ fixed by repository and commit in the opt-in policy. Its evidence binds the producer
782
+ release/tag/commit/attestation, source and target authority versions and digests,
783
+ requirements bytes, exact base/head/path set, migration result, complete managed-file
784
+ set, and exact verifier identity. Workflow changes must be only the declared full-SHA
785
+ action-pin replacements with their release annotations.
786
+
787
+ The protected-base policy also fixes the producer repository. The report binds bounded
788
+ raw release-contract and distribution-attestation bytes, their digests, lifecycle
789
+ receipt identity, complete artifact hashes, and the verifier's exact target
790
+ materialization result. The adapter independently supplies a clean producer checkout
791
+ with the exact tag and origin plus downloaded release artifacts, lifecycle receipt,
792
+ and attestation; report bytes alone never pass. Existing release and
793
+ artifact-attestation validators resolve those objects before the target distribution
794
+ is compared with the complete consumer materialization. Validation also requires the
795
+ target wheel hash in the committed requirements lock and every use of that producer action
796
+ across the complete regular-workflow tree; the protected base must be an ancestor and
797
+ workflow mode may not change. Workflow semantics are read with the pinned maintained
798
+ PyYAML safe loader; the process does not maintain a substitute YAML scanner.
799
+
800
+ For schema 3, add these independently resolved inputs to `validate-proposal`:
801
+
802
+ ~~~text
803
+ --producer-root <clean-release-checkout> \
804
+ --producer-artifact-root <downloaded-release-artifacts> \
805
+ --producer-receipt <release-lifecycle-receipt> \
806
+ --producer-attestation <distribution-attestation>
807
+ ~~~
808
+
809
+ The schema fixes `automerge` to false, `consumerOwnerMergeRequired` to true, and
810
+ `postMergeMutation` to false. `publication validate-proposal-completion` always rejects
811
+ this kind: lifecycle completion, standing automation, provider state, and a successful
812
+ proposal check cannot convert it to automatic merge. The consumer chooses project
813
+ configuration, commands, verification, review method, and whether to merge. Its owner
814
+ manually merges the reviewed PR; that merge is the terminal adoption cutover and no
815
+ post-merge synchronization runs.
816
+
817
+ This does not alter the ordinary agent-host route. When an agent host completes the
818
+ full lifecycle before it creates a source or adoption PR, the completed exact head may
819
+ still auto-merge under the protected base's standing policy. Origin and publication
820
+ state select the route: an agent-host completed PR is not reclassified as a Renovate
821
+ proposal, and a Renovate process-adoption proposal never inherits completed-source
822
+ auto-merge authority.
823
+
715
824
  ## Trust boundary
716
825
 
717
826
  The CLI proves structural separation: reviewer actor id and context id must both be
@@ -736,10 +845,27 @@ carried findings; the attesting host or human boundary, not local process state,
736
845
  authenticates who produced it.
737
846
 
738
847
  The producer release workflows implement the same host-neutral chain with explicit
739
- artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle;
740
- `release-candidate.yml` restores it and runs `change start`, `change plan`,
741
- `change implement`, and every required `change verify`; the resulting
742
- `engineering-process-review-required` event names the exact artifact and checkpoint.
848
+ artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle.
849
+ For an ordinary governed Release, `release-candidate.yml` restores it and runs
850
+ `change start`, `change plan`, `change implement`, and every required `change verify`;
851
+ the resulting `engineering-process-review-required` event names the exact artifact
852
+ and checkpoint. The one `authority-transition-bootstrap` Release instead contains an
853
+ authored schema-3 plan readable by immutable public 0.7. The initial workflow runs
854
+ `change start`, `change plan`, and `change decision start`, then emits
855
+ `engineering-process-plan-review-required` without implementing the candidate. A
856
+ fresh read-only plan reviewer returns the exact assigned report to
857
+ `release-plan-approval.yml`; that protected-main callback authenticates the producing
858
+ workflow path, protected-base SHA, run id and attempt before restoring the same source
859
+ and lifecycle. The provider handoff carries the id and attempt together as the
860
+ required `plannedRun` object so every identity remains explicit without exceeding
861
+ GitHub's ten-property `client_payload` limit. A protected-base adapter renders and
862
+ validates that bounded event before the provider call. It submits the report,
863
+ implements, verifies, and emits the ordinary
864
+ source-review handoff. A separate bounded `needs: continue`, `always()` cleanup job
865
+ runs on another runner after primary-job success, failure, timeout, or interruption;
866
+ after artifact resolution it preserves bounded diagnostics, consumes and reconciles
867
+ the single-use planned artifact, and makes a retry require a fresh planned run and
868
+ assignment. It cannot finish, publish, or merge the Release.
743
869
  The consumer-selected host restores that lifecycle, chooses an agent or human,
744
870
  registers the assignment, submits the exact report, resolves any finding loop, runs
745
871
  `change finish`, and exports completion evidence. It sends only that bounded