engineering-process 0.8.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 (246) 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.8.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.8.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.8.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.8.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.8.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.8.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.8.0/MANIFEST.in +0 -2
  61. engineering_process-0.8.0/PKG-INFO +0 -950
  62. engineering_process-0.8.0/PROCESS_IMPROVEMENT.md +0 -132
  63. engineering_process-0.8.0/PRODUCTION_STANDARD.md +0 -271
  64. engineering_process-0.8.0/README.md +0 -914
  65. engineering_process-0.8.0/VERSIONING.md +0 -340
  66. engineering_process-0.8.0/bundles.json +0 -43
  67. engineering_process-0.8.0/engineering_process/_download_worker.py +0 -73
  68. engineering_process-0.8.0/engineering_process/_supervisor_posix.py +0 -176
  69. engineering_process-0.8.0/engineering_process/adoption.py +0 -941
  70. engineering_process-0.8.0/engineering_process/artifact_attestation.py +0 -423
  71. engineering_process-0.8.0/engineering_process/bootstrap.py +0 -248
  72. engineering_process-0.8.0/engineering_process/bounded_process.py +0 -236
  73. engineering_process-0.8.0/engineering_process/bundles.py +0 -99
  74. engineering_process-0.8.0/engineering_process/cli.py +0 -2625
  75. engineering_process-0.8.0/engineering_process/command_catalog.py +0 -31
  76. engineering_process-0.8.0/engineering_process/contracts.py +0 -6307
  77. engineering_process-0.8.0/engineering_process/diagnostics.py +0 -95
  78. engineering_process-0.8.0/engineering_process/distribution.py +0 -261
  79. engineering_process-0.8.0/engineering_process/distribution_verify.py +0 -558
  80. engineering_process-0.8.0/engineering_process/environment.py +0 -924
  81. engineering_process-0.8.0/engineering_process/evidence.py +0 -1091
  82. engineering_process-0.8.0/engineering_process/evidence_transport.py +0 -93
  83. engineering_process-0.8.0/engineering_process/git.py +0 -279
  84. engineering_process-0.8.0/engineering_process/git_attributes.py +0 -81
  85. engineering_process-0.8.0/engineering_process/impact.py +0 -364
  86. engineering_process-0.8.0/engineering_process/improvement.py +0 -1308
  87. engineering_process-0.8.0/engineering_process/lifecycle.py +0 -3719
  88. engineering_process-0.8.0/engineering_process/lifecycle_routes.py +0 -107
  89. engineering_process-0.8.0/engineering_process/managed.py +0 -89
  90. engineering_process-0.8.0/engineering_process/markdown.py +0 -78
  91. engineering_process-0.8.0/engineering_process/process_graph.py +0 -355
  92. engineering_process-0.8.0/engineering_process/publication.py +0 -1981
  93. engineering_process-0.8.0/engineering_process/recommendation.py +0 -517
  94. engineering_process-0.8.0/engineering_process/release.py +0 -375
  95. engineering_process-0.8.0/engineering_process/release_candidate.py +0 -836
  96. engineering_process-0.8.0/engineering_process/remote_verification.py +0 -498
  97. engineering_process-0.8.0/engineering_process/requirements-build.txt +0 -1
  98. engineering_process-0.8.0/engineering_process/requirements-dev.txt +0 -10
  99. engineering_process-0.8.0/engineering_process/requirements-release.txt +0 -30
  100. engineering_process-0.8.0/engineering_process/requirements-runtime.txt +0 -4
  101. engineering_process-0.8.0/engineering_process/runner.py +0 -389
  102. engineering_process-0.8.0/engineering_process/runtime.py +0 -55
  103. engineering_process-0.8.0/engineering_process/skills.py +0 -225
  104. engineering_process-0.8.0/engineering_process/supplemental.py +0 -471
  105. engineering_process-0.8.0/engineering_process/syncing.py +0 -900
  106. engineering_process-0.8.0/engineering_process/tooling.py +0 -937
  107. engineering_process-0.8.0/engineering_process.egg-info/PKG-INFO +0 -950
  108. engineering_process-0.8.0/engineering_process.egg-info/SOURCES.txt +0 -191
  109. engineering_process-0.8.0/engineering_process.egg-info/requires.txt +0 -20
  110. engineering_process-0.8.0/examples/adoption-migration.json +0 -77
  111. engineering_process-0.8.0/examples/automation-policy.json +0 -30
  112. engineering_process-0.8.0/examples/automation-process-adoption-policy.json +0 -36
  113. engineering_process-0.8.0/examples/automation-process-adoption-proposal.json +0 -174
  114. engineering_process-0.8.0/examples/automation-proposal-policy.json +0 -30
  115. engineering_process-0.8.0/examples/automation-proposal.json +0 -72
  116. engineering_process-0.8.0/examples/change.json +0 -47
  117. engineering_process-0.8.0/examples/improvement-catalog.json +0 -24
  118. engineering_process-0.8.0/examples/improvement-disposition.json +0 -36
  119. engineering_process-0.8.0/examples/improvement-reproduction.json +0 -40
  120. engineering_process-0.8.0/examples/improvement-resolution.json +0 -26
  121. engineering_process-0.8.0/examples/improvement-signal.json +0 -50
  122. engineering_process-0.8.0/examples/plan-decision-review-assignment.json +0 -45
  123. engineering_process-0.8.0/examples/plan-decision-review.json +0 -26
  124. engineering_process-0.8.0/examples/plan.json +0 -40
  125. engineering_process-0.8.0/examples/project.json +0 -108
  126. engineering_process-0.8.0/examples/recommendation-resolution.json +0 -21
  127. engineering_process-0.8.0/examples/recommendation-review-assignment.json +0 -22
  128. engineering_process-0.8.0/examples/recommendation-review.json +0 -60
  129. engineering_process-0.8.0/examples/recommendation.json +0 -89
  130. engineering_process-0.8.0/examples/release-change.json +0 -12
  131. engineering_process-0.8.0/examples/release.json +0 -42
  132. engineering_process-0.8.0/examples/remote-verification-evidence.json +0 -26
  133. engineering_process-0.8.0/examples/remote-verification-request.json +0 -40
  134. engineering_process-0.8.0/examples/review.json +0 -46
  135. engineering_process-0.8.0/improvement-catalog.json +0 -99
  136. engineering_process-0.8.0/process-graph.json +0 -151
  137. engineering_process-0.8.0/process_assets/skills/assess-design/SKILL.md +0 -59
  138. engineering_process-0.8.0/process_assets/skills/build-frontend/SKILL.md +0 -38
  139. engineering_process-0.8.0/process_assets/skills/build-frontend-foundation/SKILL.md +0 -36
  140. engineering_process-0.8.0/process_assets/skills/change-api/SKILL.md +0 -36
  141. engineering_process-0.8.0/process_assets/skills/cross-repo-change/SKILL.md +0 -43
  142. engineering_process-0.8.0/process_assets/skills/define-change-contract/SKILL.md +0 -44
  143. engineering_process-0.8.0/process_assets/skills/design-module/SKILL.md +0 -37
  144. engineering_process-0.8.0/process_assets/skills/evolve-process/SKILL.md +0 -75
  145. engineering_process-0.8.0/process_assets/skills/finish-change/SKILL.md +0 -40
  146. engineering_process-0.8.0/process_assets/skills/govern-ui/SKILL.md +0 -40
  147. engineering_process-0.8.0/process_assets/skills/implement-change/SKILL.md +0 -59
  148. engineering_process-0.8.0/process_assets/skills/implement-module/SKILL.md +0 -36
  149. engineering_process-0.8.0/process_assets/skills/implement-use-case/SKILL.md +0 -36
  150. engineering_process-0.8.0/process_assets/skills/integrate-mcp/SKILL.md +0 -37
  151. engineering_process-0.8.0/process_assets/skills/maintain-docs/SKILL.md +0 -35
  152. engineering_process-0.8.0/process_assets/skills/plan-change/SKILL.md +0 -54
  153. engineering_process-0.8.0/process_assets/skills/publish-change/SKILL.md +0 -114
  154. engineering_process-0.8.0/process_assets/skills/review-change/SKILL.md +0 -76
  155. engineering_process-0.8.0/process_assets/skills/run-change/SKILL.md +0 -76
  156. engineering_process-0.8.0/process_assets/skills/run-change/references/execution.md +0 -340
  157. engineering_process-0.8.0/process_assets/skills/run-project-command/SKILL.md +0 -59
  158. engineering_process-0.8.0/process_assets/skills/specify-use-case/SKILL.md +0 -37
  159. engineering_process-0.8.0/process_assets/skills/verify-change/SKILL.md +0 -52
  160. engineering_process-0.8.0/pyproject.toml +0 -180
  161. engineering_process-0.8.0/release.json +0 -53
  162. engineering_process-0.8.0/schemas/adoption-migration.schema.json +0 -38
  163. engineering_process-0.8.0/schemas/automation-policy.schema.json +0 -63
  164. engineering_process-0.8.0/schemas/automation-proposal-policy.schema.json +0 -193
  165. engineering_process-0.8.0/schemas/automation-proposal.schema.json +0 -432
  166. engineering_process-0.8.0/schemas/change.schema.json +0 -186
  167. engineering_process-0.8.0/schemas/evidence-receipt.schema.json +0 -165
  168. engineering_process-0.8.0/schemas/improvement-catalog.schema.json +0 -89
  169. engineering_process-0.8.0/schemas/improvement-disposition.schema.json +0 -167
  170. engineering_process-0.8.0/schemas/improvement-reproduction.schema.json +0 -89
  171. engineering_process-0.8.0/schemas/improvement-resolution.schema.json +0 -65
  172. engineering_process-0.8.0/schemas/improvement-signal.schema.json +0 -235
  173. engineering_process-0.8.0/schemas/lifecycle.schema.json +0 -228
  174. engineering_process-0.8.0/schemas/plan-decision-review-assignment.schema.json +0 -99
  175. engineering_process-0.8.0/schemas/plan-decision-review.schema.json +0 -81
  176. engineering_process-0.8.0/schemas/plan.schema.json +0 -222
  177. engineering_process-0.8.0/schemas/process-graph.schema.json +0 -48
  178. engineering_process-0.8.0/schemas/process-lock.schema.json +0 -39
  179. engineering_process-0.8.0/schemas/recommendation-resolution.schema.json +0 -60
  180. engineering_process-0.8.0/schemas/recommendation-review-assignment.schema.json +0 -56
  181. engineering_process-0.8.0/schemas/recommendation-review.schema.json +0 -112
  182. engineering_process-0.8.0/schemas/recommendation.schema.json +0 -178
  183. engineering_process-0.8.0/schemas/release-change.schema.json +0 -54
  184. engineering_process-0.8.0/schemas/release.schema.json +0 -129
  185. engineering_process-0.8.0/schemas/remote-verification-evidence.schema.json +0 -61
  186. engineering_process-0.8.0/schemas/remote-verification-request.schema.json +0 -116
  187. engineering_process-0.8.0/schemas/review.schema.json +0 -230
  188. engineering_process-0.8.0/schemas/reviewer-attestation.schema.json +0 -30
  189. engineering_process-0.8.0/schemas/supplemental-verification.schema.json +0 -354
  190. engineering_process-0.8.0/schemas/verification.schema.json +0 -411
  191. engineering_process-0.8.0/templates/AGENTS.process.md +0 -17
  192. engineering_process-0.8.0/templates/PULL_REQUEST_TEMPLATE.md +0 -27
  193. engineering_process-0.8.0/tests/test_adoption.py +0 -598
  194. engineering_process-0.8.0/tests/test_adoption_runner.py +0 -701
  195. engineering_process-0.8.0/tests/test_artifact_attestation.py +0 -269
  196. engineering_process-0.8.0/tests/test_bootstrap.py +0 -328
  197. engineering_process-0.8.0/tests/test_bounded_process.py +0 -229
  198. engineering_process-0.8.0/tests/test_bundles.py +0 -71
  199. engineering_process-0.8.0/tests/test_cli.py +0 -892
  200. engineering_process-0.8.0/tests/test_completed_release_dispatch.py +0 -249
  201. engineering_process-0.8.0/tests/test_completion_evidence_transport.py +0 -91
  202. engineering_process-0.8.0/tests/test_contracts.py +0 -1203
  203. engineering_process-0.8.0/tests/test_diagnostics.py +0 -80
  204. engineering_process-0.8.0/tests/test_distribution.py +0 -182
  205. engineering_process-0.8.0/tests/test_distribution_verify.py +0 -217
  206. engineering_process-0.8.0/tests/test_environment.py +0 -741
  207. engineering_process-0.8.0/tests/test_evals.py +0 -59
  208. engineering_process-0.8.0/tests/test_impact.py +0 -269
  209. engineering_process-0.8.0/tests/test_improvement.py +0 -499
  210. engineering_process-0.8.0/tests/test_lifecycle.py +0 -2641
  211. engineering_process-0.8.0/tests/test_process_graph.py +0 -174
  212. engineering_process-0.8.0/tests/test_process_install.py +0 -446
  213. engineering_process-0.8.0/tests/test_publication.py +0 -2232
  214. engineering_process-0.8.0/tests/test_publish_event.py +0 -57
  215. engineering_process-0.8.0/tests/test_pypi_publication.py +0 -156
  216. engineering_process-0.8.0/tests/test_recommendation.py +0 -578
  217. engineering_process-0.8.0/tests/test_release.py +0 -422
  218. engineering_process-0.8.0/tests/test_release_candidate.py +0 -651
  219. engineering_process-0.8.0/tests/test_release_candidate_boundary.py +0 -92
  220. engineering_process-0.8.0/tests/test_release_completion_identity.py +0 -141
  221. engineering_process-0.8.0/tests/test_release_evidence_restore.py +0 -259
  222. engineering_process-0.8.0/tests/test_release_evidence_selection.py +0 -164
  223. engineering_process-0.8.0/tests/test_release_preparation.py +0 -68
  224. engineering_process-0.8.0/tests/test_release_qualification.py +0 -160
  225. engineering_process-0.8.0/tests/test_remote_verification.py +0 -833
  226. engineering_process-0.8.0/tests/test_remote_verification_adapter.py +0 -360
  227. engineering_process-0.8.0/tests/test_runner.py +0 -476
  228. engineering_process-0.8.0/tests/test_runtime.py +0 -109
  229. engineering_process-0.8.0/tests/test_schemas.py +0 -167
  230. engineering_process-0.8.0/tests/test_self_hosting.py +0 -673
  231. engineering_process-0.8.0/tests/test_skills.py +0 -255
  232. engineering_process-0.8.0/tests/test_source_checkout.py +0 -473
  233. engineering_process-0.8.0/tests/test_supervision.py +0 -310
  234. engineering_process-0.8.0/tests/test_supplemental.py +0 -322
  235. engineering_process-0.8.0/tests/test_syncing.py +0 -828
  236. engineering_process-0.8.0/tests/test_test_suite.py +0 -62
  237. engineering_process-0.8.0/tests/test_tooling.py +0 -653
  238. engineering_process-0.8.0/tests/test_windows_job.py +0 -440
  239. {engineering_process-0.8.0 → engineering_process-1.0.0}/LICENSE +0 -0
  240. {engineering_process-0.8.0 → engineering_process-1.0.0}/engineering_process/__main__.py +0 -0
  241. {engineering_process-0.8.0 → engineering_process-1.0.0}/engineering_process/_windows_job.py +0 -0
  242. {engineering_process-0.8.0 → engineering_process-1.0.0}/engineering_process.egg-info/dependency_links.txt +0 -0
  243. {engineering_process-0.8.0 → engineering_process-1.0.0}/engineering_process.egg-info/entry_points.txt +0 -0
  244. {engineering_process-0.8.0 → engineering_process-1.0.0}/engineering_process.egg-info/top_level.txt +0 -0
  245. {engineering_process-0.8.0 → engineering_process-1.0.0}/setup.cfg +0 -0
  246. {engineering_process-0.8.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.8.0"
3
+ VERSION = "1.0.0"