engineering-process 0.6.1__tar.gz → 0.8.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 (200) hide show
  1. {engineering_process-0.6.1/engineering_process.egg-info → engineering_process-0.8.0}/PKG-INFO +125 -27
  2. {engineering_process-0.6.1 → engineering_process-0.8.0}/PRODUCTION_STANDARD.md +61 -0
  3. {engineering_process-0.6.1 → engineering_process-0.8.0}/README.md +123 -26
  4. {engineering_process-0.6.1 → engineering_process-0.8.0}/VERSIONING.md +89 -14
  5. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/__init__.py +1 -1
  6. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/bundles.py +21 -3
  7. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/cli.py +163 -1
  8. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/command_catalog.py +3 -0
  9. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/contracts.py +1059 -66
  10. engineering_process-0.8.0/engineering_process/distribution.py +261 -0
  11. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/distribution_verify.py +4 -0
  12. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/evidence.py +324 -2
  13. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/lifecycle.py +733 -24
  14. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/process_graph.py +28 -5
  15. engineering_process-0.8.0/engineering_process/publication.py +1981 -0
  16. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/release_candidate.py +193 -3
  17. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/requirements-release.txt +2 -0
  18. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/requirements-runtime.txt +1 -0
  19. engineering_process-0.8.0/engineering_process/skills.py +225 -0
  20. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/syncing.py +191 -16
  21. {engineering_process-0.6.1 → engineering_process-0.8.0/engineering_process.egg-info}/PKG-INFO +125 -27
  22. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process.egg-info/SOURCES.txt +6 -0
  23. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process.egg-info/requires.txt +1 -0
  24. engineering_process-0.8.0/examples/automation-process-adoption-policy.json +36 -0
  25. engineering_process-0.8.0/examples/automation-process-adoption-proposal.json +174 -0
  26. engineering_process-0.8.0/examples/plan-decision-review-assignment.json +45 -0
  27. engineering_process-0.8.0/examples/plan-decision-review.json +26 -0
  28. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/plan.json +14 -2
  29. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/project.json +15 -1
  30. {engineering_process-0.6.1 → engineering_process-0.8.0}/improvement-catalog.json +31 -0
  31. {engineering_process-0.6.1 → engineering_process-0.8.0}/process-graph.json +18 -3
  32. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/assess-design/SKILL.md +3 -0
  33. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/evolve-process/SKILL.md +6 -0
  34. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/implement-change/SKILL.md +18 -2
  35. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/plan-change/SKILL.md +15 -3
  36. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/publish-change/SKILL.md +42 -16
  37. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/run-change/SKILL.md +10 -4
  38. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/run-change/references/execution.md +64 -2
  39. {engineering_process-0.6.1 → engineering_process-0.8.0}/pyproject.toml +7 -1
  40. engineering_process-0.8.0/release.json +53 -0
  41. engineering_process-0.8.0/schemas/automation-proposal-policy.schema.json +193 -0
  42. engineering_process-0.8.0/schemas/automation-proposal.schema.json +432 -0
  43. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/evidence-receipt.schema.json +48 -0
  44. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/lifecycle.schema.json +27 -0
  45. engineering_process-0.8.0/schemas/plan-decision-review-assignment.schema.json +99 -0
  46. engineering_process-0.8.0/schemas/plan-decision-review.schema.json +81 -0
  47. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/plan.schema.json +88 -3
  48. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/project.schema.json +42 -3
  49. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_cli.py +1 -0
  50. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_contracts.py +216 -1
  51. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_distribution.py +62 -0
  52. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_evals.py +20 -0
  53. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_lifecycle.py +747 -0
  54. engineering_process-0.8.0/tests/test_publication.py +2232 -0
  55. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_candidate.py +244 -0
  56. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_runtime.py +13 -0
  57. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_schemas.py +12 -0
  58. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_skills.py +90 -1
  59. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_syncing.py +54 -0
  60. engineering_process-0.6.1/engineering_process/distribution.py +0 -113
  61. engineering_process-0.6.1/engineering_process/publication.py +0 -871
  62. engineering_process-0.6.1/engineering_process/skills.py +0 -118
  63. engineering_process-0.6.1/release.json +0 -46
  64. engineering_process-0.6.1/schemas/automation-proposal-policy.schema.json +0 -117
  65. engineering_process-0.6.1/schemas/automation-proposal.schema.json +0 -223
  66. engineering_process-0.6.1/tests/test_publication.py +0 -976
  67. {engineering_process-0.6.1 → engineering_process-0.8.0}/LICENSE +0 -0
  68. {engineering_process-0.6.1 → engineering_process-0.8.0}/MANIFEST.in +0 -0
  69. {engineering_process-0.6.1 → engineering_process-0.8.0}/PROCESS_IMPROVEMENT.md +0 -0
  70. {engineering_process-0.6.1 → engineering_process-0.8.0}/bundles.json +0 -0
  71. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/__main__.py +0 -0
  72. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/_download_worker.py +0 -0
  73. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/_supervisor_posix.py +0 -0
  74. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/_supervisor_windows.py +0 -0
  75. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/_windows_job.py +0 -0
  76. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/adoption.py +0 -0
  77. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/artifact_attestation.py +0 -0
  78. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/bootstrap.py +0 -0
  79. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/bounded_process.py +0 -0
  80. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/diagnostics.py +0 -0
  81. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/environment.py +0 -0
  82. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/evidence_transport.py +0 -0
  83. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/git.py +0 -0
  84. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/git_attributes.py +0 -0
  85. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/helper_launch.py +0 -0
  86. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/impact.py +0 -0
  87. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/improvement.py +0 -0
  88. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/lifecycle_routes.py +0 -0
  89. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/managed.py +0 -0
  90. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/markdown.py +0 -0
  91. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/recommendation.py +0 -0
  92. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/release.py +0 -0
  93. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/remote_verification.py +0 -0
  94. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/requirements-build.txt +0 -0
  95. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/requirements-dev.txt +0 -0
  96. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/runner.py +0 -0
  97. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/runtime.py +0 -0
  98. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/supervision.py +0 -0
  99. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/supplemental.py +0 -0
  100. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process/tooling.py +0 -0
  101. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process.egg-info/dependency_links.txt +0 -0
  102. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process.egg-info/entry_points.txt +0 -0
  103. {engineering_process-0.6.1 → engineering_process-0.8.0}/engineering_process.egg-info/top_level.txt +0 -0
  104. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/adoption-migration.json +0 -0
  105. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/automation-policy.json +0 -0
  106. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/automation-proposal-policy.json +0 -0
  107. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/automation-proposal.json +0 -0
  108. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/change.json +0 -0
  109. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/improvement-catalog.json +0 -0
  110. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/improvement-disposition.json +0 -0
  111. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/improvement-reproduction.json +0 -0
  112. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/improvement-resolution.json +0 -0
  113. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/improvement-signal.json +0 -0
  114. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/recommendation-resolution.json +0 -0
  115. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/recommendation-review-assignment.json +0 -0
  116. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/recommendation-review.json +0 -0
  117. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/recommendation.json +0 -0
  118. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/release-change.json +0 -0
  119. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/release.json +0 -0
  120. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/remote-verification-evidence.json +0 -0
  121. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/remote-verification-request.json +0 -0
  122. {engineering_process-0.6.1 → engineering_process-0.8.0}/examples/review.json +0 -0
  123. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
  124. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
  125. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/change-api/SKILL.md +0 -0
  126. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/cross-repo-change/SKILL.md +0 -0
  127. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/define-change-contract/SKILL.md +0 -0
  128. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/design-module/SKILL.md +0 -0
  129. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/finish-change/SKILL.md +0 -0
  130. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
  131. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/implement-module/SKILL.md +0 -0
  132. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
  133. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
  134. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
  135. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/review-change/SKILL.md +0 -0
  136. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/run-project-command/SKILL.md +0 -0
  137. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
  138. {engineering_process-0.6.1 → engineering_process-0.8.0}/process_assets/skills/verify-change/SKILL.md +0 -0
  139. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/adoption-migration.schema.json +0 -0
  140. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/automation-policy.schema.json +0 -0
  141. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/change.schema.json +0 -0
  142. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/improvement-catalog.schema.json +0 -0
  143. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/improvement-disposition.schema.json +0 -0
  144. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/improvement-reproduction.schema.json +0 -0
  145. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/improvement-resolution.schema.json +0 -0
  146. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/improvement-signal.schema.json +0 -0
  147. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/process-graph.schema.json +0 -0
  148. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/process-lock.schema.json +0 -0
  149. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/recommendation-resolution.schema.json +0 -0
  150. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/recommendation-review-assignment.schema.json +0 -0
  151. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/recommendation-review.schema.json +0 -0
  152. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/recommendation.schema.json +0 -0
  153. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/release-change.schema.json +0 -0
  154. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/release.schema.json +0 -0
  155. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/remote-verification-evidence.schema.json +0 -0
  156. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/remote-verification-request.schema.json +0 -0
  157. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/review.schema.json +0 -0
  158. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/reviewer-attestation.schema.json +0 -0
  159. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/supplemental-verification.schema.json +0 -0
  160. {engineering_process-0.6.1 → engineering_process-0.8.0}/schemas/verification.schema.json +0 -0
  161. {engineering_process-0.6.1 → engineering_process-0.8.0}/setup.cfg +0 -0
  162. {engineering_process-0.6.1 → engineering_process-0.8.0}/templates/AGENTS.process.md +0 -0
  163. {engineering_process-0.6.1 → engineering_process-0.8.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
  164. {engineering_process-0.6.1 → engineering_process-0.8.0}/templates/adopt-process-windows-job.py +0 -0
  165. {engineering_process-0.6.1 → engineering_process-0.8.0}/templates/adopt-process.py +0 -0
  166. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_adoption.py +0 -0
  167. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_adoption_runner.py +0 -0
  168. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_artifact_attestation.py +0 -0
  169. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_bootstrap.py +0 -0
  170. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_bounded_process.py +0 -0
  171. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_bundles.py +0 -0
  172. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_completed_release_dispatch.py +0 -0
  173. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_completion_evidence_transport.py +0 -0
  174. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_diagnostics.py +0 -0
  175. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_distribution_verify.py +0 -0
  176. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_environment.py +0 -0
  177. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_impact.py +0 -0
  178. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_improvement.py +0 -0
  179. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_process_graph.py +0 -0
  180. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_process_install.py +0 -0
  181. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_publish_event.py +0 -0
  182. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_pypi_publication.py +0 -0
  183. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_recommendation.py +0 -0
  184. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release.py +0 -0
  185. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_candidate_boundary.py +0 -0
  186. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_completion_identity.py +0 -0
  187. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_evidence_restore.py +0 -0
  188. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_evidence_selection.py +0 -0
  189. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_preparation.py +0 -0
  190. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_release_qualification.py +0 -0
  191. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_remote_verification.py +0 -0
  192. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_remote_verification_adapter.py +0 -0
  193. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_runner.py +0 -0
  194. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_self_hosting.py +0 -0
  195. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_source_checkout.py +0 -0
  196. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_supervision.py +0 -0
  197. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_supplemental.py +0 -0
  198. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_test_suite.py +0 -0
  199. {engineering_process-0.6.1 → engineering_process-0.8.0}/tests/test_tooling.py +0 -0
  200. {engineering_process-0.6.1 → engineering_process-0.8.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.6.1
3
+ Version: 0.8.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
@@ -536,6 +538,48 @@ resolution records a selected valid option but grants no lifecycle completion, m
536
538
  release, deployment, or adoption authority. Those owning gates remain separate. The
537
539
  accepted decision is recorded before dependent work resumes.
538
540
 
541
+ Projects may separately adopt the `provenance-gated-authored-review` lifecycle policy.
542
+ Under that policy, every new nontrivial authored plan uses schema 3 and is assessed
543
+ before implementation by a genuinely fresh read-only reviewer. The assessment covers
544
+ architecture, authority, compatibility, external mutation, lifecycle order, owner,
545
+ rollout, scope, and trust boundary for the exact contract, plan, clean source,
546
+ authority, policy, author, and reviewer context. A clear assessment permits
547
+ implementation. A decision-required assessment must complete the existing reviewed
548
+ recommendation and owner-resolution chain, with a dedicated invariant binding the
549
+ exact assessment digest:
550
+
551
+ ~~~text
552
+ processctl change decision start --project-root . --change-id issue-123 \
553
+ --actor <reviewer> --context <fresh-context> --actor-kind agent \
554
+ --method isolated-context --attested-by <host> \
555
+ --attestation-evidence <bounded-attestation>
556
+ processctl contract validate --kind plan-decision-review \
557
+ plan-decision-review.json
558
+ processctl change decision submit --project-root . --change-id issue-123 \
559
+ --review plan-decision-review.json
560
+ processctl change decision resolve --project-root . --change-id issue-123 \
561
+ --actor <coordinator> --context <coordinator-context> --actor-kind agent \
562
+ --recommendation recommendation.json \
563
+ --assignment recommendation-review-assignment.json \
564
+ --recommendation-review recommendation-review.json \
565
+ --resolution recommendation-resolution.json
566
+ processctl change implement --project-root . --change-id issue-123 \
567
+ --actor <worker> --context <worker-context> --actor-kind agent
568
+ ~~~
569
+
570
+ The resolve command is used only for `decision-required`; a clear assessment goes
571
+ directly to `change implement`. Unreviewed prose, risk tiers, heuristics, author
572
+ self-classification, and generator labels are candidate-only and grant no authority.
573
+ A generated bypass is valid only for a core-registered generator whose complete plan
574
+ is exactly recomputed from bounded source-owned inputs and the immutable installed
575
+ authority. Exact generated plans are not universally sent to semantic review. Core
576
+ requires no daemon, scheduler, service, webhook receiver, hosted reviewer platform,
577
+ vendor, model, or proprietary agent API.
578
+ Every later implementation cycle after a finding or clean post-verification source
579
+ drift repeats the assessment with a newly reserved reviewer context bound to the new
580
+ source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
581
+ historical and cannot authorize the new cycle.
582
+
539
583
  When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
540
584
  alone do not advance it to review. Create the exact no-authority request, run the
541
585
  project adapter, and ingest the complete supplemental set first:
@@ -558,7 +602,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
558
602
  service ids remain lifecycle evidence, not merge, release, deployment, or adoption
559
603
  authority.
560
604
 
561
- The canonical publication order is stricter than a PR-first workflow: implementation
605
+ The default agent-host publication order is stricter than a PR-first workflow: implementation
562
606
  and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
563
607
  agent or human semantically reviews that checkpoint; findings repeat implementation,
564
608
  complete verification, and fresh review until approved; `change finish` records
@@ -566,6 +610,9 @@ completion; only then may automation push and create the PR. Static policy/secre
566
610
  checks supplement this review and cannot generate a semantic verdict. With a valid
567
611
  standing policy, automation then waits for exact-head/current-base required checks and
568
612
  performs the configured merge without a separate human step.
613
+ An opted-in schema-3 Renovate process-adoption proposal is the explicit pre-review
614
+ publication exception; its complete candidate passes protected-base proposal
615
+ validation first, then consumer-owner review and manual terminal merge.
569
616
 
570
617
  Completed local evidence can be moved across machines or attached to a release as a
571
618
  bounded receipt. Export and validate it before any explicit prune:
@@ -644,13 +691,14 @@ without per-action confirmation.
644
691
  ### Controlled automation proposals
645
692
 
646
693
  Completion-before-publication remains the default. A consumer may enable an untrusted
647
- dependency proposal before completion only through a policy file already present on
648
- the protected base at `.process/automation-proposals.json`. The policy uses the
649
- shape in `examples/automation-proposal-policy.json`: current policy uses schema 2,
650
- selects the target and automation prefix, allows only `dependency-update`,
651
- requires the canonical `lifecycle-completion` check, and fixes every dangerous control
652
- to its fail-closed value. Absence, disablement, a branch-only policy, or a policy digest
653
- mismatch blocks the route.
694
+ automation proposal before completion only through a policy file already present on
695
+ the protected base at `.process/automation-proposals.json`. Schema 1 and schema 2 use
696
+ the shape in `examples/automation-proposal-policy.json`, allow only
697
+ `dependency-update`, require the canonical `lifecycle-completion` check, and retain
698
+ their released human-only and completion-gated meanings. Schema 3 uses
699
+ `examples/automation-process-adoption-policy.json` for the distinct
700
+ `process-adoption` route. Absence, disablement, a branch-only policy, or a policy
701
+ digest mismatch blocks every route.
654
702
 
655
703
  The immutable provider verifier emits one bounded
656
704
  `engineering-process-controlled-automation-proposal` report for the exact repository,
@@ -675,9 +723,9 @@ processctl publication validate-proposal --project-root . \
675
723
 
676
724
  This pass proves only that the proposal is safe to expose as untrusted input. It is
677
725
  not verification, semantic review, completion, or merge authority. Proposal checks
678
- remain read-only and receive no secrets; automerge, scripts, plugins, shell execution,
679
- privileged CI, process-authority, workflow, release, deployment, security-policy, and
680
- trust-root changes are excluded.
726
+ remain read-only and receive no secrets. Dependency proposals exclude automerge,
727
+ scripts, plugins, shell execution, privileged CI, process-authority, workflow,
728
+ release, deployment, security-policy, and trust-root changes.
681
729
 
682
730
  The required completion check is absent on every new proposal head. After the exact
683
731
  head completes the lifecycle, export its receipt, finalize the managed PR requirements,
@@ -705,6 +753,53 @@ after the protected base's standing automation policy and exact completion gate
705
753
  Provider tokens, check APIs, branch protection, retries, and repository selection
706
754
  remain consumer-owned adapter behavior.
707
755
 
756
+ Schema-3 process adoption has a different merge boundary. Renovate may create the PR
757
+ only after its allowlisted managed runner has materialized the complete target: direct
758
+ pin, cross-platform hash lock, process lock, managed files, any declared project
759
+ migration, and every immutable action pin. A protected-base immutable verifier is
760
+ fixed by repository and commit in the opt-in policy. Its evidence binds the producer
761
+ release/tag/commit/attestation, source and target authority versions and digests,
762
+ requirements bytes, exact base/head/path set, migration result, complete managed-file
763
+ set, and exact verifier identity. Workflow changes must be only the declared full-SHA
764
+ action-pin replacements with their release annotations.
765
+
766
+ The protected-base policy also fixes the producer repository. The report binds bounded
767
+ raw release-contract and distribution-attestation bytes, their digests, lifecycle
768
+ receipt identity, complete artifact hashes, and the verifier's exact target
769
+ materialization result. The adapter independently supplies a clean producer checkout
770
+ with the exact tag and origin plus downloaded release artifacts, lifecycle receipt,
771
+ and attestation; report bytes alone never pass. Existing release and
772
+ artifact-attestation validators resolve those objects before the target distribution
773
+ is compared with the complete consumer materialization. Validation also requires the
774
+ target wheel hash in the committed requirements lock and every use of that producer action
775
+ across the complete regular-workflow tree; the protected base must be an ancestor and
776
+ workflow mode may not change. Workflow semantics are read with the pinned maintained
777
+ PyYAML safe loader; the process does not maintain a substitute YAML scanner.
778
+
779
+ For schema 3, add these independently resolved inputs to `validate-proposal`:
780
+
781
+ ~~~text
782
+ --producer-root <clean-release-checkout> \
783
+ --producer-artifact-root <downloaded-release-artifacts> \
784
+ --producer-receipt <release-lifecycle-receipt> \
785
+ --producer-attestation <distribution-attestation>
786
+ ~~~
787
+
788
+ The schema fixes `automerge` to false, `consumerOwnerMergeRequired` to true, and
789
+ `postMergeMutation` to false. `publication validate-proposal-completion` always rejects
790
+ this kind: lifecycle completion, standing automation, provider state, and a successful
791
+ proposal check cannot convert it to automatic merge. The consumer chooses project
792
+ configuration, commands, verification, review method, and whether to merge. Its owner
793
+ manually merges the reviewed PR; that merge is the terminal adoption cutover and no
794
+ post-merge synchronization runs.
795
+
796
+ This does not alter the ordinary agent-host route. When an agent host completes the
797
+ full lifecycle before it creates a source or adoption PR, the completed exact head may
798
+ still auto-merge under the protected base's standing policy. Origin and publication
799
+ state select the route: an agent-host completed PR is not reclassified as a Renovate
800
+ proposal, and a Renovate process-adoption proposal never inherits completed-source
801
+ auto-merge authority.
802
+
708
803
  ## Trust boundary
709
804
 
710
805
  The CLI proves structural separation: reviewer actor id and context id must both be
@@ -791,9 +886,10 @@ fingerprint, source tree, or publication range.
791
886
  exclusively by their hash-locked `requirements/process.txt`. The action invokes the
792
887
  producer-owned installer from its immutable action checkout and never downloads or
793
888
  executes helper source from the consumer branch.
794
- - Versioned JSON schemas define change, plan, verification, review, recommendation,
795
- independent recommendation assignment and challenge, owner resolution, lifecycle,
796
- completion-related artifacts, release-change fragments, and the release
889
+ - Versioned JSON schemas define change, plan provenance, plan-decision assignment and
890
+ review, verification, review, recommendation, independent recommendation assignment
891
+ and challenge, owner resolution, lifecycle, completion-related artifacts,
892
+ release-change fragments, and the release
797
893
  classification contract. The generated Release PR gate binds that contract to the
798
894
  exact SemVer increment, package version, latest reachable prior tag, reviewed head,
799
895
  identical merge tree, immutable checkpoint, and main ancestry.
@@ -806,10 +902,12 @@ fingerprint, source tree, or publication range.
806
902
  readable under their released semantics. GitHub's artifact id and digest complete
807
903
  the immutable remote reference; this supplements rather than replaces N-1
808
904
  lifecycle evidence.
809
- - New lifecycle work uses bounded plan schema 2. Selective-impact consumers may add
810
- the optional capability on project schema 3, while new integrations use bounded
811
- project schema 4. Plan schema 1 and the pre-existing fields of project schemas 1-3
812
- retain their published validation behavior instead of being tightened in place.
905
+ - Projects without plan-decision opt-in continue using bounded plan schema 2. An
906
+ opted-in project uses plan schema 3 provenance and the pre-implementation gate.
907
+ Selective-impact consumers may add optional capabilities on project schema 3,
908
+ while new integrations use bounded project schema 4. Plan schemas 1 and 2 and the
909
+ pre-existing fields of project schemas 1-3 retain their published validation
910
+ behavior instead of being tightened in place.
813
911
  - `release.json` is the single release-identity owner. Governed GitHub tag and title
814
912
  are both exactly `v<SemVer>`; package metadata, runtime version, artifact names,
815
913
  authorization evidence, and later consumer locks must match it. Public-impact PRs
@@ -115,6 +115,34 @@ evidence boundaries as completion-blocking.
115
115
 
116
116
  ## Recommendation validity
117
117
 
118
+ An opted-in project gates implementation through plan provenance. Every nontrivial
119
+ authored plan receives a fresh read-only semantic assessment for architecture,
120
+ authority, compatibility, external mutation, lifecycle order, owner, rollout, scope,
121
+ and trust boundary. The assignment binds the exact contract, plan, clean source,
122
+ authority, project policy, author, reviewer context, and canonical category set. A
123
+ clear assessment may authorize implementation; a decision-required assessment must
124
+ bind the existing independently reviewed recommendation and explicit owner resolution
125
+ for that exact assessment. Drift in any binding fails closed.
126
+ Each later implementation cycle after a finding or clean post-verification source
127
+ drift requires a newly reserved context and assessment bound to that cycle's source;
128
+ cycle-1 evidence cannot be relabeled or reused.
129
+
130
+ A process-generated plan bypass is accepted only when the immutable installed core
131
+ recognizes its generator and exactly recomputes the complete plan from bounded
132
+ validated source-owned inputs. Generator labels, risk labels, author
133
+ self-classification, heuristic prose scanning, and partial comparison are not
134
+ provenance. Exact generated plans are not universally sent to semantic review, and
135
+ portable core does not introduce a daemon, scheduler, webhook, hosted reviewer
136
+ platform, vendor, model, or proprietary agent API. Unreviewed prose remains
137
+ candidate-only and grants no decision or lifecycle authority.
138
+
139
+ The three possible review boundaries never review one another. Plan-decision review
140
+ assesses the authored plan; recommendation review challenges only the recommendation
141
+ and its digest binding; final lifecycle review assesses implemented source and current
142
+ evidence. Reviewer-of-reviewer, meta-assessment, assessment-of-assessment,
143
+ policy-for-policy, dynamically generated approval chains, and generic workflow
144
+ engines are outside the portable contract.
145
+
118
146
  A material owner decision derives recommendation eligibility before optimization.
119
147
  Every option assesses every governing hard invariant and references only proven or
120
148
  explicitly unproven assumptions. Any violated invariant makes the option invalid; any
@@ -136,6 +164,15 @@ release, deployment, or adoption authority.
136
164
 
137
165
  ## Resource and generated-state policy
138
166
 
167
+ Before implementing a standard format, protocol, parser, serializer, cryptographic
168
+ primitive, or platform integration, evaluate maintained dependencies and supported
169
+ tools at the owning boundary. Prefer a mature dependency when it materially reduces
170
+ custom semantics and satisfies compatibility, licensing, supply-chain, portability,
171
+ and resource-bound requirements; add it through the project's managed dependency and
172
+ lock flow. A custom implementation requires concrete evidence that available
173
+ dependencies cannot meet the accepted contract. Do not recreate a mature standard
174
+ merely to avoid proposing or installing a useful dependency.
175
+
139
176
  Every operation over repository-controlled or remote input has explicit limits for
140
177
  time, count, individual item size, aggregate size, output, and process descendants.
141
178
  Limits fail closed and have regression coverage for success, failure, timeout, and
@@ -149,6 +186,30 @@ authority, and shares one rollback boundary with the process lock and managed as
149
186
  Optional capabilities are never inferred, while configuration required by the target
150
187
  authority blocks adoption when it is missing or invalid.
151
188
 
189
+ Proposal merge authority derives from proposal origin and publication state. An
190
+ agent-host review object created only after full lifecycle completion may use standing
191
+ policy auto-merge for its exact approved head. A Renovate `process-adoption` proposal
192
+ is created before consumer-owner review and must instead fix automerge false,
193
+ `consumerOwnerMergeRequired` true, and post-merge mutation false. Lifecycle
194
+ completion, standing policy, provider state, and successful static checks never move
195
+ that proposal onto the agent-host route. The consumer owns review and manually
196
+ authorizes merge; merge is the terminal cutover.
197
+
198
+ Before candidate-owned commands, a protected-base immutable verifier independently
199
+ binds the actual base and exact head, producer release/tag/commit/attestation, source
200
+ and target process identities, requirements bytes, process lock, migration result,
201
+ complete selected managed-file set, grouped full-SHA action-pin-only workflow delta,
202
+ and verifier identity. Producer and verifier repositories are protected-base owned;
203
+ report-controlled release claims never authenticate themselves. A separately supplied
204
+ clean tagged producer checkout, artifacts, receipt, and attestation pass the existing
205
+ release/attestation validators and exact target synchronization. Base must be
206
+ an ancestor of head, and every producer use in the regular-workflow tree moves as one
207
+ unchanged-mode pin group. Partial, stale, inferred, unauthorized, or post-merge-dependent
208
+ candidates fail closed. This portable boundary reuses ordinary Renovate generation,
209
+ managed adoption, consumer CI, review and branch protection. It does not introduce a
210
+ reviewer host, daemon, scheduler, generic workflow engine, dynamically generated
211
+ approval chain, meta-assessment, or reviewer-of-reviewer layer.
212
+
152
213
  Released serialized contracts are never tightened in place. A new resource bound or
153
214
  meaning-changing requirement uses a new integer schema major with explicit migration;
154
215
  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
@@ -501,6 +502,48 @@ resolution records a selected valid option but grants no lifecycle completion, m
501
502
  release, deployment, or adoption authority. Those owning gates remain separate. The
502
503
  accepted decision is recorded before dependent work resumes.
503
504
 
505
+ Projects may separately adopt the `provenance-gated-authored-review` lifecycle policy.
506
+ Under that policy, every new nontrivial authored plan uses schema 3 and is assessed
507
+ before implementation by a genuinely fresh read-only reviewer. The assessment covers
508
+ architecture, authority, compatibility, external mutation, lifecycle order, owner,
509
+ rollout, scope, and trust boundary for the exact contract, plan, clean source,
510
+ authority, policy, author, and reviewer context. A clear assessment permits
511
+ implementation. A decision-required assessment must complete the existing reviewed
512
+ recommendation and owner-resolution chain, with a dedicated invariant binding the
513
+ exact assessment digest:
514
+
515
+ ~~~text
516
+ processctl change decision start --project-root . --change-id issue-123 \
517
+ --actor <reviewer> --context <fresh-context> --actor-kind agent \
518
+ --method isolated-context --attested-by <host> \
519
+ --attestation-evidence <bounded-attestation>
520
+ processctl contract validate --kind plan-decision-review \
521
+ plan-decision-review.json
522
+ processctl change decision submit --project-root . --change-id issue-123 \
523
+ --review plan-decision-review.json
524
+ processctl change decision resolve --project-root . --change-id issue-123 \
525
+ --actor <coordinator> --context <coordinator-context> --actor-kind agent \
526
+ --recommendation recommendation.json \
527
+ --assignment recommendation-review-assignment.json \
528
+ --recommendation-review recommendation-review.json \
529
+ --resolution recommendation-resolution.json
530
+ processctl change implement --project-root . --change-id issue-123 \
531
+ --actor <worker> --context <worker-context> --actor-kind agent
532
+ ~~~
533
+
534
+ The resolve command is used only for `decision-required`; a clear assessment goes
535
+ directly to `change implement`. Unreviewed prose, risk tiers, heuristics, author
536
+ self-classification, and generator labels are candidate-only and grant no authority.
537
+ A generated bypass is valid only for a core-registered generator whose complete plan
538
+ is exactly recomputed from bounded source-owned inputs and the immutable installed
539
+ authority. Exact generated plans are not universally sent to semantic review. Core
540
+ requires no daemon, scheduler, service, webhook receiver, hosted reviewer platform,
541
+ vendor, model, or proprietary agent API.
542
+ Every later implementation cycle after a finding or clean post-verification source
543
+ drift repeats the assessment with a newly reserved reviewer context bound to the new
544
+ source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
545
+ historical and cannot authorize the new cycle.
546
+
504
547
  When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
505
548
  alone do not advance it to review. Create the exact no-authority request, run the
506
549
  project adapter, and ingest the complete supplemental set first:
@@ -523,7 +566,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
523
566
  service ids remain lifecycle evidence, not merge, release, deployment, or adoption
524
567
  authority.
525
568
 
526
- The canonical publication order is stricter than a PR-first workflow: implementation
569
+ The default agent-host publication order is stricter than a PR-first workflow: implementation
527
570
  and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
528
571
  agent or human semantically reviews that checkpoint; findings repeat implementation,
529
572
  complete verification, and fresh review until approved; `change finish` records
@@ -531,6 +574,9 @@ completion; only then may automation push and create the PR. Static policy/secre
531
574
  checks supplement this review and cannot generate a semantic verdict. With a valid
532
575
  standing policy, automation then waits for exact-head/current-base required checks and
533
576
  performs the configured merge without a separate human step.
577
+ An opted-in schema-3 Renovate process-adoption proposal is the explicit pre-review
578
+ publication exception; its complete candidate passes protected-base proposal
579
+ validation first, then consumer-owner review and manual terminal merge.
534
580
 
535
581
  Completed local evidence can be moved across machines or attached to a release as a
536
582
  bounded receipt. Export and validate it before any explicit prune:
@@ -609,13 +655,14 @@ without per-action confirmation.
609
655
  ### Controlled automation proposals
610
656
 
611
657
  Completion-before-publication remains the default. A consumer may enable an untrusted
612
- dependency proposal before completion only through a policy file already present on
613
- the protected base at `.process/automation-proposals.json`. The policy uses the
614
- shape in `examples/automation-proposal-policy.json`: current policy uses schema 2,
615
- selects the target and automation prefix, allows only `dependency-update`,
616
- requires the canonical `lifecycle-completion` check, and fixes every dangerous control
617
- to its fail-closed value. Absence, disablement, a branch-only policy, or a policy digest
618
- mismatch blocks the route.
658
+ automation proposal before completion only through a policy file already present on
659
+ the protected base at `.process/automation-proposals.json`. Schema 1 and schema 2 use
660
+ the shape in `examples/automation-proposal-policy.json`, allow only
661
+ `dependency-update`, require the canonical `lifecycle-completion` check, and retain
662
+ their released human-only and completion-gated meanings. Schema 3 uses
663
+ `examples/automation-process-adoption-policy.json` for the distinct
664
+ `process-adoption` route. Absence, disablement, a branch-only policy, or a policy
665
+ digest mismatch blocks every route.
619
666
 
620
667
  The immutable provider verifier emits one bounded
621
668
  `engineering-process-controlled-automation-proposal` report for the exact repository,
@@ -640,9 +687,9 @@ processctl publication validate-proposal --project-root . \
640
687
 
641
688
  This pass proves only that the proposal is safe to expose as untrusted input. It is
642
689
  not verification, semantic review, completion, or merge authority. Proposal checks
643
- remain read-only and receive no secrets; automerge, scripts, plugins, shell execution,
644
- privileged CI, process-authority, workflow, release, deployment, security-policy, and
645
- trust-root changes are excluded.
690
+ remain read-only and receive no secrets. Dependency proposals exclude automerge,
691
+ scripts, plugins, shell execution, privileged CI, process-authority, workflow,
692
+ release, deployment, security-policy, and trust-root changes.
646
693
 
647
694
  The required completion check is absent on every new proposal head. After the exact
648
695
  head completes the lifecycle, export its receipt, finalize the managed PR requirements,
@@ -670,6 +717,53 @@ after the protected base's standing automation policy and exact completion gate
670
717
  Provider tokens, check APIs, branch protection, retries, and repository selection
671
718
  remain consumer-owned adapter behavior.
672
719
 
720
+ Schema-3 process adoption has a different merge boundary. Renovate may create the PR
721
+ only after its allowlisted managed runner has materialized the complete target: direct
722
+ pin, cross-platform hash lock, process lock, managed files, any declared project
723
+ migration, and every immutable action pin. A protected-base immutable verifier is
724
+ fixed by repository and commit in the opt-in policy. Its evidence binds the producer
725
+ release/tag/commit/attestation, source and target authority versions and digests,
726
+ requirements bytes, exact base/head/path set, migration result, complete managed-file
727
+ set, and exact verifier identity. Workflow changes must be only the declared full-SHA
728
+ action-pin replacements with their release annotations.
729
+
730
+ The protected-base policy also fixes the producer repository. The report binds bounded
731
+ raw release-contract and distribution-attestation bytes, their digests, lifecycle
732
+ receipt identity, complete artifact hashes, and the verifier's exact target
733
+ materialization result. The adapter independently supplies a clean producer checkout
734
+ with the exact tag and origin plus downloaded release artifacts, lifecycle receipt,
735
+ and attestation; report bytes alone never pass. Existing release and
736
+ artifact-attestation validators resolve those objects before the target distribution
737
+ is compared with the complete consumer materialization. Validation also requires the
738
+ target wheel hash in the committed requirements lock and every use of that producer action
739
+ across the complete regular-workflow tree; the protected base must be an ancestor and
740
+ workflow mode may not change. Workflow semantics are read with the pinned maintained
741
+ PyYAML safe loader; the process does not maintain a substitute YAML scanner.
742
+
743
+ For schema 3, add these independently resolved inputs to `validate-proposal`:
744
+
745
+ ~~~text
746
+ --producer-root <clean-release-checkout> \
747
+ --producer-artifact-root <downloaded-release-artifacts> \
748
+ --producer-receipt <release-lifecycle-receipt> \
749
+ --producer-attestation <distribution-attestation>
750
+ ~~~
751
+
752
+ The schema fixes `automerge` to false, `consumerOwnerMergeRequired` to true, and
753
+ `postMergeMutation` to false. `publication validate-proposal-completion` always rejects
754
+ this kind: lifecycle completion, standing automation, provider state, and a successful
755
+ proposal check cannot convert it to automatic merge. The consumer chooses project
756
+ configuration, commands, verification, review method, and whether to merge. Its owner
757
+ manually merges the reviewed PR; that merge is the terminal adoption cutover and no
758
+ post-merge synchronization runs.
759
+
760
+ This does not alter the ordinary agent-host route. When an agent host completes the
761
+ full lifecycle before it creates a source or adoption PR, the completed exact head may
762
+ still auto-merge under the protected base's standing policy. Origin and publication
763
+ state select the route: an agent-host completed PR is not reclassified as a Renovate
764
+ proposal, and a Renovate process-adoption proposal never inherits completed-source
765
+ auto-merge authority.
766
+
673
767
  ## Trust boundary
674
768
 
675
769
  The CLI proves structural separation: reviewer actor id and context id must both be
@@ -756,9 +850,10 @@ fingerprint, source tree, or publication range.
756
850
  exclusively by their hash-locked `requirements/process.txt`. The action invokes the
757
851
  producer-owned installer from its immutable action checkout and never downloads or
758
852
  executes helper source from the consumer branch.
759
- - Versioned JSON schemas define change, plan, verification, review, recommendation,
760
- independent recommendation assignment and challenge, owner resolution, lifecycle,
761
- completion-related artifacts, release-change fragments, and the release
853
+ - Versioned JSON schemas define change, plan provenance, plan-decision assignment and
854
+ review, verification, review, recommendation, independent recommendation assignment
855
+ and challenge, owner resolution, lifecycle, completion-related artifacts,
856
+ release-change fragments, and the release
762
857
  classification contract. The generated Release PR gate binds that contract to the
763
858
  exact SemVer increment, package version, latest reachable prior tag, reviewed head,
764
859
  identical merge tree, immutable checkpoint, and main ancestry.
@@ -771,10 +866,12 @@ fingerprint, source tree, or publication range.
771
866
  readable under their released semantics. GitHub's artifact id and digest complete
772
867
  the immutable remote reference; this supplements rather than replaces N-1
773
868
  lifecycle evidence.
774
- - New lifecycle work uses bounded plan schema 2. Selective-impact consumers may add
775
- the optional capability on project schema 3, while new integrations use bounded
776
- project schema 4. Plan schema 1 and the pre-existing fields of project schemas 1-3
777
- retain their published validation behavior instead of being tightened in place.
869
+ - Projects without plan-decision opt-in continue using bounded plan schema 2. An
870
+ opted-in project uses plan schema 3 provenance and the pre-implementation gate.
871
+ Selective-impact consumers may add optional capabilities on project schema 3,
872
+ while new integrations use bounded project schema 4. Plan schemas 1 and 2 and the
873
+ pre-existing fields of project schemas 1-3 retain their published validation
874
+ behavior instead of being tightened in place.
778
875
  - `release.json` is the single release-identity owner. Governed GitHub tag and title
779
876
  are both exactly `v<SemVer>`; package metadata, runtime version, artifact names,
780
877
  authorization evidence, and later consumer locks must match it. Public-impact PRs