engineering-process 0.9.0__tar.gz → 1.0.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 (262) hide show
  1. engineering_process-1.0.0/MANIFEST.in +4 -0
  2. engineering_process-1.0.0/PKG-INFO +279 -0
  3. engineering_process-1.0.0/README.md +255 -0
  4. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/__init__.py +1 -1
  5. engineering_process-1.0.0/engineering_process/_supervisor_posix.py +367 -0
  6. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/_supervisor_windows.py +3 -0
  7. engineering_process-1.0.0/engineering_process/adoption.py +557 -0
  8. engineering_process-1.0.0/engineering_process/cli.py +559 -0
  9. engineering_process-1.0.0/engineering_process/commands.py +218 -0
  10. engineering_process-1.0.0/engineering_process/contracts.py +131 -0
  11. engineering_process-1.0.0/engineering_process/distribution.py +122 -0
  12. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/helper_launch.py +0 -1
  13. engineering_process-1.0.0/engineering_process/lifecycle.py +536 -0
  14. engineering_process-1.0.0/engineering_process/project.py +115 -0
  15. engineering_process-1.0.0/engineering_process/publication_compat.py +110 -0
  16. engineering_process-1.0.0/engineering_process/release.py +74 -0
  17. engineering_process-1.0.0/engineering_process/repository.py +140 -0
  18. engineering_process-1.0.0/engineering_process/requirements-dev.txt +3 -0
  19. engineering_process-1.0.0/engineering_process/requirements-runtime.txt +1 -0
  20. engineering_process-1.0.0/engineering_process/skills.py +108 -0
  21. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/supervision.py +2 -0
  22. engineering_process-1.0.0/engineering_process.egg-info/PKG-INFO +279 -0
  23. engineering_process-1.0.0/engineering_process.egg-info/SOURCES.txt +65 -0
  24. engineering_process-1.0.0/engineering_process.egg-info/requires.txt +6 -0
  25. engineering_process-1.0.0/process-graph.json +84 -0
  26. engineering_process-1.0.0/process_assets/skills/finish-change/SKILL.md +15 -0
  27. engineering_process-1.0.0/process_assets/skills/implement-change/SKILL.md +22 -0
  28. engineering_process-1.0.0/process_assets/skills/improve-process/SKILL.md +22 -0
  29. engineering_process-1.0.0/process_assets/skills/plan-change/SKILL.md +20 -0
  30. engineering_process-1.0.0/process_assets/skills/review-change/SKILL.md +31 -0
  31. engineering_process-1.0.0/process_assets/skills/run-change/SKILL.md +31 -0
  32. engineering_process-1.0.0/process_assets/skills/start-change/SKILL.md +19 -0
  33. engineering_process-1.0.0/process_assets/skills/verify-change/SKILL.md +19 -0
  34. engineering_process-1.0.0/pyproject.toml +68 -0
  35. engineering_process-1.0.0/schemas/change.schema.json +66 -0
  36. engineering_process-1.0.0/schemas/plan.schema.json +57 -0
  37. engineering_process-1.0.0/schemas/process-graph.schema.json +63 -0
  38. engineering_process-1.0.0/schemas/process-lock.schema.json +78 -0
  39. engineering_process-0.9.0/schemas/project.schema.json → engineering_process-1.0.0/schemas/project-legacy.schema.json +2 -2
  40. engineering_process-1.0.0/schemas/project.schema.json +81 -0
  41. engineering_process-1.0.0/schemas/receipt.schema.json +88 -0
  42. engineering_process-1.0.0/schemas/release-change.schema.json +20 -0
  43. engineering_process-1.0.0/schemas/release.schema.json +40 -0
  44. engineering_process-1.0.0/schemas/review.schema.json +64 -0
  45. engineering_process-1.0.0/schemas/run.schema.json +176 -0
  46. engineering_process-1.0.0/templates/AGENTS.process.md +13 -0
  47. engineering_process-1.0.0/templates/PULL_REQUEST_TEMPLATE.md +21 -0
  48. {engineering_process-0.9.0 → engineering_process-1.0.0}/templates/adopt-process.py +123 -37
  49. engineering_process-1.0.0/tests/test_adoption.py +406 -0
  50. engineering_process-1.0.0/tests/test_architecture.py +44 -0
  51. engineering_process-1.0.0/tests/test_automation.py +107 -0
  52. engineering_process-1.0.0/tests/test_cli.py +78 -0
  53. engineering_process-1.0.0/tests/test_commands.py +169 -0
  54. engineering_process-1.0.0/tests/test_contracts.py +67 -0
  55. engineering_process-1.0.0/tests/test_lifecycle.py +432 -0
  56. engineering_process-1.0.0/tests/test_publication_compat.py +65 -0
  57. engineering_process-1.0.0/tests/test_release.py +139 -0
  58. engineering_process-1.0.0/tests/test_repository.py +52 -0
  59. engineering_process-1.0.0/tests/test_skills.py +53 -0
  60. engineering_process-0.9.0/MANIFEST.in +0 -2
  61. engineering_process-0.9.0/PKG-INFO +0 -1024
  62. engineering_process-0.9.0/PROCESS_IMPROVEMENT.md +0 -140
  63. engineering_process-0.9.0/PRODUCTION_STANDARD.md +0 -311
  64. engineering_process-0.9.0/README.md +0 -988
  65. engineering_process-0.9.0/VERSIONING.md +0 -403
  66. engineering_process-0.9.0/bundles.json +0 -43
  67. engineering_process-0.9.0/engineering_process/_download_worker.py +0 -73
  68. engineering_process-0.9.0/engineering_process/_supervisor_posix.py +0 -176
  69. engineering_process-0.9.0/engineering_process/adoption.py +0 -946
  70. engineering_process-0.9.0/engineering_process/artifact_attestation.py +0 -441
  71. engineering_process-0.9.0/engineering_process/bootstrap.py +0 -248
  72. engineering_process-0.9.0/engineering_process/bounded_process.py +0 -236
  73. engineering_process-0.9.0/engineering_process/bundles.py +0 -99
  74. engineering_process-0.9.0/engineering_process/cli.py +0 -2933
  75. engineering_process-0.9.0/engineering_process/command_catalog.py +0 -36
  76. engineering_process-0.9.0/engineering_process/contracts.py +0 -7028
  77. engineering_process-0.9.0/engineering_process/diagnostics.py +0 -95
  78. engineering_process-0.9.0/engineering_process/distribution.py +0 -261
  79. engineering_process-0.9.0/engineering_process/distribution_verify.py +0 -569
  80. engineering_process-0.9.0/engineering_process/environment.py +0 -924
  81. engineering_process-0.9.0/engineering_process/evidence.py +0 -1359
  82. engineering_process-0.9.0/engineering_process/evidence_transport.py +0 -93
  83. engineering_process-0.9.0/engineering_process/git.py +0 -279
  84. engineering_process-0.9.0/engineering_process/git_attributes.py +0 -81
  85. engineering_process-0.9.0/engineering_process/impact.py +0 -364
  86. engineering_process-0.9.0/engineering_process/improvement.py +0 -1308
  87. engineering_process-0.9.0/engineering_process/lifecycle.py +0 -4615
  88. engineering_process-0.9.0/engineering_process/lifecycle_routes.py +0 -107
  89. engineering_process-0.9.0/engineering_process/managed.py +0 -89
  90. engineering_process-0.9.0/engineering_process/markdown.py +0 -78
  91. engineering_process-0.9.0/engineering_process/process_graph.py +0 -360
  92. engineering_process-0.9.0/engineering_process/publication.py +0 -1981
  93. engineering_process-0.9.0/engineering_process/recommendation.py +0 -517
  94. engineering_process-0.9.0/engineering_process/release.py +0 -395
  95. engineering_process-0.9.0/engineering_process/release_candidate.py +0 -904
  96. engineering_process-0.9.0/engineering_process/remote_verification.py +0 -511
  97. engineering_process-0.9.0/engineering_process/requirements-build.txt +0 -1
  98. engineering_process-0.9.0/engineering_process/requirements-dev.txt +0 -10
  99. engineering_process-0.9.0/engineering_process/requirements-release.txt +0 -30
  100. engineering_process-0.9.0/engineering_process/requirements-runtime.txt +0 -4
  101. engineering_process-0.9.0/engineering_process/runner.py +0 -389
  102. engineering_process-0.9.0/engineering_process/runtime.py +0 -55
  103. engineering_process-0.9.0/engineering_process/skills.py +0 -225
  104. engineering_process-0.9.0/engineering_process/supplemental.py +0 -481
  105. engineering_process-0.9.0/engineering_process/syncing.py +0 -900
  106. engineering_process-0.9.0/engineering_process/tooling.py +0 -937
  107. engineering_process-0.9.0/engineering_process/transition.py +0 -2606
  108. engineering_process-0.9.0/engineering_process.egg-info/PKG-INFO +0 -1024
  109. engineering_process-0.9.0/engineering_process.egg-info/SOURCES.txt +0 -207
  110. engineering_process-0.9.0/engineering_process.egg-info/requires.txt +0 -20
  111. engineering_process-0.9.0/examples/adoption-migration.json +0 -77
  112. engineering_process-0.9.0/examples/authority-transition-evidence.json +0 -42
  113. engineering_process-0.9.0/examples/authority-transition-request.json +0 -43
  114. engineering_process-0.9.0/examples/automation-policy.json +0 -30
  115. engineering_process-0.9.0/examples/automation-process-adoption-policy.json +0 -36
  116. engineering_process-0.9.0/examples/automation-process-adoption-proposal.json +0 -174
  117. engineering_process-0.9.0/examples/automation-proposal-policy.json +0 -30
  118. engineering_process-0.9.0/examples/automation-proposal.json +0 -72
  119. engineering_process-0.9.0/examples/bootstrap-adoption-consumption.json +0 -17
  120. engineering_process-0.9.0/examples/bootstrap-adoption-intent.json +0 -34
  121. engineering_process-0.9.0/examples/change.json +0 -75
  122. engineering_process-0.9.0/examples/improvement-catalog.json +0 -24
  123. engineering_process-0.9.0/examples/improvement-disposition.json +0 -36
  124. engineering_process-0.9.0/examples/improvement-reproduction.json +0 -40
  125. engineering_process-0.9.0/examples/improvement-resolution.json +0 -26
  126. engineering_process-0.9.0/examples/improvement-signal.json +0 -50
  127. engineering_process-0.9.0/examples/plan-decision-review-assignment.json +0 -45
  128. engineering_process-0.9.0/examples/plan-decision-review.json +0 -26
  129. engineering_process-0.9.0/examples/plan.json +0 -40
  130. engineering_process-0.9.0/examples/project.json +0 -108
  131. engineering_process-0.9.0/examples/protected-transition-policy.json +0 -16
  132. engineering_process-0.9.0/examples/recommendation-resolution.json +0 -21
  133. engineering_process-0.9.0/examples/recommendation-review-assignment.json +0 -22
  134. engineering_process-0.9.0/examples/recommendation-review.json +0 -60
  135. engineering_process-0.9.0/examples/recommendation.json +0 -89
  136. engineering_process-0.9.0/examples/release-authority-transition.json +0 -32
  137. engineering_process-0.9.0/examples/release-change.json +0 -12
  138. engineering_process-0.9.0/examples/release.json +0 -42
  139. engineering_process-0.9.0/examples/remote-verification-evidence.json +0 -26
  140. engineering_process-0.9.0/examples/remote-verification-request.json +0 -40
  141. engineering_process-0.9.0/examples/review.json +0 -50
  142. engineering_process-0.9.0/improvement-catalog.json +0 -113
  143. engineering_process-0.9.0/process-graph.json +0 -151
  144. engineering_process-0.9.0/process_assets/skills/assess-design/SKILL.md +0 -59
  145. engineering_process-0.9.0/process_assets/skills/build-frontend/SKILL.md +0 -38
  146. engineering_process-0.9.0/process_assets/skills/build-frontend-foundation/SKILL.md +0 -36
  147. engineering_process-0.9.0/process_assets/skills/change-api/SKILL.md +0 -36
  148. engineering_process-0.9.0/process_assets/skills/cross-repo-change/SKILL.md +0 -43
  149. engineering_process-0.9.0/process_assets/skills/define-change-contract/SKILL.md +0 -51
  150. engineering_process-0.9.0/process_assets/skills/design-module/SKILL.md +0 -37
  151. engineering_process-0.9.0/process_assets/skills/evolve-process/SKILL.md +0 -86
  152. engineering_process-0.9.0/process_assets/skills/finish-change/SKILL.md +0 -44
  153. engineering_process-0.9.0/process_assets/skills/govern-ui/SKILL.md +0 -40
  154. engineering_process-0.9.0/process_assets/skills/implement-change/SKILL.md +0 -69
  155. engineering_process-0.9.0/process_assets/skills/implement-module/SKILL.md +0 -36
  156. engineering_process-0.9.0/process_assets/skills/implement-use-case/SKILL.md +0 -36
  157. engineering_process-0.9.0/process_assets/skills/integrate-mcp/SKILL.md +0 -37
  158. engineering_process-0.9.0/process_assets/skills/maintain-docs/SKILL.md +0 -35
  159. engineering_process-0.9.0/process_assets/skills/plan-change/SKILL.md +0 -54
  160. engineering_process-0.9.0/process_assets/skills/publish-change/SKILL.md +0 -120
  161. engineering_process-0.9.0/process_assets/skills/review-change/SKILL.md +0 -92
  162. engineering_process-0.9.0/process_assets/skills/run-change/SKILL.md +0 -90
  163. engineering_process-0.9.0/process_assets/skills/run-change/references/execution.md +0 -385
  164. engineering_process-0.9.0/process_assets/skills/run-project-command/SKILL.md +0 -59
  165. engineering_process-0.9.0/process_assets/skills/specify-use-case/SKILL.md +0 -37
  166. engineering_process-0.9.0/process_assets/skills/verify-change/SKILL.md +0 -57
  167. engineering_process-0.9.0/pyproject.toml +0 -191
  168. engineering_process-0.9.0/release.json +0 -87
  169. engineering_process-0.9.0/schemas/adoption-migration.schema.json +0 -38
  170. engineering_process-0.9.0/schemas/authority-transition-evidence.schema.json +0 -53
  171. engineering_process-0.9.0/schemas/authority-transition-request.schema.json +0 -67
  172. engineering_process-0.9.0/schemas/automation-policy.schema.json +0 -63
  173. engineering_process-0.9.0/schemas/automation-proposal-policy.schema.json +0 -193
  174. engineering_process-0.9.0/schemas/automation-proposal.schema.json +0 -432
  175. engineering_process-0.9.0/schemas/bootstrap-adoption-consumption.schema.json +0 -23
  176. engineering_process-0.9.0/schemas/bootstrap-adoption-intent.schema.json +0 -32
  177. engineering_process-0.9.0/schemas/change.schema.json +0 -281
  178. engineering_process-0.9.0/schemas/evidence-receipt.schema.json +0 -206
  179. engineering_process-0.9.0/schemas/improvement-catalog.schema.json +0 -89
  180. engineering_process-0.9.0/schemas/improvement-disposition.schema.json +0 -167
  181. engineering_process-0.9.0/schemas/improvement-reproduction.schema.json +0 -89
  182. engineering_process-0.9.0/schemas/improvement-resolution.schema.json +0 -65
  183. engineering_process-0.9.0/schemas/improvement-signal.schema.json +0 -235
  184. engineering_process-0.9.0/schemas/lifecycle.schema.json +0 -382
  185. engineering_process-0.9.0/schemas/plan-decision-review-assignment.schema.json +0 -124
  186. engineering_process-0.9.0/schemas/plan-decision-review.schema.json +0 -81
  187. engineering_process-0.9.0/schemas/plan.schema.json +0 -222
  188. engineering_process-0.9.0/schemas/process-graph.schema.json +0 -48
  189. engineering_process-0.9.0/schemas/process-lock.schema.json +0 -39
  190. engineering_process-0.9.0/schemas/protected-transition-policy.schema.json +0 -23
  191. engineering_process-0.9.0/schemas/recommendation-resolution.schema.json +0 -60
  192. engineering_process-0.9.0/schemas/recommendation-review-assignment.schema.json +0 -56
  193. engineering_process-0.9.0/schemas/recommendation-review.schema.json +0 -112
  194. engineering_process-0.9.0/schemas/recommendation.schema.json +0 -179
  195. engineering_process-0.9.0/schemas/release-change.schema.json +0 -54
  196. engineering_process-0.9.0/schemas/release.schema.json +0 -175
  197. engineering_process-0.9.0/schemas/remote-verification-evidence.schema.json +0 -90
  198. engineering_process-0.9.0/schemas/remote-verification-request.schema.json +0 -145
  199. engineering_process-0.9.0/schemas/review.schema.json +0 -310
  200. engineering_process-0.9.0/schemas/reviewer-attestation.schema.json +0 -30
  201. engineering_process-0.9.0/schemas/supplemental-verification.schema.json +0 -393
  202. engineering_process-0.9.0/schemas/verification.schema.json +0 -475
  203. engineering_process-0.9.0/templates/AGENTS.process.md +0 -17
  204. engineering_process-0.9.0/templates/PULL_REQUEST_TEMPLATE.md +0 -27
  205. engineering_process-0.9.0/tests/test_adoption.py +0 -629
  206. engineering_process-0.9.0/tests/test_adoption_runner.py +0 -701
  207. engineering_process-0.9.0/tests/test_artifact_attestation.py +0 -269
  208. engineering_process-0.9.0/tests/test_bootstrap.py +0 -328
  209. engineering_process-0.9.0/tests/test_bounded_process.py +0 -229
  210. engineering_process-0.9.0/tests/test_bundles.py +0 -71
  211. engineering_process-0.9.0/tests/test_cli.py +0 -892
  212. engineering_process-0.9.0/tests/test_completed_release_dispatch.py +0 -249
  213. engineering_process-0.9.0/tests/test_completion_evidence_transport.py +0 -91
  214. engineering_process-0.9.0/tests/test_contracts.py +0 -1749
  215. engineering_process-0.9.0/tests/test_diagnostics.py +0 -80
  216. engineering_process-0.9.0/tests/test_distribution.py +0 -182
  217. engineering_process-0.9.0/tests/test_distribution_verify.py +0 -217
  218. engineering_process-0.9.0/tests/test_environment.py +0 -741
  219. engineering_process-0.9.0/tests/test_evals.py +0 -59
  220. engineering_process-0.9.0/tests/test_impact.py +0 -269
  221. engineering_process-0.9.0/tests/test_improvement.py +0 -499
  222. engineering_process-0.9.0/tests/test_lifecycle.py +0 -3566
  223. engineering_process-0.9.0/tests/test_process_graph.py +0 -174
  224. engineering_process-0.9.0/tests/test_process_install.py +0 -446
  225. engineering_process-0.9.0/tests/test_publication.py +0 -2232
  226. engineering_process-0.9.0/tests/test_publish_event.py +0 -57
  227. engineering_process-0.9.0/tests/test_pypi_publication.py +0 -156
  228. engineering_process-0.9.0/tests/test_recommendation.py +0 -578
  229. engineering_process-0.9.0/tests/test_release.py +0 -422
  230. engineering_process-0.9.0/tests/test_release_candidate.py +0 -722
  231. engineering_process-0.9.0/tests/test_release_candidate_boundary.py +0 -92
  232. engineering_process-0.9.0/tests/test_release_completion_identity.py +0 -141
  233. engineering_process-0.9.0/tests/test_release_evidence_restore.py +0 -259
  234. engineering_process-0.9.0/tests/test_release_evidence_selection.py +0 -164
  235. engineering_process-0.9.0/tests/test_release_plan_continuation.py +0 -115
  236. engineering_process-0.9.0/tests/test_release_plan_review_dispatch.py +0 -170
  237. engineering_process-0.9.0/tests/test_release_preparation.py +0 -68
  238. engineering_process-0.9.0/tests/test_release_qualification.py +0 -163
  239. engineering_process-0.9.0/tests/test_remote_verification.py +0 -833
  240. engineering_process-0.9.0/tests/test_remote_verification_adapter.py +0 -402
  241. engineering_process-0.9.0/tests/test_review_context_handoff.py +0 -150
  242. engineering_process-0.9.0/tests/test_runner.py +0 -571
  243. engineering_process-0.9.0/tests/test_runtime.py +0 -109
  244. engineering_process-0.9.0/tests/test_schemas.py +0 -167
  245. engineering_process-0.9.0/tests/test_self_hosting.py +0 -896
  246. engineering_process-0.9.0/tests/test_skills.py +0 -255
  247. engineering_process-0.9.0/tests/test_source_checkout.py +0 -473
  248. engineering_process-0.9.0/tests/test_supervision.py +0 -310
  249. engineering_process-0.9.0/tests/test_supplemental.py +0 -322
  250. engineering_process-0.9.0/tests/test_syncing.py +0 -828
  251. engineering_process-0.9.0/tests/test_test_suite.py +0 -496
  252. engineering_process-0.9.0/tests/test_tooling.py +0 -653
  253. engineering_process-0.9.0/tests/test_transition.py +0 -1090
  254. engineering_process-0.9.0/tests/test_windows_job.py +0 -440
  255. {engineering_process-0.9.0 → engineering_process-1.0.0}/LICENSE +0 -0
  256. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/__main__.py +0 -0
  257. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process/_windows_job.py +0 -0
  258. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process.egg-info/dependency_links.txt +0 -0
  259. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process.egg-info/entry_points.txt +0 -0
  260. {engineering_process-0.9.0 → engineering_process-1.0.0}/engineering_process.egg-info/top_level.txt +0 -0
  261. {engineering_process-0.9.0 → engineering_process-1.0.0}/setup.cfg +0 -0
  262. {engineering_process-0.9.0 → engineering_process-1.0.0}/templates/adopt-process-windows-job.py +0 -0
