engineering-process 0.8.0__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {engineering_process-0.8.0/engineering_process.egg-info → engineering_process-0.9.0}/PKG-INFO +82 -8
- {engineering_process-0.8.0 → engineering_process-0.9.0}/PROCESS_IMPROVEMENT.md +8 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/PRODUCTION_STANDARD.md +40 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/README.md +81 -7
- {engineering_process-0.8.0 → engineering_process-0.9.0}/VERSIONING.md +63 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/__init__.py +1 -1
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/adoption.py +5 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/artifact_attestation.py +20 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/cli.py +312 -4
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/command_catalog.py +5 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/contracts.py +769 -48
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/distribution_verify.py +11 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/evidence.py +273 -5
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/lifecycle.py +926 -30
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/process_graph.py +5 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/release.py +23 -3
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/release_candidate.py +86 -18
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/remote_verification.py +18 -5
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/supplemental.py +14 -4
- engineering_process-0.9.0/engineering_process/transition.py +2606 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0/engineering_process.egg-info}/PKG-INFO +82 -8
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process.egg-info/SOURCES.txt +16 -0
- engineering_process-0.9.0/examples/authority-transition-evidence.json +42 -0
- engineering_process-0.9.0/examples/authority-transition-request.json +43 -0
- engineering_process-0.9.0/examples/bootstrap-adoption-consumption.json +17 -0
- engineering_process-0.9.0/examples/bootstrap-adoption-intent.json +34 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/change.json +29 -1
- engineering_process-0.9.0/examples/protected-transition-policy.json +16 -0
- engineering_process-0.9.0/examples/release-authority-transition.json +32 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/review.json +4 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/improvement-catalog.json +14 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process-graph.json +2 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/define-change-contract/SKILL.md +7 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/evolve-process/SKILL.md +13 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/finish-change/SKILL.md +4 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/implement-change/SKILL.md +10 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/publish-change/SKILL.md +6 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/review-change/SKILL.md +16 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/run-change/SKILL.md +14 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/run-change/references/execution.md +45 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/verify-change/SKILL.md +5 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/pyproject.toml +12 -1
- engineering_process-0.9.0/release.json +87 -0
- engineering_process-0.9.0/schemas/authority-transition-evidence.schema.json +53 -0
- engineering_process-0.9.0/schemas/authority-transition-request.schema.json +67 -0
- engineering_process-0.9.0/schemas/bootstrap-adoption-consumption.schema.json +23 -0
- engineering_process-0.9.0/schemas/bootstrap-adoption-intent.schema.json +32 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/change.schema.json +97 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/evidence-receipt.schema.json +43 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/lifecycle.schema.json +156 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/plan-decision-review-assignment.schema.json +25 -0
- engineering_process-0.9.0/schemas/protected-transition-policy.schema.json +23 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/recommendation.schema.json +1 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/release.schema.json +50 -4
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/remote-verification-evidence.schema.json +31 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/remote-verification-request.schema.json +32 -3
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/review.schema.json +82 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/supplemental-verification.schema.json +41 -2
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/verification.schema.json +65 -1
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_adoption.py +31 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_contracts.py +546 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_lifecycle.py +925 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_candidate.py +71 -0
- engineering_process-0.9.0/tests/test_release_plan_continuation.py +115 -0
- engineering_process-0.9.0/tests/test_release_plan_review_dispatch.py +170 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_qualification.py +4 -1
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_remote_verification_adapter.py +42 -0
- engineering_process-0.9.0/tests/test_review_context_handoff.py +150 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_runner.py +95 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_self_hosting.py +223 -0
- engineering_process-0.9.0/tests/test_test_suite.py +496 -0
- engineering_process-0.9.0/tests/test_transition.py +1090 -0
- engineering_process-0.8.0/release.json +0 -53
- engineering_process-0.8.0/tests/test_test_suite.py +0 -62
- {engineering_process-0.8.0 → engineering_process-0.9.0}/LICENSE +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/MANIFEST.in +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/bundles.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/__main__.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/_download_worker.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/_supervisor_posix.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/_supervisor_windows.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/_windows_job.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/bootstrap.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/bounded_process.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/bundles.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/diagnostics.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/distribution.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/environment.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/evidence_transport.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/git.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/git_attributes.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/helper_launch.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/impact.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/improvement.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/lifecycle_routes.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/managed.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/markdown.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/publication.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/recommendation.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/requirements-build.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/requirements-dev.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/requirements-release.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/requirements-runtime.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/runner.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/runtime.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/skills.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/supervision.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/syncing.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/tooling.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process.egg-info/dependency_links.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process.egg-info/entry_points.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process.egg-info/requires.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process.egg-info/top_level.txt +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/adoption-migration.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/automation-policy.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/automation-process-adoption-policy.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/automation-process-adoption-proposal.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/automation-proposal-policy.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/automation-proposal.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/improvement-catalog.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/improvement-disposition.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/improvement-reproduction.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/improvement-resolution.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/improvement-signal.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/plan-decision-review-assignment.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/plan-decision-review.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/plan.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/project.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/recommendation-resolution.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/recommendation-review-assignment.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/recommendation-review.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/recommendation.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/release-change.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/release.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/remote-verification-evidence.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/examples/remote-verification-request.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/assess-design/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/change-api/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/cross-repo-change/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/design-module/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/implement-module/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/plan-change/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/run-project-command/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/adoption-migration.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/automation-policy.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/automation-proposal-policy.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/automation-proposal.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/improvement-catalog.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/improvement-disposition.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/improvement-reproduction.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/improvement-resolution.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/improvement-signal.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/plan-decision-review.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/plan.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/process-graph.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/process-lock.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/project.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/recommendation-resolution.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/recommendation-review-assignment.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/recommendation-review.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/release-change.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/schemas/reviewer-attestation.schema.json +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/setup.cfg +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/templates/AGENTS.process.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/templates/adopt-process-windows-job.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/templates/adopt-process.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_adoption_runner.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_artifact_attestation.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_bootstrap.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_bounded_process.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_bundles.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_cli.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_completed_release_dispatch.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_completion_evidence_transport.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_diagnostics.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_distribution.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_distribution_verify.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_environment.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_evals.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_impact.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_improvement.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_process_graph.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_process_install.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_publication.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_publish_event.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_pypi_publication.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_recommendation.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_candidate_boundary.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_completion_identity.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_evidence_restore.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_evidence_selection.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_release_preparation.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_remote_verification.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_runtime.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_schemas.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_skills.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_source_checkout.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_supervision.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_supplemental.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_syncing.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_tooling.py +0 -0
- {engineering_process-0.8.0 → engineering_process-0.9.0}/tests/test_windows_job.py +0 -0
{engineering_process-0.8.0/engineering_process.egg-info → engineering_process-0.9.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.9.0
|
|
4
4
|
Summary: Agent-neutral end-to-end engineering lifecycle and deterministic process CLI
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/phuongnse/engineering-process
|
|
@@ -464,8 +464,13 @@ processctl change review submit --change-id issue-123 --report review.json
|
|
|
464
464
|
~~~
|
|
465
465
|
|
|
466
466
|
`changes-requested` returns to `change implement`, which starts a new cycle and
|
|
467
|
-
invalidates prior verification and approval.
|
|
468
|
-
|
|
467
|
+
invalidates prior verification and approval. Under the bounded-loop authority this
|
|
468
|
+
is finite: the third changes-requested final-review cycle in one decision window
|
|
469
|
+
records an owner-decision escalation and blocks a fourth autonomous implementation
|
|
470
|
+
cycle. Finding renames, splits, paths, severities and invariant labels do not reset
|
|
471
|
+
the count. The existing decision-required assessment, challenged recommendation and
|
|
472
|
+
owner resolution may open one fresh three-cycle window; they never approve or remove
|
|
473
|
+
findings. `approved` can advance only while the source still matches:
|
|
469
474
|
|
|
470
475
|
~~~text
|
|
471
476
|
processctl change finish --change-id issue-123 \
|
|
@@ -473,6 +478,43 @@ processctl change finish --change-id issue-123 \
|
|
|
473
478
|
processctl change status --change-id issue-123
|
|
474
479
|
~~~
|
|
475
480
|
|
|
481
|
+
### Process authority transition
|
|
482
|
+
|
|
483
|
+
A trust-root adoption uses a clean N-1 control checkout and a separate N+1 candidate
|
|
484
|
+
checkout. Register the exact transition before the target changes any candidate file,
|
|
485
|
+
then let the installed target emit only non-authoritative evidence:
|
|
486
|
+
|
|
487
|
+
~~~text
|
|
488
|
+
processctl change transition register --project-root control \
|
|
489
|
+
--change-id adopt-process-0-9-0 --request transition-request.json \
|
|
490
|
+
--target-checkout target-tag-checkout --artifact-root target-artifacts \
|
|
491
|
+
--release-receipt target-evidence.json --artifact-attestation target-artifacts.json \
|
|
492
|
+
--actor worker --context worker-session --actor-kind agent
|
|
493
|
+
|
|
494
|
+
processctl authority-transition candidate-evidence \
|
|
495
|
+
--candidate-root candidate --target-process-root /installed/target \
|
|
496
|
+
--request transition-request.json --output candidate-evidence.json \
|
|
497
|
+
--actor candidate-materializer --context candidate-session --actor-kind agent
|
|
498
|
+
|
|
499
|
+
processctl change transition ingest --project-root control \
|
|
500
|
+
--change-id adopt-process-0-9-0 --candidate-root candidate \
|
|
501
|
+
--target-process-root /installed/target --evidence candidate-evidence.json \
|
|
502
|
+
--actor worker --context worker-session --actor-kind agent
|
|
503
|
+
~~~
|
|
504
|
+
|
|
505
|
+
Every later `change verify`, `change remote`, `change review`, `change finish`, and
|
|
506
|
+
`change status` command supplies the same `--candidate-root`; lifecycle state and the
|
|
507
|
+
CLI authority remain in `control`. The target lock never becomes an ordinary bypass.
|
|
508
|
+
Transition verification, review, completion, remote evidence and receipt use their
|
|
509
|
+
transition-only schema majors.
|
|
510
|
+
|
|
511
|
+
The initial producer bootstrap is separate. Public 0.7.0 completes an exact intent
|
|
512
|
+
and protected-transition policy. A verifier checked out from the policy's fixed
|
|
513
|
+
protected-base feature commit validates the 0.7.0 bundle, immutable target release,
|
|
514
|
+
complete candidate and current base. Only its fixed
|
|
515
|
+
`authority-transition-completion` check may feed the policy-bound exact-head merge;
|
|
516
|
+
the successful merge consumes the authorization and activates the target.
|
|
517
|
+
|
|
476
518
|
One worker owning specification, planning, implementation, and verification is the
|
|
477
519
|
default topology. Bounded helpers are optional optimizations, not required roles;
|
|
478
520
|
only review requires a separate actor and context.
|
|
@@ -580,7 +622,22 @@ drift repeats the assessment with a newly reserved reviewer context bound to the
|
|
|
580
622
|
source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
|
|
581
623
|
historical and cannot authorize the new cycle.
|
|
582
624
|
|
|
583
|
-
|
|
625
|
+
New finite-boundary changes use change schema 4. Their `reviewBoundary` is a closed
|
|
626
|
+
set of trust boundaries and fault rows; every row names its trigger or injection
|
|
627
|
+
boundary, expected outcome, criteria, proving profiles/evidence, and stop condition.
|
|
628
|
+
Every review finding is exactly `covered` or `contract-gap`. Covered findings bind
|
|
629
|
+
one declared row and carry that identity unchanged. Contract gaps bind no row, remain
|
|
630
|
+
open, and trigger owner decision on the first review. The registered contract is
|
|
631
|
+
never extended in place: after owner decision the current lifecycle stays
|
|
632
|
+
superseded, and a new contract must explicitly own the expanded boundary.
|
|
633
|
+
|
|
634
|
+
Review-loop decision windows start prospectively under the adopted authority; older
|
|
635
|
+
lifecycle artifacts are not replayed into a new counter. Resolved escalation chains
|
|
636
|
+
are retained separately from the mutable current plan-decision slot and are included
|
|
637
|
+
in completion and exported receipt evidence. This reuses existing reviewers and
|
|
638
|
+
recommendation authority; it adds no loop arbiter or reviewer-of-reviewer.
|
|
639
|
+
|
|
640
|
+
When a schema-3 or schema-4 change selects a project-owned `requiredEvidence` id, local profiles
|
|
584
641
|
alone do not advance it to review. Create the exact no-authority request, run the
|
|
585
642
|
project adapter, and ingest the complete supplemental set first:
|
|
586
643
|
|
|
@@ -824,10 +881,27 @@ carried findings; the attesting host or human boundary, not local process state,
|
|
|
824
881
|
authenticates who produced it.
|
|
825
882
|
|
|
826
883
|
The producer release workflows implement the same host-neutral chain with explicit
|
|
827
|
-
artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle
|
|
828
|
-
`release-candidate.yml` restores it and runs
|
|
829
|
-
`change implement`, and every required `change verify`;
|
|
830
|
-
`engineering-process-review-required` event names the exact artifact
|
|
884
|
+
artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle.
|
|
885
|
+
For an ordinary governed Release, `release-candidate.yml` restores it and runs
|
|
886
|
+
`change start`, `change plan`, `change implement`, and every required `change verify`;
|
|
887
|
+
the resulting `engineering-process-review-required` event names the exact artifact
|
|
888
|
+
and checkpoint. The one `authority-transition-bootstrap` Release instead contains an
|
|
889
|
+
authored schema-3 plan readable by immutable public 0.7. The initial workflow runs
|
|
890
|
+
`change start`, `change plan`, and `change decision start`, then emits
|
|
891
|
+
`engineering-process-plan-review-required` without implementing the candidate. A
|
|
892
|
+
fresh read-only plan reviewer returns the exact assigned report to
|
|
893
|
+
`release-plan-approval.yml`; that protected-main callback authenticates the producing
|
|
894
|
+
workflow path, protected-base SHA, run id and attempt before restoring the same source
|
|
895
|
+
and lifecycle. The provider handoff carries the id and attempt together as the
|
|
896
|
+
required `plannedRun` object so every identity remains explicit without exceeding
|
|
897
|
+
GitHub's ten-property `client_payload` limit. A protected-base adapter renders and
|
|
898
|
+
validates that bounded event before the provider call. It submits the report,
|
|
899
|
+
implements, verifies, and emits the ordinary
|
|
900
|
+
source-review handoff. A separate bounded `needs: continue`, `always()` cleanup job
|
|
901
|
+
runs on another runner after primary-job success, failure, timeout, or interruption;
|
|
902
|
+
after artifact resolution it preserves bounded diagnostics, consumes and reconciles
|
|
903
|
+
the single-use planned artifact, and makes a retry require a fresh planned run and
|
|
904
|
+
assignment. It cannot finish, publish, or merge the Release.
|
|
831
905
|
The consumer-selected host restores that lifecycle, chooses an agent or human,
|
|
832
906
|
registers the assignment, submits the exact report, resolves any finding loop, runs
|
|
833
907
|
`change finish`, and exports completion evidence. It sends only that bounded
|
|
@@ -97,6 +97,14 @@ with the same reusable class and `activeChangeId` as the selected lifecycle. Rel
|
|
|
97
97
|
PR materialization resolves only entries whose active change is in the exact release
|
|
98
98
|
change set.
|
|
99
99
|
|
|
100
|
+
Repeated friction is also counted at the lifecycle boundary. Three
|
|
101
|
+
changes-requested final-review cycles in one prospective decision window are one
|
|
102
|
+
owner-escalation class even when findings are renamed, split, moved, or assigned new
|
|
103
|
+
local invariant ids. Core blocks the next implementation cycle and preserves the
|
|
104
|
+
complete chain. For a finite-boundary contract, an observed failure outside every
|
|
105
|
+
declared row is a contract gap on its first review and requires a superseding change;
|
|
106
|
+
it cannot be closed through another local-fix label.
|
|
107
|
+
|
|
100
108
|
## Release and adoption
|
|
101
109
|
|
|
102
110
|
Producer completion, producer release, consumer adoption, and consumer reproduction
|
|
@@ -143,6 +143,22 @@ evidence. Reviewer-of-reviewer, meta-assessment, assessment-of-assessment,
|
|
|
143
143
|
policy-for-policy, dynamically generated approval chains, and generic workflow
|
|
144
144
|
engines are outside the portable contract.
|
|
145
145
|
|
|
146
|
+
Correction autonomy is finite. Under the adopted bounded-loop authority, three
|
|
147
|
+
distinct final-review cycles with changes-requested in one decision window trigger a
|
|
148
|
+
durable owner-decision escalation and block a fourth implementation cycle. Counting
|
|
149
|
+
is independent of finding names, invariant labels, paths, severities and splits. The
|
|
150
|
+
stop preserves every finding and failed quality assessment; it never creates
|
|
151
|
+
approval. Recovery reuses the existing decision-required plan assessment,
|
|
152
|
+
independently challenged recommendation and explicit owner resolution. A resolved
|
|
153
|
+
covered-boundary decision opens one fresh window; a contract-gap decision supersedes
|
|
154
|
+
the lifecycle and requires a new immutable contract.
|
|
155
|
+
|
|
156
|
+
New finite-boundary contracts enumerate closed fault rows with trigger or injection
|
|
157
|
+
boundary, expected outcome, criteria, proof and stop condition. Every finding is
|
|
158
|
+
exactly covered by one row or is a contract gap. Review does not expand the model by
|
|
159
|
+
inventing adjacent instruction-level injection points, and it never hides an observed
|
|
160
|
+
gap as out of scope. Historical artifacts are not retroactively counted.
|
|
161
|
+
|
|
146
162
|
A material owner decision derives recommendation eligibility before optimization.
|
|
147
163
|
Every option assesses every governing hard invariant and references only proven or
|
|
148
164
|
explicitly unproven assumptions. Any violated invariant makes the option invalid; any
|
|
@@ -186,6 +202,30 @@ authority, and shares one rollback boundary with the process lock and managed as
|
|
|
186
202
|
Optional capabilities are never inferred, while configuration required by the target
|
|
187
203
|
authority blocks adoption when it is missing or invalid.
|
|
188
204
|
|
|
205
|
+
A self-hosted authority transition keeps the governing and candidate workspaces
|
|
206
|
+
separate. N-1 owns lifecycle state and every authoritative decision; N+1 output is
|
|
207
|
+
bounded untrusted input. The pre-registered request fixes source and target authority,
|
|
208
|
+
release provenance, base, paths, migration, selected assets and expiry. Transition
|
|
209
|
+
verification recomputes the clean candidate commit, tree, workspace, lock, hash graph,
|
|
210
|
+
managed distribution and action-pin set. A protected-transition policy is a separate
|
|
211
|
+
schema-1 mutation grant: it fixes the source-owned verifier commit, protected workflow,
|
|
212
|
+
check context and App identity, exact current base and head, target, required checks, no post-merge
|
|
213
|
+
mutation, and one-use protected auto-merge. Target or candidate code can never
|
|
214
|
+
interpret the authorization that activates itself.
|
|
215
|
+
|
|
216
|
+
Transition artifact schemas and portable contract validation share one serialized
|
|
217
|
+
shape boundary. Operational entrypoints additionally enforce cross-field relations
|
|
218
|
+
that standard JSON Schema cannot represent. Those semantic checks are mandatory at
|
|
219
|
+
registration, evidence ingestion, protected validation and terminal consumption; a
|
|
220
|
+
shape-only validation never grants authority. Candidate evidence includes observed
|
|
221
|
+
apply/check/idempotence trees and an after-write rollback probe executed in disposable
|
|
222
|
+
worktrees under a bounded target process.
|
|
223
|
+
Repository identity comes from deterministic provider service evidence resolved by
|
|
224
|
+
the existing project adapter: repository/release/tag/asset ids and URLs, immutable
|
|
225
|
+
release state, peeled tag commit and artifact digests are pre-bound by canonical
|
|
226
|
+
digest. Mutable local Git remote configuration is never repository provenance, and
|
|
227
|
+
the provider adapter gains no acceptance authority.
|
|
228
|
+
|
|
189
229
|
Proposal merge authority derives from proposal origin and publication state. An
|
|
190
230
|
agent-host review object created only after full lifecycle completion may use standing
|
|
191
231
|
policy auto-merge for its exact approved head. A Renovate `process-adoption` proposal
|
|
@@ -428,8 +428,13 @@ processctl change review submit --change-id issue-123 --report review.json
|
|
|
428
428
|
~~~
|
|
429
429
|
|
|
430
430
|
`changes-requested` returns to `change implement`, which starts a new cycle and
|
|
431
|
-
invalidates prior verification and approval.
|
|
432
|
-
|
|
431
|
+
invalidates prior verification and approval. Under the bounded-loop authority this
|
|
432
|
+
is finite: the third changes-requested final-review cycle in one decision window
|
|
433
|
+
records an owner-decision escalation and blocks a fourth autonomous implementation
|
|
434
|
+
cycle. Finding renames, splits, paths, severities and invariant labels do not reset
|
|
435
|
+
the count. The existing decision-required assessment, challenged recommendation and
|
|
436
|
+
owner resolution may open one fresh three-cycle window; they never approve or remove
|
|
437
|
+
findings. `approved` can advance only while the source still matches:
|
|
433
438
|
|
|
434
439
|
~~~text
|
|
435
440
|
processctl change finish --change-id issue-123 \
|
|
@@ -437,6 +442,43 @@ processctl change finish --change-id issue-123 \
|
|
|
437
442
|
processctl change status --change-id issue-123
|
|
438
443
|
~~~
|
|
439
444
|
|
|
445
|
+
### Process authority transition
|
|
446
|
+
|
|
447
|
+
A trust-root adoption uses a clean N-1 control checkout and a separate N+1 candidate
|
|
448
|
+
checkout. Register the exact transition before the target changes any candidate file,
|
|
449
|
+
then let the installed target emit only non-authoritative evidence:
|
|
450
|
+
|
|
451
|
+
~~~text
|
|
452
|
+
processctl change transition register --project-root control \
|
|
453
|
+
--change-id adopt-process-0-9-0 --request transition-request.json \
|
|
454
|
+
--target-checkout target-tag-checkout --artifact-root target-artifacts \
|
|
455
|
+
--release-receipt target-evidence.json --artifact-attestation target-artifacts.json \
|
|
456
|
+
--actor worker --context worker-session --actor-kind agent
|
|
457
|
+
|
|
458
|
+
processctl authority-transition candidate-evidence \
|
|
459
|
+
--candidate-root candidate --target-process-root /installed/target \
|
|
460
|
+
--request transition-request.json --output candidate-evidence.json \
|
|
461
|
+
--actor candidate-materializer --context candidate-session --actor-kind agent
|
|
462
|
+
|
|
463
|
+
processctl change transition ingest --project-root control \
|
|
464
|
+
--change-id adopt-process-0-9-0 --candidate-root candidate \
|
|
465
|
+
--target-process-root /installed/target --evidence candidate-evidence.json \
|
|
466
|
+
--actor worker --context worker-session --actor-kind agent
|
|
467
|
+
~~~
|
|
468
|
+
|
|
469
|
+
Every later `change verify`, `change remote`, `change review`, `change finish`, and
|
|
470
|
+
`change status` command supplies the same `--candidate-root`; lifecycle state and the
|
|
471
|
+
CLI authority remain in `control`. The target lock never becomes an ordinary bypass.
|
|
472
|
+
Transition verification, review, completion, remote evidence and receipt use their
|
|
473
|
+
transition-only schema majors.
|
|
474
|
+
|
|
475
|
+
The initial producer bootstrap is separate. Public 0.7.0 completes an exact intent
|
|
476
|
+
and protected-transition policy. A verifier checked out from the policy's fixed
|
|
477
|
+
protected-base feature commit validates the 0.7.0 bundle, immutable target release,
|
|
478
|
+
complete candidate and current base. Only its fixed
|
|
479
|
+
`authority-transition-completion` check may feed the policy-bound exact-head merge;
|
|
480
|
+
the successful merge consumes the authorization and activates the target.
|
|
481
|
+
|
|
440
482
|
One worker owning specification, planning, implementation, and verification is the
|
|
441
483
|
default topology. Bounded helpers are optional optimizations, not required roles;
|
|
442
484
|
only review requires a separate actor and context.
|
|
@@ -544,7 +586,22 @@ drift repeats the assessment with a newly reserved reviewer context bound to the
|
|
|
544
586
|
source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
|
|
545
587
|
historical and cannot authorize the new cycle.
|
|
546
588
|
|
|
547
|
-
|
|
589
|
+
New finite-boundary changes use change schema 4. Their `reviewBoundary` is a closed
|
|
590
|
+
set of trust boundaries and fault rows; every row names its trigger or injection
|
|
591
|
+
boundary, expected outcome, criteria, proving profiles/evidence, and stop condition.
|
|
592
|
+
Every review finding is exactly `covered` or `contract-gap`. Covered findings bind
|
|
593
|
+
one declared row and carry that identity unchanged. Contract gaps bind no row, remain
|
|
594
|
+
open, and trigger owner decision on the first review. The registered contract is
|
|
595
|
+
never extended in place: after owner decision the current lifecycle stays
|
|
596
|
+
superseded, and a new contract must explicitly own the expanded boundary.
|
|
597
|
+
|
|
598
|
+
Review-loop decision windows start prospectively under the adopted authority; older
|
|
599
|
+
lifecycle artifacts are not replayed into a new counter. Resolved escalation chains
|
|
600
|
+
are retained separately from the mutable current plan-decision slot and are included
|
|
601
|
+
in completion and exported receipt evidence. This reuses existing reviewers and
|
|
602
|
+
recommendation authority; it adds no loop arbiter or reviewer-of-reviewer.
|
|
603
|
+
|
|
604
|
+
When a schema-3 or schema-4 change selects a project-owned `requiredEvidence` id, local profiles
|
|
548
605
|
alone do not advance it to review. Create the exact no-authority request, run the
|
|
549
606
|
project adapter, and ingest the complete supplemental set first:
|
|
550
607
|
|
|
@@ -788,10 +845,27 @@ carried findings; the attesting host or human boundary, not local process state,
|
|
|
788
845
|
authenticates who produced it.
|
|
789
846
|
|
|
790
847
|
The producer release workflows implement the same host-neutral chain with explicit
|
|
791
|
-
artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle
|
|
792
|
-
`release-candidate.yml` restores it and runs
|
|
793
|
-
`change implement`, and every required `change verify`;
|
|
794
|
-
`engineering-process-review-required` event names the exact artifact
|
|
848
|
+
artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle.
|
|
849
|
+
For an ordinary governed Release, `release-candidate.yml` restores it and runs
|
|
850
|
+
`change start`, `change plan`, `change implement`, and every required `change verify`;
|
|
851
|
+
the resulting `engineering-process-review-required` event names the exact artifact
|
|
852
|
+
and checkpoint. The one `authority-transition-bootstrap` Release instead contains an
|
|
853
|
+
authored schema-3 plan readable by immutable public 0.7. The initial workflow runs
|
|
854
|
+
`change start`, `change plan`, and `change decision start`, then emits
|
|
855
|
+
`engineering-process-plan-review-required` without implementing the candidate. A
|
|
856
|
+
fresh read-only plan reviewer returns the exact assigned report to
|
|
857
|
+
`release-plan-approval.yml`; that protected-main callback authenticates the producing
|
|
858
|
+
workflow path, protected-base SHA, run id and attempt before restoring the same source
|
|
859
|
+
and lifecycle. The provider handoff carries the id and attempt together as the
|
|
860
|
+
required `plannedRun` object so every identity remains explicit without exceeding
|
|
861
|
+
GitHub's ten-property `client_payload` limit. A protected-base adapter renders and
|
|
862
|
+
validates that bounded event before the provider call. It submits the report,
|
|
863
|
+
implements, verifies, and emits the ordinary
|
|
864
|
+
source-review handoff. A separate bounded `needs: continue`, `always()` cleanup job
|
|
865
|
+
runs on another runner after primary-job success, failure, timeout, or interruption;
|
|
866
|
+
after artifact resolution it preserves bounded diagnostics, consumes and reconciles
|
|
867
|
+
the single-use planned artifact, and makes a retry require a fresh planned run and
|
|
868
|
+
assignment. It cannot finish, publish, or merge the Release.
|
|
795
869
|
The consumer-selected host restores that lifecycle, chooses an agent or human,
|
|
796
870
|
registers the assignment, submits the exact report, resolves any finding loop, runs
|
|
797
871
|
`change finish`, and exports completion evidence. It sends only that bounded
|
|
@@ -54,6 +54,17 @@ typed authorization bundle is not a lifecycle receipt. Self-adoption must pin th
|
|
|
54
54
|
public version before another release can be prepared; every later release is
|
|
55
55
|
`governed` by a receipt from its public N-1 authority.
|
|
56
56
|
|
|
57
|
+
One producer-lineage exception exists for the immutable 0.7.0/0.8.0 authority
|
|
58
|
+
deadlock. A release containing the permanent authority-transition protocol uses
|
|
59
|
+
release schema 4 mode `authority-transition-bootstrap`. The source generator accepts
|
|
60
|
+
that mode only while the producer lock is exactly 0.7.0, the latest public release is
|
|
61
|
+
exactly 0.8.0, and the governed release set contains
|
|
62
|
+
`authority-transition-protocol`. Public 0.7.0 supplies the lifecycle receipt and the
|
|
63
|
+
source-owned verifier; 0.8.0 remains immutable public history but never becomes the
|
|
64
|
+
producer authority. The version is still derived from the reviewed change set. After
|
|
65
|
+
that one release is prepared, its new previous-version and source-lock predicates make
|
|
66
|
+
a second use invalid.
|
|
67
|
+
|
|
57
68
|
## Serialized-contract versions
|
|
58
69
|
|
|
59
70
|
Each artifact owns an independent integer `schemaVersion`. Package SemVer and schema
|
|
@@ -93,6 +104,15 @@ Package `schemaImpact` is `unchanged`, `additive`, or `breaking` for the combine
|
|
|
93
104
|
release. Additive schema capability requires at least a capability release; a
|
|
94
105
|
breaking schema requires an incompatible release.
|
|
95
106
|
|
|
107
|
+
Authority transitions do not reinterpret the one-workspace artifacts already
|
|
108
|
+
published. Transition-only generation uses release schema 4, distribution-attestation
|
|
109
|
+
schema 2, lifecycle schema 3, verification schema 4, supplemental-verification schema
|
|
110
|
+
3, review schema 4, completion schema 2, evidence-receipt schema 2, and remote request
|
|
111
|
+
and evidence schema 2. Authority-transition request, candidate evidence,
|
|
112
|
+
bootstrap-adoption intent, bootstrap consumption, and protected-transition policy
|
|
113
|
+
start at schema 1. Every historical reader and generator retains its published
|
|
114
|
+
meaning.
|
|
115
|
+
|
|
96
116
|
## Controlled dependency-proposal capability
|
|
97
117
|
|
|
98
118
|
The strict default remains completion before any branch or PR publication. A consumer
|
|
@@ -232,6 +252,25 @@ matrix is not a compatibility substitute. Provider transport remains project-own
|
|
|
232
252
|
while request expansion, ingestion, invalidation, and terminal ordering are portable
|
|
233
253
|
process semantics.
|
|
234
254
|
|
|
255
|
+
## Bounded review-correction authority
|
|
256
|
+
|
|
257
|
+
Change schema 4 adds the finite review-boundary contract. Review, plan-decision
|
|
258
|
+
assignment, lifecycle, completion, recommendation, and evidence-receipt schemas gain
|
|
259
|
+
additive fields or references while preserving every released document's meaning.
|
|
260
|
+
The adopted authority nevertheless changes workflow semantics: after three
|
|
261
|
+
changes-requested final-review cycles, another implementation cycle is blocked until
|
|
262
|
+
the existing reviewed owner-decision chain resolves it. Before 1.0 this is a breaking
|
|
263
|
+
package change and therefore requires the next minor version, migration guidance,
|
|
264
|
+
immutable publication, and separate self-adoption.
|
|
265
|
+
|
|
266
|
+
Decision windows start prospectively. Historical states without `reviewLoop` remain
|
|
267
|
+
unchanged and are never backfilled from old review events. New finite-boundary
|
|
268
|
+
findings are either covered by one closed fault row or are contract gaps. Contract
|
|
269
|
+
gaps keep their finding open and require a superseding change; no in-place extension
|
|
270
|
+
or old evidence conversion is supported. Resolved loop decisions are retained in
|
|
271
|
+
completion and receipt artifacts even after the mutable current plan assessment is
|
|
272
|
+
refreshed.
|
|
273
|
+
|
|
235
274
|
## Release and adoption boundary
|
|
236
275
|
|
|
237
276
|
Release, self-adoption, and consumer adoption are separate changes. The numbered
|
|
@@ -254,6 +293,30 @@ sequence below is the default agent-host completion-first route:
|
|
|
254
293
|
checks; there is no post-merge synchronization.
|
|
255
294
|
5. N+1 governs only changes that begin after the merged adoption checkpoint.
|
|
256
295
|
|
|
296
|
+
For an explicit authority transition, steps 3-4 use two isolated workspaces. The
|
|
297
|
+
control workspace stays clean, pinned, and synchronized to public N-1 and owns the
|
|
298
|
+
lifecycle ledger. Before any candidate mutation, N-1 registers the exact source
|
|
299
|
+
authority, target release provenance, control checkpoint, candidate base, selected
|
|
300
|
+
assets, migration input, expected paths, and expiry. Installed N+1 may materialize
|
|
301
|
+
and check only a separate candidate workspace and emit schema-1 evidence. N-1
|
|
302
|
+
independently ingests that evidence, runs profiles against the exact candidate,
|
|
303
|
+
assigns review, closes findings, completes, and publishes the candidate checkpoint.
|
|
304
|
+
There is no `--ignore-lock` route and no lifecycle transition executed by N+1.
|
|
305
|
+
|
|
306
|
+
The first producer cutover additionally uses a separately completed 0.7.0 bootstrap
|
|
307
|
+
intent and a project-owner-installed protected-transition policy. The validated 0.7.0
|
|
308
|
+
bootstrap bundle checkpoint Git-binds both artifacts. A verifier fixed to the exact
|
|
309
|
+
0.7.0-governed protected-base feature commit runs outside target and candidate
|
|
310
|
+
checkouts, resolves the target tag, receipt, attestation, artifacts and distribution,
|
|
311
|
+
recomputes complete materialization, and compares the exact candidate. The policy
|
|
312
|
+
fixes that verifier, workflow, check context, current base, target, exact head and
|
|
313
|
+
protected auto-merge grant. Successful current-base merge is the atomic one-time
|
|
314
|
+
consumption event; afterward the base and source lock no longer satisfy the policy.
|
|
315
|
+
The tracked policy does not embed its own commit id. Instead the validated 0.7.0
|
|
316
|
+
bundle supplies the reviewed checkpoint, and the adapter requires its Git tree to be
|
|
317
|
+
byte-identical to the independently resolved current protected-base tree. This avoids
|
|
318
|
+
a self-referential commit field while preserving an exact base binding.
|
|
319
|
+
|
|
257
320
|
An opted-in schema-3 Renovate `process-adoption` proposal is the explicit exception to
|
|
258
321
|
steps 3-4: after complete materialization and protected-base proposal validation,
|
|
259
322
|
Renovate may publish it before consumer-owner review. It never receives agent-host
|
|
@@ -775,6 +775,7 @@ def apply_adoption(
|
|
|
775
775
|
*,
|
|
776
776
|
requirements_source: Path | None = None,
|
|
777
777
|
expected_requirements_digest: str | None = None,
|
|
778
|
+
rollback_probe: bool = False,
|
|
778
779
|
) -> dict[str, object]:
|
|
779
780
|
project_root = Path(os.path.abspath(os.fspath(project_root)))
|
|
780
781
|
process_root = process_root.resolve()
|
|
@@ -890,6 +891,10 @@ def apply_adoption(
|
|
|
890
891
|
project_root / ".process" / "project.json",
|
|
891
892
|
migration.target_content,
|
|
892
893
|
)
|
|
894
|
+
if rollback_probe:
|
|
895
|
+
raise ContractError(
|
|
896
|
+
"controlled authority-transition rollback probe"
|
|
897
|
+
)
|
|
893
898
|
issues = sync_skills(project_root, process_root, check=False)
|
|
894
899
|
if issues:
|
|
895
900
|
raise ContractError("\n".join(issues))
|
{engineering_process-0.8.0 → engineering_process-0.9.0}/engineering_process/artifact_attestation.py
RENAMED
|
@@ -131,7 +131,10 @@ def _receipt_identity(
|
|
|
131
131
|
*,
|
|
132
132
|
checkpoint: str,
|
|
133
133
|
) -> dict[str, Any] | None:
|
|
134
|
-
if release.provenance_mode
|
|
134
|
+
if release.provenance_mode in {
|
|
135
|
+
"governed",
|
|
136
|
+
"authority-transition-bootstrap",
|
|
137
|
+
}:
|
|
135
138
|
if receipt_path is None:
|
|
136
139
|
raise ContractError("governed artifact attestation requires a lifecycle receipt")
|
|
137
140
|
if receipt_path.name != release.receipt_asset:
|
|
@@ -311,8 +314,9 @@ def _expected_attestation(
|
|
|
311
314
|
limit=1_000_000,
|
|
312
315
|
label="artifact attestation release contract",
|
|
313
316
|
)
|
|
317
|
+
transition = release.provenance_mode == "authority-transition-bootstrap"
|
|
314
318
|
return {
|
|
315
|
-
"schemaVersion": 1,
|
|
319
|
+
"schemaVersion": 2 if transition else 1,
|
|
316
320
|
"kind": ATTESTATION_KIND,
|
|
317
321
|
"checkpoint": checkpoint,
|
|
318
322
|
"release": {
|
|
@@ -332,6 +336,20 @@ def _expected_attestation(
|
|
|
332
336
|
authorization_path,
|
|
333
337
|
checkpoint=checkpoint,
|
|
334
338
|
),
|
|
339
|
+
**(
|
|
340
|
+
{
|
|
341
|
+
"authorityTransition": {
|
|
342
|
+
"sourceAuthority": {
|
|
343
|
+
"version": release.transition_source_version,
|
|
344
|
+
"digest": release.transition_source_digest,
|
|
345
|
+
},
|
|
346
|
+
"skippedRelease": release.transition_skipped_version,
|
|
347
|
+
"bootstrapChangeId": release.transition_change_id,
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
if transition
|
|
351
|
+
else {}
|
|
352
|
+
),
|
|
335
353
|
"artifacts": _artifact_entries(artifact_root, release),
|
|
336
354
|
}
|
|
337
355
|
|