engineering-process 0.7.0__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.
- {engineering_process-0.7.0/engineering_process.egg-info → engineering_process-0.8.0}/PKG-INFO +73 -20
- {engineering_process-0.7.0 → engineering_process-0.8.0}/PRODUCTION_STANDARD.md +33 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/README.md +71 -19
- {engineering_process-0.7.0 → engineering_process-0.8.0}/VERSIONING.md +63 -14
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/__init__.py +1 -1
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/bundles.py +21 -3
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/cli.py +43 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/contracts.py +671 -60
- engineering_process-0.8.0/engineering_process/distribution.py +261 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/process_graph.py +10 -2
- engineering_process-0.8.0/engineering_process/publication.py +1981 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/requirements-release.txt +2 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/requirements-runtime.txt +1 -0
- engineering_process-0.8.0/engineering_process/skills.py +225 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/syncing.py +191 -16
- {engineering_process-0.7.0 → engineering_process-0.8.0/engineering_process.egg-info}/PKG-INFO +73 -20
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process.egg-info/SOURCES.txt +2 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process.egg-info/requires.txt +1 -0
- engineering_process-0.8.0/examples/automation-process-adoption-policy.json +36 -0
- engineering_process-0.8.0/examples/automation-process-adoption-proposal.json +174 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/improvement-catalog.json +15 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/evolve-process/SKILL.md +6 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/implement-change/SKILL.md +8 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/publish-change/SKILL.md +42 -16
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/run-change/SKILL.md +5 -2
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/run-change/references/execution.md +25 -2
- {engineering_process-0.7.0 → engineering_process-0.8.0}/pyproject.toml +3 -1
- engineering_process-0.8.0/release.json +53 -0
- engineering_process-0.8.0/schemas/automation-proposal-policy.schema.json +193 -0
- engineering_process-0.8.0/schemas/automation-proposal.schema.json +432 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_cli.py +1 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_contracts.py +154 -1
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_distribution.py +62 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_evals.py +20 -0
- engineering_process-0.8.0/tests/test_publication.py +2232 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_runtime.py +13 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_schemas.py +10 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_skills.py +66 -1
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_syncing.py +54 -0
- engineering_process-0.7.0/engineering_process/distribution.py +0 -113
- engineering_process-0.7.0/engineering_process/publication.py +0 -871
- engineering_process-0.7.0/engineering_process/skills.py +0 -118
- engineering_process-0.7.0/release.json +0 -50
- engineering_process-0.7.0/schemas/automation-proposal-policy.schema.json +0 -117
- engineering_process-0.7.0/schemas/automation-proposal.schema.json +0 -223
- engineering_process-0.7.0/tests/test_publication.py +0 -976
- {engineering_process-0.7.0 → engineering_process-0.8.0}/LICENSE +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/MANIFEST.in +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/PROCESS_IMPROVEMENT.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/bundles.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/__main__.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/_download_worker.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/_supervisor_posix.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/_supervisor_windows.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/_windows_job.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/adoption.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/artifact_attestation.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/bootstrap.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/bounded_process.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/command_catalog.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/diagnostics.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/distribution_verify.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/environment.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/evidence.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/evidence_transport.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/git.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/git_attributes.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/helper_launch.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/impact.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/improvement.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/lifecycle.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/lifecycle_routes.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/managed.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/markdown.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/recommendation.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/release.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/release_candidate.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/remote_verification.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/requirements-build.txt +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/requirements-dev.txt +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/runner.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/runtime.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/supervision.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/supplemental.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process/tooling.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process.egg-info/dependency_links.txt +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process.egg-info/entry_points.txt +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/engineering_process.egg-info/top_level.txt +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/adoption-migration.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/automation-policy.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/automation-proposal-policy.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/automation-proposal.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/change.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/improvement-catalog.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/improvement-disposition.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/improvement-reproduction.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/improvement-resolution.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/improvement-signal.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/plan-decision-review-assignment.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/plan-decision-review.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/plan.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/project.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/recommendation-resolution.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/recommendation-review-assignment.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/recommendation-review.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/recommendation.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/release-change.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/release.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/remote-verification-evidence.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/remote-verification-request.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/examples/review.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process-graph.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/assess-design/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/change-api/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/cross-repo-change/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/define-change-contract/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/design-module/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/finish-change/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/implement-module/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/plan-change/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/review-change/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/run-project-command/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/process_assets/skills/verify-change/SKILL.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/adoption-migration.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/automation-policy.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/change.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/evidence-receipt.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/improvement-catalog.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/improvement-disposition.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/improvement-reproduction.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/improvement-resolution.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/improvement-signal.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/lifecycle.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/plan-decision-review-assignment.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/plan-decision-review.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/plan.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/process-graph.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/process-lock.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/project.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/recommendation-resolution.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/recommendation-review-assignment.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/recommendation-review.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/recommendation.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/release-change.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/release.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/remote-verification-evidence.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/remote-verification-request.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/review.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/reviewer-attestation.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/supplemental-verification.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/schemas/verification.schema.json +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/setup.cfg +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/templates/AGENTS.process.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/templates/adopt-process-windows-job.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/templates/adopt-process.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_adoption.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_adoption_runner.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_artifact_attestation.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_bootstrap.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_bounded_process.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_bundles.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_completed_release_dispatch.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_completion_evidence_transport.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_diagnostics.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_distribution_verify.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_environment.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_impact.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_improvement.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_lifecycle.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_process_graph.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_process_install.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_publish_event.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_pypi_publication.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_recommendation.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_candidate.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_candidate_boundary.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_completion_identity.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_evidence_restore.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_evidence_selection.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_preparation.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_release_qualification.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_remote_verification.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_remote_verification_adapter.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_runner.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_self_hosting.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_source_checkout.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_supervision.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_supplemental.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_test_suite.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_tooling.py +0 -0
- {engineering_process-0.7.0 → engineering_process-0.8.0}/tests/test_windows_job.py +0 -0
{engineering_process-0.7.0/engineering_process.egg-info → engineering_process-0.8.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: engineering-process
|
|
3
|
-
Version: 0.
|
|
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,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
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
|
|
188
|
-
|
|
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
|
|
@@ -600,7 +602,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
|
|
|
600
602
|
service ids remain lifecycle evidence, not merge, release, deployment, or adoption
|
|
601
603
|
authority.
|
|
602
604
|
|
|
603
|
-
The
|
|
605
|
+
The default agent-host publication order is stricter than a PR-first workflow: implementation
|
|
604
606
|
and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
|
|
605
607
|
agent or human semantically reviews that checkpoint; findings repeat implementation,
|
|
606
608
|
complete verification, and fresh review until approved; `change finish` records
|
|
@@ -608,6 +610,9 @@ completion; only then may automation push and create the PR. Static policy/secre
|
|
|
608
610
|
checks supplement this review and cannot generate a semantic verdict. With a valid
|
|
609
611
|
standing policy, automation then waits for exact-head/current-base required checks and
|
|
610
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.
|
|
611
616
|
|
|
612
617
|
Completed local evidence can be moved across machines or attached to a release as a
|
|
613
618
|
bounded receipt. Export and validate it before any explicit prune:
|
|
@@ -686,13 +691,14 @@ without per-action confirmation.
|
|
|
686
691
|
### Controlled automation proposals
|
|
687
692
|
|
|
688
693
|
Completion-before-publication remains the default. A consumer may enable an untrusted
|
|
689
|
-
|
|
690
|
-
the protected base at `.process/automation-proposals.json`.
|
|
691
|
-
shape in `examples/automation-proposal-policy.json
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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.
|
|
696
702
|
|
|
697
703
|
The immutable provider verifier emits one bounded
|
|
698
704
|
`engineering-process-controlled-automation-proposal` report for the exact repository,
|
|
@@ -717,9 +723,9 @@ processctl publication validate-proposal --project-root . \
|
|
|
717
723
|
|
|
718
724
|
This pass proves only that the proposal is safe to expose as untrusted input. It is
|
|
719
725
|
not verification, semantic review, completion, or merge authority. Proposal checks
|
|
720
|
-
remain read-only and receive no secrets
|
|
721
|
-
privileged CI, process-authority, workflow,
|
|
722
|
-
trust-root changes
|
|
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.
|
|
723
729
|
|
|
724
730
|
The required completion check is absent on every new proposal head. After the exact
|
|
725
731
|
head completes the lifecycle, export its receipt, finalize the managed PR requirements,
|
|
@@ -747,6 +753,53 @@ after the protected base's standing automation policy and exact completion gate
|
|
|
747
753
|
Provider tokens, check APIs, branch protection, retries, and repository selection
|
|
748
754
|
remain consumer-owned adapter behavior.
|
|
749
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
|
+
|
|
750
803
|
## Trust boundary
|
|
751
804
|
|
|
752
805
|
The CLI proves structural separation: reviewer actor id and context id must both be
|
|
@@ -164,6 +164,15 @@ release, deployment, or adoption authority.
|
|
|
164
164
|
|
|
165
165
|
## Resource and generated-state policy
|
|
166
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
|
+
|
|
167
176
|
Every operation over repository-controlled or remote input has explicit limits for
|
|
168
177
|
time, count, individual item size, aggregate size, output, and process descendants.
|
|
169
178
|
Limits fail closed and have regression coverage for success, failure, timeout, and
|
|
@@ -177,6 +186,30 @@ authority, and shares one rollback boundary with the process lock and managed as
|
|
|
177
186
|
Optional capabilities are never inferred, while configuration required by the target
|
|
178
187
|
authority blocks adoption when it is missing or invalid.
|
|
179
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
|
+
|
|
180
213
|
Released serialized contracts are never tightened in place. A new resource bound or
|
|
181
214
|
meaning-changing requirement uses a new integer schema major with explicit migration;
|
|
182
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,
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
153
|
-
|
|
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
|
|
@@ -565,7 +566,7 @@ to the explicit durable failure location before cleanup. Remote artifacts and th
|
|
|
565
566
|
service ids remain lifecycle evidence, not merge, release, deployment, or adoption
|
|
566
567
|
authority.
|
|
567
568
|
|
|
568
|
-
The
|
|
569
|
+
The default agent-host publication order is stricter than a PR-first workflow: implementation
|
|
569
570
|
and every required local and remote profile pass on a clean checkpoint; a consumer-selected independent
|
|
570
571
|
agent or human semantically reviews that checkpoint; findings repeat implementation,
|
|
571
572
|
complete verification, and fresh review until approved; `change finish` records
|
|
@@ -573,6 +574,9 @@ completion; only then may automation push and create the PR. Static policy/secre
|
|
|
573
574
|
checks supplement this review and cannot generate a semantic verdict. With a valid
|
|
574
575
|
standing policy, automation then waits for exact-head/current-base required checks and
|
|
575
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.
|
|
576
580
|
|
|
577
581
|
Completed local evidence can be moved across machines or attached to a release as a
|
|
578
582
|
bounded receipt. Export and validate it before any explicit prune:
|
|
@@ -651,13 +655,14 @@ without per-action confirmation.
|
|
|
651
655
|
### Controlled automation proposals
|
|
652
656
|
|
|
653
657
|
Completion-before-publication remains the default. A consumer may enable an untrusted
|
|
654
|
-
|
|
655
|
-
the protected base at `.process/automation-proposals.json`.
|
|
656
|
-
shape in `examples/automation-proposal-policy.json
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
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.
|
|
661
666
|
|
|
662
667
|
The immutable provider verifier emits one bounded
|
|
663
668
|
`engineering-process-controlled-automation-proposal` report for the exact repository,
|
|
@@ -682,9 +687,9 @@ processctl publication validate-proposal --project-root . \
|
|
|
682
687
|
|
|
683
688
|
This pass proves only that the proposal is safe to expose as untrusted input. It is
|
|
684
689
|
not verification, semantic review, completion, or merge authority. Proposal checks
|
|
685
|
-
remain read-only and receive no secrets
|
|
686
|
-
privileged CI, process-authority, workflow,
|
|
687
|
-
trust-root changes
|
|
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.
|
|
688
693
|
|
|
689
694
|
The required completion check is absent on every new proposal head. After the exact
|
|
690
695
|
head completes the lifecycle, export its receipt, finalize the managed PR requirements,
|
|
@@ -712,6 +717,53 @@ after the protected base's standing automation policy and exact completion gate
|
|
|
712
717
|
Provider tokens, check APIs, branch protection, retries, and repository selection
|
|
713
718
|
remain consumer-owned adapter behavior.
|
|
714
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
|
+
|
|
715
767
|
## Trust boundary
|
|
716
768
|
|
|
717
769
|
The CLI proves structural separation: reviewer actor id and context id must both be
|
|
@@ -118,6 +118,49 @@ base, so a base advance forces a new head and invalidates the old completion che
|
|
|
118
118
|
The producer capability must be released immutably before a consumer pins and enables
|
|
119
119
|
it; no consumer may depend on the producer working tree.
|
|
120
120
|
|
|
121
|
+
## Process-adoption proposal capability
|
|
122
|
+
|
|
123
|
+
Automation-proposal schema 3 is a separate `process-adoption` contract. The consumer
|
|
124
|
+
must first merge a completed opt-in policy that fixes Renovate as the proposal owner,
|
|
125
|
+
fixes an immutable protected-base verifier repository and commit, requires
|
|
126
|
+
`consumer-owner-merge`, and structurally sets `automerge` false,
|
|
127
|
+
`consumerOwnerMergeRequired` true, and `postMergeMutation` false. Schema 1 and schema
|
|
128
|
+
2 dependency proposals retain their released fields and completion routes.
|
|
129
|
+
|
|
130
|
+
The protected-base policy fixes both producer and verifier repositories. The verifier
|
|
131
|
+
binds one complete candidate to the immutable producer release, tag,
|
|
132
|
+
commit and attestation; source and target authority identities; exact requirements
|
|
133
|
+
input and complete hash lock bytes; target process lock; complete selected managed
|
|
134
|
+
distribution; declared project migration; grouped full-SHA action-pin replacements;
|
|
135
|
+
and exact repository, protected base, head, path set, metadata and verifier identity.
|
|
136
|
+
The actual protected base is supplied independently of Renovate evidence. The report
|
|
137
|
+
binds bounded raw release-contract and distribution-attestation bytes, the lifecycle
|
|
138
|
+
receipt identity, complete artifact hashes, and exact target materialization. Those
|
|
139
|
+
report-controlled bytes grant no authority alone. The protected-base adapter supplies
|
|
140
|
+
a separate clean exact-tag producer checkout, release artifacts, receipt, and
|
|
141
|
+
attestation; existing release/attestation validators resolve tag ancestry, receipt,
|
|
142
|
+
artifact bytes, process digest, and complete consumer synchronization. The
|
|
143
|
+
independently resolved base must be an ancestor of the head;
|
|
144
|
+
every producer action use in the bounded regular-workflow tree must move as one group
|
|
145
|
+
with unchanged mode, and the verified wheel hash must occur in the lock. Missing or
|
|
146
|
+
stale identity, a partial pin, an omitted lock or managed file, an inferred migration,
|
|
147
|
+
an unrelated workflow/path change, or a post-merge action fails closed before
|
|
148
|
+
candidate-owned project commands run.
|
|
149
|
+
|
|
150
|
+
Renovate creates this complete PR before consumer-owner review and never merges it.
|
|
151
|
+
The consumer owns its project migration, commands, checks, review choice and merge
|
|
152
|
+
decision. Manual consumer-owner merge is the terminal adoption cutover; neither
|
|
153
|
+
proposal validation, lifecycle completion, standing automation nor provider state can
|
|
154
|
+
escalate it to automatic merge, and no synchronization follows merge. This boundary
|
|
155
|
+
does not affect an agent-host PR created only after full lifecycle completion: that
|
|
156
|
+
exact head retains standing-policy auto-merge.
|
|
157
|
+
|
|
158
|
+
The producer ships and self-adopts this capability before any repository enables
|
|
159
|
+
schema 3 or before Renovate operations allow its exact post-upgrade command. Capability
|
|
160
|
+
release, consumer opt-in and Renovate operations activation are separate reviewed
|
|
161
|
+
changes; same-release activation and dependence on a producer working tree are
|
|
162
|
+
forbidden.
|
|
163
|
+
|
|
121
164
|
## Federated process-improvement capability
|
|
122
165
|
|
|
123
166
|
Improvement signals, dispositions, resolutions, reproductions, and the producer
|
|
@@ -191,25 +234,31 @@ process semantics.
|
|
|
191
234
|
|
|
192
235
|
## Release and adoption boundary
|
|
193
236
|
|
|
194
|
-
Release, self-adoption, and consumer adoption are separate changes
|
|
237
|
+
Release, self-adoption, and consumer adoption are separate changes. The numbered
|
|
238
|
+
sequence below is the default agent-host completion-first route:
|
|
195
239
|
|
|
196
240
|
1. Release N governs and verifies the source of N+1.
|
|
197
241
|
2. N+1 is published as an immutable release and its public hashes are verified.
|
|
198
242
|
3. Consumer-owned automation prepares an unpublished local candidate artifact,
|
|
199
243
|
updates the direct pin, regenerates the hash-locked dependency graph, and runs the
|
|
200
|
-
managed adoption runner.
|
|
201
|
-
PR
|
|
244
|
+
managed adoption runner. On this agent-host route, no process-authority branch or
|
|
245
|
+
PR is published before lifecycle completion.
|
|
202
246
|
4. Required profiles validate the immutable candidate. The consumer-selected host
|
|
203
247
|
supplies an independent semantic agent or human review; findings repeat candidate
|
|
204
248
|
generation and full verification until lifecycle completion. Each
|
|
205
249
|
platform/runtime job publishes a bounded supplemental evidence bundle bound to the
|
|
206
250
|
source checkpoint, workflow checkpoint, run identity, and profile-report hashes.
|
|
207
|
-
Only after completion may
|
|
251
|
+
Only after completion may the agent host push the candidate branch and create the PR
|
|
208
252
|
containing the process lock and every selected managed asset. A valid consumer
|
|
209
253
|
standing policy may merge that exact checkpoint automatically after required
|
|
210
254
|
checks; there is no post-merge synchronization.
|
|
211
255
|
5. N+1 governs only changes that begin after the merged adoption checkpoint.
|
|
212
256
|
|
|
257
|
+
An opted-in schema-3 Renovate `process-adoption` proposal is the explicit exception to
|
|
258
|
+
steps 3-4: after complete materialization and protected-base proposal validation,
|
|
259
|
+
Renovate may publish it before consumer-owner review. It never receives agent-host
|
|
260
|
+
completion or standing auto-merge authority; consumer-owner manual merge is terminal.
|
|
261
|
+
|
|
213
262
|
The repository-root GitHub Action and Python package are two surfaces of the same
|
|
214
263
|
governed release checkpoint. A consumer invocation pins the action by the release
|
|
215
264
|
commit's full object id and keeps the `v<SemVer>` annotation; Renovate groups that
|
|
@@ -224,13 +273,12 @@ and managed bootstrap snapshots required before a target version is installed. A
|
|
|
224
273
|
clean-cutover PR may delete an obsolete local helper only after it pins an immutable
|
|
225
274
|
public action checkpoint; no compatibility shim or dual execution path is retained.
|
|
226
275
|
|
|
227
|
-
Process-authority adoption
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
managed assets, or requires a post-merge step must fail closed.
|
|
276
|
+
Process-authority adoption is not a controlled dependency proposal. An opted-in
|
|
277
|
+
schema-3 consumer may receive a complete Renovate `process-adoption` PR before review,
|
|
278
|
+
but it is permanently excluded from provider automerge. A separate agent-host
|
|
279
|
+
candidate created after exact lifecycle completion remains on the standing-policy
|
|
280
|
+
auto-merge route. A PR that changes only a requirement pin, omits generated hashes or
|
|
281
|
+
managed assets, or requires a post-merge step fails closed on either route.
|
|
234
282
|
|
|
235
283
|
`requirements/process.in` owns the direct public pin and `requirements/process.txt`
|
|
236
284
|
is its pip-compile hash lock. The lock generator is pinned, and the committed lock must
|
|
@@ -281,9 +329,10 @@ falling back to a partial proposal.
|
|
|
281
329
|
derived identity surface without writing protected `main` directly.
|
|
282
330
|
- `processctl` derives and validates classification, compatibility, identity, reviewed
|
|
283
331
|
tree equivalence, and authorization evidence.
|
|
284
|
-
-
|
|
285
|
-
|
|
286
|
-
|
|
332
|
+
- Renovate may publish a complete schema-3 process-adoption proposal before owner
|
|
333
|
+
review, but only the consumer owner may merge it and merge is terminal. Agent-host
|
|
334
|
+
candidates published after exact lifecycle completion retain standing-policy
|
|
335
|
+
auto-merge.
|
|
287
336
|
- Independent review verifies the exact Release PR classification, migration,
|
|
288
337
|
verification, and evidence checkpoint.
|
|
289
338
|
- The repository's standing policy authorizes the exact completed Release PR and each
|
|
@@ -20,7 +20,12 @@ def bundles_path(process_root: Path) -> Path:
|
|
|
20
20
|
raise ContractError(f"{process_root}: cannot locate bundles.json")
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
def load_bundles(
|
|
23
|
+
def load_bundles(
|
|
24
|
+
process_root: Path,
|
|
25
|
+
skills_root: Path,
|
|
26
|
+
*,
|
|
27
|
+
selected_skills: tuple[str, ...] | None = None,
|
|
28
|
+
) -> dict[str, tuple[str, ...]]:
|
|
24
29
|
path = bundles_path(process_root)
|
|
25
30
|
document = read_json(path)
|
|
26
31
|
if (
|
|
@@ -32,7 +37,16 @@ def load_bundles(process_root: Path, skills_root: Path) -> dict[str, tuple[str,
|
|
|
32
37
|
):
|
|
33
38
|
raise ContractError(f"{path}: invalid bundle contract")
|
|
34
39
|
|
|
35
|
-
available =
|
|
40
|
+
available = (
|
|
41
|
+
{directory.name for directory in skill_directories(skills_root)}
|
|
42
|
+
if selected_skills is None
|
|
43
|
+
else {
|
|
44
|
+
skill
|
|
45
|
+
for skill in selected_skills
|
|
46
|
+
if (skills_root / skill / "SKILL.md").is_file()
|
|
47
|
+
and not (skills_root / skill).is_symlink()
|
|
48
|
+
}
|
|
49
|
+
)
|
|
36
50
|
result: dict[str, tuple[str, ...]] = {}
|
|
37
51
|
owned: dict[str, str] = {}
|
|
38
52
|
for name, raw_skills in document["bundles"].items():
|
|
@@ -48,7 +62,11 @@ def load_bundles(process_root: Path, skills_root: Path) -> dict[str, tuple[str,
|
|
|
48
62
|
or raw_skills != sorted(set(raw_skills))
|
|
49
63
|
):
|
|
50
64
|
raise ContractError(f"{path}: bundle {name} must be a sorted unique skill list")
|
|
51
|
-
missing = sorted(
|
|
65
|
+
missing = sorted(
|
|
66
|
+
(set(raw_skills) - available)
|
|
67
|
+
if selected_skills is None
|
|
68
|
+
else (set(raw_skills) & set(selected_skills)) - available
|
|
69
|
+
)
|
|
52
70
|
if missing:
|
|
53
71
|
raise ContractError(
|
|
54
72
|
f"{path}: bundle {name} references missing skills: {', '.join(missing)}"
|
|
@@ -1341,8 +1341,34 @@ def _proposal_policy_evidence(args: argparse.Namespace):
|
|
|
1341
1341
|
)
|
|
1342
1342
|
|
|
1343
1343
|
|
|
1344
|
+
def _proposal_producer_inputs(
|
|
1345
|
+
args: argparse.Namespace, proposal: object
|
|
1346
|
+
) -> dict[str, Path] | None:
|
|
1347
|
+
values = {
|
|
1348
|
+
"root": args.producer_root,
|
|
1349
|
+
"artifacts": args.producer_artifact_root,
|
|
1350
|
+
"receipt": args.producer_receipt,
|
|
1351
|
+
"attestation": args.producer_attestation,
|
|
1352
|
+
}
|
|
1353
|
+
supplied = [value is not None for value in values.values()]
|
|
1354
|
+
if getattr(proposal, "proposal_kind", "dependency-update") == "process-adoption":
|
|
1355
|
+
if not all(supplied):
|
|
1356
|
+
raise ContractError(
|
|
1357
|
+
"process-adoption validation requires --producer-root, "
|
|
1358
|
+
"--producer-artifact-root, --producer-receipt, and "
|
|
1359
|
+
"--producer-attestation"
|
|
1360
|
+
)
|
|
1361
|
+
return {name: value for name, value in values.items() if value is not None}
|
|
1362
|
+
if any(supplied):
|
|
1363
|
+
raise ContractError(
|
|
1364
|
+
"producer release inputs apply only to process-adoption proposals"
|
|
1365
|
+
)
|
|
1366
|
+
return None
|
|
1367
|
+
|
|
1368
|
+
|
|
1344
1369
|
def command_publication_validate_proposal(args: argparse.Namespace) -> int:
|
|
1345
1370
|
proposal = _proposal_policy_evidence(args)
|
|
1371
|
+
producer_inputs = _proposal_producer_inputs(args, proposal)
|
|
1346
1372
|
source = source_state(args.project_root)
|
|
1347
1373
|
issues = validate_controlled_automation_proposal(
|
|
1348
1374
|
args.project_root,
|
|
@@ -1358,6 +1384,7 @@ def command_publication_validate_proposal(args: argparse.Namespace) -> int:
|
|
|
1358
1384
|
verifier_commit=args.verifier_commit,
|
|
1359
1385
|
proposal=proposal,
|
|
1360
1386
|
source=source,
|
|
1387
|
+
producer_inputs=producer_inputs,
|
|
1361
1388
|
)
|
|
1362
1389
|
return _publication_result(
|
|
1363
1390
|
args,
|
|
@@ -1368,6 +1395,7 @@ def command_publication_validate_proposal(args: argparse.Namespace) -> int:
|
|
|
1368
1395
|
branch=args.branch,
|
|
1369
1396
|
commit=args.commit,
|
|
1370
1397
|
completionCheck=proposal.completion_check,
|
|
1398
|
+
consumerOwnerMergeRequired=proposal.consumer_owner_merge_required,
|
|
1371
1399
|
proposalKind=proposal.proposal_kind,
|
|
1372
1400
|
policySha256=proposal.opt_in_sha256,
|
|
1373
1401
|
repository=args.repository,
|
|
@@ -1382,6 +1410,7 @@ def command_publication_validate_proposal_completion(
|
|
|
1382
1410
|
args: argparse.Namespace,
|
|
1383
1411
|
) -> int:
|
|
1384
1412
|
proposal = _proposal_policy_evidence(args)
|
|
1413
|
+
producer_inputs = _proposal_producer_inputs(args, proposal)
|
|
1385
1414
|
evidence = validate_receipt(args.evidence)
|
|
1386
1415
|
project_path = args.project_root / ".process" / "project.json"
|
|
1387
1416
|
project = validate_project(read_json(project_path), str(project_path))
|
|
@@ -1402,6 +1431,7 @@ def command_publication_validate_proposal_completion(
|
|
|
1402
1431
|
proposal=proposal,
|
|
1403
1432
|
evidence=evidence,
|
|
1404
1433
|
source=source,
|
|
1434
|
+
producer_inputs=producer_inputs,
|
|
1405
1435
|
)
|
|
1406
1436
|
return _publication_result(
|
|
1407
1437
|
args,
|
|
@@ -1412,6 +1442,7 @@ def command_publication_validate_proposal_completion(
|
|
|
1412
1442
|
changeId=evidence["changeId"],
|
|
1413
1443
|
commit=args.commit,
|
|
1414
1444
|
completionCheck=proposal.completion_check,
|
|
1445
|
+
consumerOwnerMergeRequired=proposal.consumer_owner_merge_required,
|
|
1415
1446
|
evidenceKind=args.evidence_kind,
|
|
1416
1447
|
evidenceSha256=evidence["sha256"],
|
|
1417
1448
|
policySha256=proposal.opt_in_sha256,
|
|
@@ -2026,6 +2057,10 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2026
2057
|
publication_proposal.add_argument("--body-file", type=Path)
|
|
2027
2058
|
publication_proposal.add_argument("--verifier-repository", required=True)
|
|
2028
2059
|
publication_proposal.add_argument("--verifier-commit", required=True)
|
|
2060
|
+
publication_proposal.add_argument("--producer-root", type=Path)
|
|
2061
|
+
publication_proposal.add_argument("--producer-artifact-root", type=Path)
|
|
2062
|
+
publication_proposal.add_argument("--producer-receipt", type=Path)
|
|
2063
|
+
publication_proposal.add_argument("--producer-attestation", type=Path)
|
|
2029
2064
|
_add_json(publication_proposal)
|
|
2030
2065
|
publication_proposal.set_defaults(
|
|
2031
2066
|
handler=command_publication_validate_proposal
|
|
@@ -2058,6 +2093,14 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2058
2093
|
"--verifier-repository", required=True
|
|
2059
2094
|
)
|
|
2060
2095
|
publication_proposal_completion.add_argument("--verifier-commit", required=True)
|
|
2096
|
+
publication_proposal_completion.add_argument("--producer-root", type=Path)
|
|
2097
|
+
publication_proposal_completion.add_argument(
|
|
2098
|
+
"--producer-artifact-root", type=Path
|
|
2099
|
+
)
|
|
2100
|
+
publication_proposal_completion.add_argument("--producer-receipt", type=Path)
|
|
2101
|
+
publication_proposal_completion.add_argument(
|
|
2102
|
+
"--producer-attestation", type=Path
|
|
2103
|
+
)
|
|
2061
2104
|
_add_json(publication_proposal_completion)
|
|
2062
2105
|
publication_proposal_completion.set_defaults(
|
|
2063
2106
|
handler=command_publication_validate_proposal_completion
|