@@ -0,0 +1,4 @@
1
+ include process-graph.json
2
+ recursive-include process_assets/skills SKILL.md
3
+ recursive-include schemas *.json
4
+ recursive-include templates *.md *.py
@@ -0,0 +1,279 @@
1
+ Metadata-Version: 2.4
2
+ Name: engineering-process
3
+ Version: 1.0.0
4
+ Summary: A small agent-neutral engineering lifecycle with managed adoption
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/phuongnse/engineering-process
7
+ Project-URL: Issues, https://github.com/phuongnse/engineering-process/issues
8
+ Project-URL: Repository, https://github.com/phuongnse/engineering-process.git
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3 :: Only
14
+ Classifier: Topic :: Software Development :: Quality Assurance
15
+ Requires-Python: >=3.11
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Requires-Dist: jsonschema==4.26.0
19
+ Provides-Extra: dev
20
+ Requires-Dist: build==1.5.0; extra == "dev"
21
+ Requires-Dist: packaging==26.3; extra == "dev"
22
+ Requires-Dist: pyproject-hooks==1.2.0; extra == "dev"
23
+ Dynamic: license-file
24
+
25
+ # Engineering Process
26
+
27
+ Engineering Process is a small, agent-neutral way to drive repository changes through
28
+ one auditable path:
29
+
30
+ start → plan → implement → verify → independent review → finish
31
+
32
+ Portable skills explain what to do. processctl owns state transitions and current
33
+ evidence. Each consumer owns its product rules, exact commands, merge policy, and
34
+ release decisions.
35
+
36
+ ## Architecture
37
+
38
+ The distribution has four live parts:
39
+
40
+ 1. Eight skills under process_assets/skills, all reachable from run-change.
41
+ 2. One processctl state machine under engineering_process/lifecycle.py.
42
+ 3. Eleven JSON Schemas that are loaded directly by the runtime.
43
+ 4. One adoption transaction that synchronizes managed skills and configuration from
44
+ an exact hash-locked package.
45
+
46
+ Lifecycle state is local under .process/runs and completion creates one bounded receipt
47
+ under .process/receipts. Both paths are ignored by Git. Verification evidence is bound
48
+ to HEAD plus a fingerprint of tracked and non-ignored untracked files. Any relevant
49
+ mutation invalidates it.
50
+
51
+ Independent review is one direct rule: neither the reviewer actor nor reviewer context
52
+ may have implemented the current cycle. There is no attestation hierarchy,
53
+ recommendation chain, authority-transition protocol, remote-evidence federation, or
54
+ second handwritten validator.
55
+
56
+ ## Consumer configuration
57
+
58
+ Python 3.11 or newer and Git are required. A consumer owns .process/project.json:
59
+
60
+ {
61
+ "schemaVersion": 5,
62
+ "project": "my-project",
63
+ "lifecycle": {
64
+ "requiredProfiles": ["development", "review"]
65
+ },
66
+ "setup": [
67
+ {
68
+ "id": "prepare-project-tool",
69
+ "run": ["npm", "rebuild", "native-tool"],
70
+ "timeoutSeconds": 300
71
+ }
72
+ ],
73
+ "profiles": {
74
+ "development": [
75
+ {
76
+ "id": "tests",
77
+ "run": ["python", "-m", "unittest"],
78
+ "timeoutSeconds": 600
79
+ }
80
+ ],
81
+ "review": [
82
+ {
83
+ "id": "package",
84
+ "run": ["python", "-m", "build"],
85
+ "timeoutSeconds": 600
86
+ }
87
+ ]
88
+ }
89
+ }
90
+
91
+ Commands are argument arrays, never shell strings. Each command has a finite timeout.
92
+ Output has a hard aggregate budget; evidence stores byte counts and hashes, never raw
93
+ stdout or stderr that could contain secrets.
94
+
95
+ Pin the process in requirements/process.in:
96
+
97
+ --only-binary :all:
98
+ engineering-process==0.9.0
99
+
100
+ Generate requirements/process.txt with hashes, install that lock, then run:
101
+
102
+ processctl adoption apply \
103
+ --project-root . \
104
+ --requirements-lock requirements/process.txt
105
+
106
+ The transaction writes only managed surfaces:
107
+
108
+ - .agents/skills/<distributed-skill>
109
+ - the marked block in .github/PULL_REQUEST_TEMPLATE.md
110
+ - .process/adopt-process.py
111
+ - .process/process.lock
112
+ - the marked engineering-process block in AGENTS.md
113
+ - a schema migration of .process/project.json
114
+
115
+ It removes obsolete skills named by the previous process lock and preserves
116
+ consumer-owned skills and instructions. Applying the same version twice is a no-op.
117
+ The legacy managed runner can enter 1.0 directly, so consumers do not need a chain of
118
+ per-version migration documents. The same transaction deletes the retired migration
119
+ directory and standing automation policy; the Windows Job Object helper remains a
120
+ managed runtime-containment asset.
121
+
122
+ The three authored lifecycle documents stay intentionally small. A change contains
123
+ source, scope, outcomes, and profiles; a plan binds its digest; a review binds the
124
+ assigned checkpoint:
125
+
126
+ {
127
+ "schemaVersion": 5,
128
+ "id": "change-123",
129
+ "summary": "Deliver the accepted behavior",
130
+ "source": "issue-123",
131
+ "comparisonBase": "main",
132
+ "risk": "medium",
133
+ "affectedProjects": ["my-project"],
134
+ "acceptanceCriteria": [
135
+ {"id": "works", "outcome": "The observable behavior works"}
136
+ ],
137
+ "requiredProfiles": ["development", "review"]
138
+ }
139
+
140
+ {
141
+ "schemaVersion": 4,
142
+ "changeId": "change-123",
143
+ "contractDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
144
+ "approach": "Implement through the existing owner.",
145
+ "workItems": [
146
+ {
147
+ "id": "implementation",
148
+ "outcome": "Deliver and prove the behavior",
149
+ "affectedPaths": ["src/", "tests/"]
150
+ }
151
+ ],
152
+ "risks": []
153
+ }
154
+
155
+ {
156
+ "schemaVersion": 5,
157
+ "changeId": "change-123",
158
+ "reviewer": {
159
+ "actorId": "review-agent",
160
+ "contextId": "review-123",
161
+ "kind": "agent"
162
+ },
163
+ "checkpoint": {
164
+ "head": "0000000000000000000000000000000000000000",
165
+ "fingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
166
+ "fileCount": 1,
167
+ "byteCount": 1
168
+ },
169
+ "verdict": "approved",
170
+ "summary": "Accepted outcomes and evidence are complete.",
171
+ "findings": []
172
+ }
173
+
174
+ ## Running a change
175
+
176
+ Create and validate a change contract, then register it:
177
+
178
+ processctl contract validate --kind change change.json
179
+ processctl change start \
180
+ --actor implementation-agent \
181
+ --context change-123 \
182
+ --contract change.json
183
+
184
+ Register a plan bound to the returned contract digest:
185
+
186
+ processctl change plan \
187
+ --change-id change-123 \
188
+ --actor implementation-agent \
189
+ --context change-123 \
190
+ --plan plan.json
191
+
192
+ Register implementation and run every required profile:
193
+
194
+ processctl change implement \
195
+ --change-id change-123 \
196
+ --actor implementation-agent \
197
+ --context change-123
198
+ processctl change verify --change-id change-123 --profile development
199
+ processctl change verify --change-id change-123 --profile review
200
+
201
+ Assign an independent reviewer and submit its report:
202
+
203
+ processctl change review start \
204
+ --change-id change-123 \
205
+ --actor review-agent \
206
+ --context review-123
207
+
208
+ Write the report at the returned reportPath (under .process/runs, so it does not
209
+ change the reviewed snapshot), then submit it:
210
+
211
+ processctl change review submit \
212
+ --change-id change-123 \
213
+ --review .process/runs/change-123/review-1.json
214
+
215
+ changes-requested returns to implementation and increments the cycle. The first
216
+ review is bounded by the frozen acceptance criteria. The same reviewer
217
+ checks correction diffs; new blockers are admitted only for remediation regressions
218
+ or a reasoned P0/P1 miss inside the original contract. A third changes-requested
219
+ review blocks the change after two correction cycles—it never waives review.
220
+
221
+ approved can finish only while the repository still matches the reviewed snapshot:
222
+
223
+ processctl change finish \
224
+ --change-id change-123 \
225
+ --actor coordinator \
226
+ --context finish-123
227
+
228
+ At any point:
229
+
230
+ processctl change status --change-id change-123 --json
231
+
232
+ ## Release to consumer PR
233
+
234
+ Every opted-in consumer uses Renovate's pip-compile manager. Its engineering-process
235
+ package rule is enabled, never automerges, and runs exactly:
236
+
237
+ python .process/adopt-process.py --project-root . --requirements-lock requirements/process.txt
238
+
239
+ postUpgradeTasks.fileFilters includes the managed paths, so Renovate commits the new
240
+ hash lock and the fully materialized process in the same pull request. A self-hosted
241
+ Renovate administrator must allow only this anchored command and must keep shell
242
+ execution disabled:
243
+
244
+ ^python \.process/adopt-process\.py --project-root \. --requirements-lock requirements/process\.txt$
245
+
246
+ The release workflow publishes exact wheel and sdist bytes to PyPI, verifies their
247
+ registry hashes, creates the immutable GitHub release, and sends one authenticated
248
+ engineering-process-published event to renovate-ops. That control plane runs Renovate
249
+ for each repository whose protected config explicitly opts in. Each consumer's normal
250
+ CI and independent review decide whether its PR can merge.
251
+
252
+ This repository opts in through .github/renovate.json, so it receives the same
253
+ adoption PR as every other consumer. See SELF_HOSTING.md and RELEASING.md.
254
+
255
+ ## Compatibility
256
+
257
+ Version 1.x retains a few small pre-1.0 command shapes so existing consumers can
258
+ pass their first adoption PR:
259
+
260
+ - setup runs only the consumer-owned setup arrays migrated from its old manifest;
261
+ - doctor --profile validates the selected profile.
262
+ - publication validate-branch, validate-commit, validate-range, and validate-pr remain
263
+ read-only while consumers move those conventions into their own repositories.
264
+
265
+ They do not restore the removed governance machinery and can be deleted in the next
266
+ package major after all known consumers have adopted 1.x.
267
+
268
+ ## Development
269
+
270
+ python -m pip install \
271
+ -r engineering_process/requirements-runtime.txt \
272
+ -r engineering_process/requirements-dev.txt \
273
+ -r engineering_process/requirements-build.txt
274
+ python verification/run_test_suite.py
275
+ python processctl.py skills validate --root process_assets/skills
276
+ python verification/verify_distribution.py
277
+
278
+ The process repository requires a real consumer incident or request in every process
279
+ change contract. PROCESS_IMPROVEMENT.md explains that brake.
@@ -0,0 +1,255 @@
1
+ # Engineering Process
2
+
3
+ Engineering Process is a small, agent-neutral way to drive repository changes through
4
+ one auditable path:
5
+
6
+ start → plan → implement → verify → independent review → finish
7
+
8
+ Portable skills explain what to do. processctl owns state transitions and current
9
+ evidence. Each consumer owns its product rules, exact commands, merge policy, and
10
+ release decisions.
11
+
12
+ ## Architecture
13
+
14
+ The distribution has four live parts:
15
+
16
+ 1. Eight skills under process_assets/skills, all reachable from run-change.
17
+ 2. One processctl state machine under engineering_process/lifecycle.py.
18
+ 3. Eleven JSON Schemas that are loaded directly by the runtime.
19
+ 4. One adoption transaction that synchronizes managed skills and configuration from
20
+ an exact hash-locked package.
21
+
22
+ Lifecycle state is local under .process/runs and completion creates one bounded receipt
23
+ under .process/receipts. Both paths are ignored by Git. Verification evidence is bound
24
+ to HEAD plus a fingerprint of tracked and non-ignored untracked files. Any relevant
25
+ mutation invalidates it.
26
+
27
+ Independent review is one direct rule: neither the reviewer actor nor reviewer context
28
+ may have implemented the current cycle. There is no attestation hierarchy,
29
+ recommendation chain, authority-transition protocol, remote-evidence federation, or
30
+ second handwritten validator.
31
+
32
+ ## Consumer configuration
33
+
34
+ Python 3.11 or newer and Git are required. A consumer owns .process/project.json:
35
+
36
+ {
37
+ "schemaVersion": 5,
38
+ "project": "my-project",
39
+ "lifecycle": {
40
+ "requiredProfiles": ["development", "review"]
41
+ },
42
+ "setup": [
43
+ {
44
+ "id": "prepare-project-tool",
45
+ "run": ["npm", "rebuild", "native-tool"],
46
+ "timeoutSeconds": 300
47
+ }
48
+ ],
49
+ "profiles": {
50
+ "development": [
51
+ {
52
+ "id": "tests",
53
+ "run": ["python", "-m", "unittest"],
54
+ "timeoutSeconds": 600
55
+ }
56
+ ],
57
+ "review": [
58
+ {
59
+ "id": "package",
60
+ "run": ["python", "-m", "build"],
61
+ "timeoutSeconds": 600
62
+ }
63
+ ]
64
+ }
65
+ }
66
+
67
+ Commands are argument arrays, never shell strings. Each command has a finite timeout.
68
+ Output has a hard aggregate budget; evidence stores byte counts and hashes, never raw
69
+ stdout or stderr that could contain secrets.
70
+
71
+ Pin the process in requirements/process.in:
72
+
73
+ --only-binary :all:
74
+ engineering-process==0.9.0
75
+
76
+ Generate requirements/process.txt with hashes, install that lock, then run:
77
+
78
+ processctl adoption apply \
79
+ --project-root . \
80
+ --requirements-lock requirements/process.txt
81
+
82
+ The transaction writes only managed surfaces:
83
+
84
+ - .agents/skills/<distributed-skill>
85
+ - the marked block in .github/PULL_REQUEST_TEMPLATE.md
86
+ - .process/adopt-process.py
87
+ - .process/process.lock
88
+ - the marked engineering-process block in AGENTS.md
89
+ - a schema migration of .process/project.json
90
+
91
+ It removes obsolete skills named by the previous process lock and preserves
92
+ consumer-owned skills and instructions. Applying the same version twice is a no-op.
93
+ The legacy managed runner can enter 1.0 directly, so consumers do not need a chain of
94
+ per-version migration documents. The same transaction deletes the retired migration
95
+ directory and standing automation policy; the Windows Job Object helper remains a
96
+ managed runtime-containment asset.
97
+
98
+ The three authored lifecycle documents stay intentionally small. A change contains
99
+ source, scope, outcomes, and profiles; a plan binds its digest; a review binds the
100
+ assigned checkpoint:
101
+
102
+ {
103
+ "schemaVersion": 5,
104
+ "id": "change-123",
105
+ "summary": "Deliver the accepted behavior",
106
+ "source": "issue-123",
107
+ "comparisonBase": "main",
108
+ "risk": "medium",
109
+ "affectedProjects": ["my-project"],
110
+ "acceptanceCriteria": [
111
+ {"id": "works", "outcome": "The observable behavior works"}
112
+ ],
113
+ "requiredProfiles": ["development", "review"]
114
+ }
115
+
116
+ {
117
+ "schemaVersion": 4,
118
+ "changeId": "change-123",
119
+ "contractDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
120
+ "approach": "Implement through the existing owner.",
121
+ "workItems": [
122
+ {
123
+ "id": "implementation",
124
+ "outcome": "Deliver and prove the behavior",
125
+ "affectedPaths": ["src/", "tests/"]
126
+ }
127
+ ],
128
+ "risks": []
129
+ }
130
+
131
+ {
132
+ "schemaVersion": 5,
133
+ "changeId": "change-123",
134
+ "reviewer": {
135
+ "actorId": "review-agent",
136
+ "contextId": "review-123",
137
+ "kind": "agent"
138
+ },
139
+ "checkpoint": {
140
+ "head": "0000000000000000000000000000000000000000",
141
+ "fingerprint": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
142
+ "fileCount": 1,
143
+ "byteCount": 1
144
+ },
145
+ "verdict": "approved",
146
+ "summary": "Accepted outcomes and evidence are complete.",
147
+ "findings": []
148
+ }
149
+
150
+ ## Running a change
151
+
152
+ Create and validate a change contract, then register it:
153
+
154
+ processctl contract validate --kind change change.json
155
+ processctl change start \
156
+ --actor implementation-agent \
157
+ --context change-123 \
158
+ --contract change.json
159
+
160
+ Register a plan bound to the returned contract digest:
161
+
162
+ processctl change plan \
163
+ --change-id change-123 \
164
+ --actor implementation-agent \
165
+ --context change-123 \
166
+ --plan plan.json
167
+
168
+ Register implementation and run every required profile:
169
+
170
+ processctl change implement \
171
+ --change-id change-123 \
172
+ --actor implementation-agent \
173
+ --context change-123
174
+ processctl change verify --change-id change-123 --profile development
175
+ processctl change verify --change-id change-123 --profile review
176
+
177
+ Assign an independent reviewer and submit its report:
178
+
179
+ processctl change review start \
180
+ --change-id change-123 \
181
+ --actor review-agent \
182
+ --context review-123
183
+
184
+ Write the report at the returned reportPath (under .process/runs, so it does not
185
+ change the reviewed snapshot), then submit it:
186
+
187
+ processctl change review submit \
188
+ --change-id change-123 \
189
+ --review .process/runs/change-123/review-1.json
190
+
191
+ changes-requested returns to implementation and increments the cycle. The first
192
+ review is bounded by the frozen acceptance criteria. The same reviewer
193
+ checks correction diffs; new blockers are admitted only for remediation regressions
194
+ or a reasoned P0/P1 miss inside the original contract. A third changes-requested
195
+ review blocks the change after two correction cycles—it never waives review.
196
+
197
+ approved can finish only while the repository still matches the reviewed snapshot:
198
+
199
+ processctl change finish \
200
+ --change-id change-123 \
201
+ --actor coordinator \
202
+ --context finish-123
203
+
204
+ At any point:
205
+
206
+ processctl change status --change-id change-123 --json
207
+
208
+ ## Release to consumer PR
209
+
210
+ Every opted-in consumer uses Renovate's pip-compile manager. Its engineering-process
211
+ package rule is enabled, never automerges, and runs exactly:
212
+
213
+ python .process/adopt-process.py --project-root . --requirements-lock requirements/process.txt
214
+
215
+ postUpgradeTasks.fileFilters includes the managed paths, so Renovate commits the new
216
+ hash lock and the fully materialized process in the same pull request. A self-hosted
217
+ Renovate administrator must allow only this anchored command and must keep shell
218
+ execution disabled:
219
+
220
+ ^python \.process/adopt-process\.py --project-root \. --requirements-lock requirements/process\.txt$
221
+
222
+ The release workflow publishes exact wheel and sdist bytes to PyPI, verifies their
223
+ registry hashes, creates the immutable GitHub release, and sends one authenticated
224
+ engineering-process-published event to renovate-ops. That control plane runs Renovate
225
+ for each repository whose protected config explicitly opts in. Each consumer's normal
226
+ CI and independent review decide whether its PR can merge.
227
+
228
+ This repository opts in through .github/renovate.json, so it receives the same
229
+ adoption PR as every other consumer. See SELF_HOSTING.md and RELEASING.md.
230
+
231
+ ## Compatibility
232
+
233
+ Version 1.x retains a few small pre-1.0 command shapes so existing consumers can
234
+ pass their first adoption PR:
235
+
236
+ - setup runs only the consumer-owned setup arrays migrated from its old manifest;
237
+ - doctor --profile validates the selected profile.
238
+ - publication validate-branch, validate-commit, validate-range, and validate-pr remain
239
+ read-only while consumers move those conventions into their own repositories.
240
+
241
+ They do not restore the removed governance machinery and can be deleted in the next
242
+ package major after all known consumers have adopted 1.x.
243
+
244
+ ## Development
245
+
246
+ python -m pip install \
247
+ -r engineering_process/requirements-runtime.txt \
248
+ -r engineering_process/requirements-dev.txt \
249
+ -r engineering_process/requirements-build.txt
250
+ python verification/run_test_suite.py
251
+ python processctl.py skills validate --root process_assets/skills
252
+ python verification/verify_distribution.py
253
+
254
+ The process repository requires a real consumer incident or request in every process
255
+ change contract. PROCESS_IMPROVEMENT.md explains that brake.
@@ -1,3 +1,3 @@
1
1
  """Agent-neutral engineering process."""
2
2
 
3
- VERSION = "0.9.0"
3
+ VERSION = "1.0.0"