engineering-process 0.6.0__tar.gz → 0.7.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.6.0/engineering_process.egg-info → engineering_process-0.7.0}/PKG-INFO +61 -8
- {engineering_process-0.6.0 → engineering_process-0.7.0}/PRODUCTION_STANDARD.md +34 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/README.md +60 -7
- {engineering_process-0.6.0 → engineering_process-0.7.0}/VERSIONING.md +26 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/__init__.py +1 -1
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/cli.py +120 -1
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/command_catalog.py +3 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/contracts.py +388 -6
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/distribution_verify.py +4 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/environment.py +34 -5
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/evidence.py +324 -2
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/lifecycle.py +733 -24
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/process_graph.py +18 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/release_candidate.py +193 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0/engineering_process.egg-info}/PKG-INFO +61 -8
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process.egg-info/SOURCES.txt +4 -0
- engineering_process-0.7.0/examples/plan-decision-review-assignment.json +45 -0
- engineering_process-0.7.0/examples/plan-decision-review.json +26 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/plan.json +14 -2
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/project.json +15 -1
- {engineering_process-0.6.0 → engineering_process-0.7.0}/improvement-catalog.json +18 -2
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process-graph.json +18 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/assess-design/SKILL.md +3 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/implement-change/SKILL.md +10 -2
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/plan-change/SKILL.md +15 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/run-change/SKILL.md +5 -2
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/run-change/references/execution.md +39 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/pyproject.toml +5 -1
- engineering_process-0.7.0/release.json +50 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/evidence-receipt.schema.json +48 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/lifecycle.schema.json +27 -0
- engineering_process-0.7.0/schemas/plan-decision-review-assignment.schema.json +99 -0
- engineering_process-0.7.0/schemas/plan-decision-review.schema.json +81 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/plan.schema.json +88 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/project.schema.json +42 -3
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_contracts.py +62 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_environment.py +85 -5
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_lifecycle.py +747 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_candidate.py +244 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_runner.py +29 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_schemas.py +2 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_skills.py +24 -0
- engineering_process-0.6.0/release.json +0 -51
- {engineering_process-0.6.0 → engineering_process-0.7.0}/LICENSE +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/MANIFEST.in +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/PROCESS_IMPROVEMENT.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/bundles.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/__main__.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/_download_worker.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/_supervisor_posix.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/_supervisor_windows.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/_windows_job.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/adoption.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/artifact_attestation.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/bootstrap.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/bounded_process.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/bundles.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/diagnostics.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/distribution.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/evidence_transport.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/git.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/git_attributes.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/helper_launch.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/impact.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/improvement.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/lifecycle_routes.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/managed.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/markdown.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/publication.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/recommendation.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/release.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/remote_verification.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/requirements-build.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/requirements-dev.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/requirements-release.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/requirements-runtime.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/runner.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/runtime.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/skills.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/supervision.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/supplemental.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/syncing.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process/tooling.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process.egg-info/dependency_links.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process.egg-info/entry_points.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process.egg-info/requires.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/engineering_process.egg-info/top_level.txt +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/adoption-migration.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/automation-policy.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/automation-proposal-policy.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/automation-proposal.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/change.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/improvement-catalog.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/improvement-disposition.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/improvement-reproduction.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/improvement-resolution.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/improvement-signal.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/recommendation-resolution.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/recommendation-review-assignment.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/recommendation-review.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/recommendation.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/release-change.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/release.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/remote-verification-evidence.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/remote-verification-request.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/examples/review.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/change-api/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/cross-repo-change/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/define-change-contract/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/design-module/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/evolve-process/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/finish-change/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/implement-module/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/publish-change/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/review-change/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/run-project-command/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/process_assets/skills/verify-change/SKILL.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/adoption-migration.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/automation-policy.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/automation-proposal-policy.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/automation-proposal.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/change.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/improvement-catalog.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/improvement-disposition.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/improvement-reproduction.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/improvement-resolution.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/improvement-signal.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/process-graph.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/process-lock.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/recommendation-resolution.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/recommendation-review-assignment.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/recommendation-review.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/recommendation.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/release-change.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/release.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/remote-verification-evidence.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/remote-verification-request.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/review.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/reviewer-attestation.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/supplemental-verification.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/schemas/verification.schema.json +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/setup.cfg +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/templates/AGENTS.process.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/templates/adopt-process-windows-job.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/templates/adopt-process.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_adoption.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_adoption_runner.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_artifact_attestation.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_bootstrap.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_bounded_process.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_bundles.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_cli.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_completed_release_dispatch.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_completion_evidence_transport.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_diagnostics.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_distribution.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_distribution_verify.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_evals.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_impact.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_improvement.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_process_graph.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_process_install.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_publication.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_publish_event.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_pypi_publication.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_recommendation.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_candidate_boundary.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_completion_identity.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_evidence_restore.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_evidence_selection.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_preparation.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_release_qualification.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_remote_verification.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_remote_verification_adapter.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_runtime.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_self_hosting.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_source_checkout.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_supervision.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_supplemental.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_syncing.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_test_suite.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_tooling.py +0 -0
- {engineering_process-0.6.0 → engineering_process-0.7.0}/tests/test_windows_job.py +0 -0
{engineering_process-0.6.0/engineering_process.egg-info → engineering_process-0.7.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.7.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
|
|
@@ -291,6 +291,14 @@ project-native dependency commands, dependency edges, and remediation. Project s
|
|
|
291
291
|
does not carry a generic downloader, archive installer, doctor, or setup lifecycle.
|
|
292
292
|
Host prerequisites with no safe automated setup action stay blocking.
|
|
293
293
|
|
|
294
|
+
The exact logical executable `python` is reserved by the distribution and resolves to
|
|
295
|
+
the absolute interpreter running the selected immutable process authority. This rule
|
|
296
|
+
applies consistently to requirement probes, verification profiles, setup command
|
|
297
|
+
actions, and `processctl exec`; callers do not activate a virtual environment or
|
|
298
|
+
modify `PATH` first. Manifests and reports retain the portable logical token, managed
|
|
299
|
+
tools cannot shadow it, and absolute executables plus non-Python commands keep their
|
|
300
|
+
existing resolution behavior.
|
|
301
|
+
|
|
294
302
|
Probe `readOnly`, foreground-only execution, and command-action mutation scopes are
|
|
295
303
|
project-owner attestations, not an operating-system sandbox: `processctl` cannot infer
|
|
296
304
|
arbitrary subprocess side effects. Commands must not daemonize, start a detached
|
|
@@ -528,6 +536,48 @@ resolution records a selected valid option but grants no lifecycle completion, m
|
|
|
528
536
|
release, deployment, or adoption authority. Those owning gates remain separate. The
|
|
529
537
|
accepted decision is recorded before dependent work resumes.
|
|
530
538
|
|
|
539
|
+
Projects may separately adopt the `provenance-gated-authored-review` lifecycle policy.
|
|
540
|
+
Under that policy, every new nontrivial authored plan uses schema 3 and is assessed
|
|
541
|
+
before implementation by a genuinely fresh read-only reviewer. The assessment covers
|
|
542
|
+
architecture, authority, compatibility, external mutation, lifecycle order, owner,
|
|
543
|
+
rollout, scope, and trust boundary for the exact contract, plan, clean source,
|
|
544
|
+
authority, policy, author, and reviewer context. A clear assessment permits
|
|
545
|
+
implementation. A decision-required assessment must complete the existing reviewed
|
|
546
|
+
recommendation and owner-resolution chain, with a dedicated invariant binding the
|
|
547
|
+
exact assessment digest:
|
|
548
|
+
|
|
549
|
+
~~~text
|
|
550
|
+
processctl change decision start --project-root . --change-id issue-123 \
|
|
551
|
+
--actor <reviewer> --context <fresh-context> --actor-kind agent \
|
|
552
|
+
--method isolated-context --attested-by <host> \
|
|
553
|
+
--attestation-evidence <bounded-attestation>
|
|
554
|
+
processctl contract validate --kind plan-decision-review \
|
|
555
|
+
plan-decision-review.json
|
|
556
|
+
processctl change decision submit --project-root . --change-id issue-123 \
|
|
557
|
+
--review plan-decision-review.json
|
|
558
|
+
processctl change decision resolve --project-root . --change-id issue-123 \
|
|
559
|
+
--actor <coordinator> --context <coordinator-context> --actor-kind agent \
|
|
560
|
+
--recommendation recommendation.json \
|
|
561
|
+
--assignment recommendation-review-assignment.json \
|
|
562
|
+
--recommendation-review recommendation-review.json \
|
|
563
|
+
--resolution recommendation-resolution.json
|
|
564
|
+
processctl change implement --project-root . --change-id issue-123 \
|
|
565
|
+
--actor <worker> --context <worker-context> --actor-kind agent
|
|
566
|
+
~~~
|
|
567
|
+
|
|
568
|
+
The resolve command is used only for `decision-required`; a clear assessment goes
|
|
569
|
+
directly to `change implement`. Unreviewed prose, risk tiers, heuristics, author
|
|
570
|
+
self-classification, and generator labels are candidate-only and grant no authority.
|
|
571
|
+
A generated bypass is valid only for a core-registered generator whose complete plan
|
|
572
|
+
is exactly recomputed from bounded source-owned inputs and the immutable installed
|
|
573
|
+
authority. Exact generated plans are not universally sent to semantic review. Core
|
|
574
|
+
requires no daemon, scheduler, service, webhook receiver, hosted reviewer platform,
|
|
575
|
+
vendor, model, or proprietary agent API.
|
|
576
|
+
Every later implementation cycle after a finding or clean post-verification source
|
|
577
|
+
drift repeats the assessment with a newly reserved reviewer context bound to the new
|
|
578
|
+
source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
|
|
579
|
+
historical and cannot authorize the new cycle.
|
|
580
|
+
|
|
531
581
|
When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
|
|
532
582
|
alone do not advance it to review. Create the exact no-authority request, run the
|
|
533
583
|
project adapter, and ingest the complete supplemental set first:
|
|
@@ -783,9 +833,10 @@ fingerprint, source tree, or publication range.
|
|
|
783
833
|
exclusively by their hash-locked `requirements/process.txt`. The action invokes the
|
|
784
834
|
producer-owned installer from its immutable action checkout and never downloads or
|
|
785
835
|
executes helper source from the consumer branch.
|
|
786
|
-
- Versioned JSON schemas define change, plan
|
|
787
|
-
|
|
788
|
-
|
|
836
|
+
- Versioned JSON schemas define change, plan provenance, plan-decision assignment and
|
|
837
|
+
review, verification, review, recommendation, independent recommendation assignment
|
|
838
|
+
and challenge, owner resolution, lifecycle, completion-related artifacts,
|
|
839
|
+
release-change fragments, and the release
|
|
789
840
|
classification contract. The generated Release PR gate binds that contract to the
|
|
790
841
|
exact SemVer increment, package version, latest reachable prior tag, reviewed head,
|
|
791
842
|
identical merge tree, immutable checkpoint, and main ancestry.
|
|
@@ -798,10 +849,12 @@ fingerprint, source tree, or publication range.
|
|
|
798
849
|
readable under their released semantics. GitHub's artifact id and digest complete
|
|
799
850
|
the immutable remote reference; this supplements rather than replaces N-1
|
|
800
851
|
lifecycle evidence.
|
|
801
|
-
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
852
|
+
- Projects without plan-decision opt-in continue using bounded plan schema 2. An
|
|
853
|
+
opted-in project uses plan schema 3 provenance and the pre-implementation gate.
|
|
854
|
+
Selective-impact consumers may add optional capabilities on project schema 3,
|
|
855
|
+
while new integrations use bounded project schema 4. Plan schemas 1 and 2 and the
|
|
856
|
+
pre-existing fields of project schemas 1-3 retain their published validation
|
|
857
|
+
behavior instead of being tightened in place.
|
|
805
858
|
- `release.json` is the single release-identity owner. Governed GitHub tag and title
|
|
806
859
|
are both exactly `v<SemVer>`; package metadata, runtime version, artifact names,
|
|
807
860
|
authorization evidence, and later consumer locks must match it. Public-impact PRs
|
|
@@ -55,6 +55,12 @@ canonical command, or installing a consumer wrapper. Durable reports record only
|
|
|
55
55
|
policy, severity, stream, line number, bounded count, truncation state, and line
|
|
56
56
|
SHA-256. They never copy the diagnostic line into lifecycle evidence.
|
|
57
57
|
|
|
58
|
+
The portable logical command `python` resolves to the exact absolute interpreter of
|
|
59
|
+
the running immutable process authority across doctor, setup, execution, and
|
|
60
|
+
verification. Ambient `PATH` cannot select another Python installation, managed tools
|
|
61
|
+
cannot shadow the reserved binding, and evidence retains the logical command rather
|
|
62
|
+
than a host-specific activation sequence.
|
|
63
|
+
|
|
58
64
|
Missing, stale, truncated beyond a declared policy, blocked, or unverifiable evidence
|
|
59
65
|
never becomes a pass. Independent review records each accepted dimension as
|
|
60
66
|
`verified`, `failed`, or `not-applicable-confirmed`; lifecycle submission compares
|
|
@@ -109,6 +115,34 @@ evidence boundaries as completion-blocking.
|
|
|
109
115
|
|
|
110
116
|
## Recommendation validity
|
|
111
117
|
|
|
118
|
+
An opted-in project gates implementation through plan provenance. Every nontrivial
|
|
119
|
+
authored plan receives a fresh read-only semantic assessment for architecture,
|
|
120
|
+
authority, compatibility, external mutation, lifecycle order, owner, rollout, scope,
|
|
121
|
+
and trust boundary. The assignment binds the exact contract, plan, clean source,
|
|
122
|
+
authority, project policy, author, reviewer context, and canonical category set. A
|
|
123
|
+
clear assessment may authorize implementation; a decision-required assessment must
|
|
124
|
+
bind the existing independently reviewed recommendation and explicit owner resolution
|
|
125
|
+
for that exact assessment. Drift in any binding fails closed.
|
|
126
|
+
Each later implementation cycle after a finding or clean post-verification source
|
|
127
|
+
drift requires a newly reserved context and assessment bound to that cycle's source;
|
|
128
|
+
cycle-1 evidence cannot be relabeled or reused.
|
|
129
|
+
|
|
130
|
+
A process-generated plan bypass is accepted only when the immutable installed core
|
|
131
|
+
recognizes its generator and exactly recomputes the complete plan from bounded
|
|
132
|
+
validated source-owned inputs. Generator labels, risk labels, author
|
|
133
|
+
self-classification, heuristic prose scanning, and partial comparison are not
|
|
134
|
+
provenance. Exact generated plans are not universally sent to semantic review, and
|
|
135
|
+
portable core does not introduce a daemon, scheduler, webhook, hosted reviewer
|
|
136
|
+
platform, vendor, model, or proprietary agent API. Unreviewed prose remains
|
|
137
|
+
candidate-only and grants no decision or lifecycle authority.
|
|
138
|
+
|
|
139
|
+
The three possible review boundaries never review one another. Plan-decision review
|
|
140
|
+
assesses the authored plan; recommendation review challenges only the recommendation
|
|
141
|
+
and its digest binding; final lifecycle review assesses implemented source and current
|
|
142
|
+
evidence. Reviewer-of-reviewer, meta-assessment, assessment-of-assessment,
|
|
143
|
+
policy-for-policy, dynamically generated approval chains, and generic workflow
|
|
144
|
+
engines are outside the portable contract.
|
|
145
|
+
|
|
112
146
|
A material owner decision derives recommendation eligibility before optimization.
|
|
113
147
|
Every option assesses every governing hard invariant and references only proven or
|
|
114
148
|
explicitly unproven assumptions. Any violated invariant makes the option invalid; any
|
|
@@ -256,6 +256,14 @@ project-native dependency commands, dependency edges, and remediation. Project s
|
|
|
256
256
|
does not carry a generic downloader, archive installer, doctor, or setup lifecycle.
|
|
257
257
|
Host prerequisites with no safe automated setup action stay blocking.
|
|
258
258
|
|
|
259
|
+
The exact logical executable `python` is reserved by the distribution and resolves to
|
|
260
|
+
the absolute interpreter running the selected immutable process authority. This rule
|
|
261
|
+
applies consistently to requirement probes, verification profiles, setup command
|
|
262
|
+
actions, and `processctl exec`; callers do not activate a virtual environment or
|
|
263
|
+
modify `PATH` first. Manifests and reports retain the portable logical token, managed
|
|
264
|
+
tools cannot shadow it, and absolute executables plus non-Python commands keep their
|
|
265
|
+
existing resolution behavior.
|
|
266
|
+
|
|
259
267
|
Probe `readOnly`, foreground-only execution, and command-action mutation scopes are
|
|
260
268
|
project-owner attestations, not an operating-system sandbox: `processctl` cannot infer
|
|
261
269
|
arbitrary subprocess side effects. Commands must not daemonize, start a detached
|
|
@@ -493,6 +501,48 @@ resolution records a selected valid option but grants no lifecycle completion, m
|
|
|
493
501
|
release, deployment, or adoption authority. Those owning gates remain separate. The
|
|
494
502
|
accepted decision is recorded before dependent work resumes.
|
|
495
503
|
|
|
504
|
+
Projects may separately adopt the `provenance-gated-authored-review` lifecycle policy.
|
|
505
|
+
Under that policy, every new nontrivial authored plan uses schema 3 and is assessed
|
|
506
|
+
before implementation by a genuinely fresh read-only reviewer. The assessment covers
|
|
507
|
+
architecture, authority, compatibility, external mutation, lifecycle order, owner,
|
|
508
|
+
rollout, scope, and trust boundary for the exact contract, plan, clean source,
|
|
509
|
+
authority, policy, author, and reviewer context. A clear assessment permits
|
|
510
|
+
implementation. A decision-required assessment must complete the existing reviewed
|
|
511
|
+
recommendation and owner-resolution chain, with a dedicated invariant binding the
|
|
512
|
+
exact assessment digest:
|
|
513
|
+
|
|
514
|
+
~~~text
|
|
515
|
+
processctl change decision start --project-root . --change-id issue-123 \
|
|
516
|
+
--actor <reviewer> --context <fresh-context> --actor-kind agent \
|
|
517
|
+
--method isolated-context --attested-by <host> \
|
|
518
|
+
--attestation-evidence <bounded-attestation>
|
|
519
|
+
processctl contract validate --kind plan-decision-review \
|
|
520
|
+
plan-decision-review.json
|
|
521
|
+
processctl change decision submit --project-root . --change-id issue-123 \
|
|
522
|
+
--review plan-decision-review.json
|
|
523
|
+
processctl change decision resolve --project-root . --change-id issue-123 \
|
|
524
|
+
--actor <coordinator> --context <coordinator-context> --actor-kind agent \
|
|
525
|
+
--recommendation recommendation.json \
|
|
526
|
+
--assignment recommendation-review-assignment.json \
|
|
527
|
+
--recommendation-review recommendation-review.json \
|
|
528
|
+
--resolution recommendation-resolution.json
|
|
529
|
+
processctl change implement --project-root . --change-id issue-123 \
|
|
530
|
+
--actor <worker> --context <worker-context> --actor-kind agent
|
|
531
|
+
~~~
|
|
532
|
+
|
|
533
|
+
The resolve command is used only for `decision-required`; a clear assessment goes
|
|
534
|
+
directly to `change implement`. Unreviewed prose, risk tiers, heuristics, author
|
|
535
|
+
self-classification, and generator labels are candidate-only and grant no authority.
|
|
536
|
+
A generated bypass is valid only for a core-registered generator whose complete plan
|
|
537
|
+
is exactly recomputed from bounded source-owned inputs and the immutable installed
|
|
538
|
+
authority. Exact generated plans are not universally sent to semantic review. Core
|
|
539
|
+
requires no daemon, scheduler, service, webhook receiver, hosted reviewer platform,
|
|
540
|
+
vendor, model, or proprietary agent API.
|
|
541
|
+
Every later implementation cycle after a finding or clean post-verification source
|
|
542
|
+
drift repeats the assessment with a newly reserved reviewer context bound to the new
|
|
543
|
+
source checkpoint. Earlier assignment, assessment, and owner-decision artifacts stay
|
|
544
|
+
historical and cannot authorize the new cycle.
|
|
545
|
+
|
|
496
546
|
When a schema-3 change selects a project-owned `requiredEvidence` id, local profiles
|
|
497
547
|
alone do not advance it to review. Create the exact no-authority request, run the
|
|
498
548
|
project adapter, and ingest the complete supplemental set first:
|
|
@@ -748,9 +798,10 @@ fingerprint, source tree, or publication range.
|
|
|
748
798
|
exclusively by their hash-locked `requirements/process.txt`. The action invokes the
|
|
749
799
|
producer-owned installer from its immutable action checkout and never downloads or
|
|
750
800
|
executes helper source from the consumer branch.
|
|
751
|
-
- Versioned JSON schemas define change, plan
|
|
752
|
-
|
|
753
|
-
|
|
801
|
+
- Versioned JSON schemas define change, plan provenance, plan-decision assignment and
|
|
802
|
+
review, verification, review, recommendation, independent recommendation assignment
|
|
803
|
+
and challenge, owner resolution, lifecycle, completion-related artifacts,
|
|
804
|
+
release-change fragments, and the release
|
|
754
805
|
classification contract. The generated Release PR gate binds that contract to the
|
|
755
806
|
exact SemVer increment, package version, latest reachable prior tag, reviewed head,
|
|
756
807
|
identical merge tree, immutable checkpoint, and main ancestry.
|
|
@@ -763,10 +814,12 @@ fingerprint, source tree, or publication range.
|
|
|
763
814
|
readable under their released semantics. GitHub's artifact id and digest complete
|
|
764
815
|
the immutable remote reference; this supplements rather than replaces N-1
|
|
765
816
|
lifecycle evidence.
|
|
766
|
-
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
817
|
+
- Projects without plan-decision opt-in continue using bounded plan schema 2. An
|
|
818
|
+
opted-in project uses plan schema 3 provenance and the pre-implementation gate.
|
|
819
|
+
Selective-impact consumers may add optional capabilities on project schema 3,
|
|
820
|
+
while new integrations use bounded project schema 4. Plan schemas 1 and 2 and the
|
|
821
|
+
pre-existing fields of project schemas 1-3 retain their published validation
|
|
822
|
+
behavior instead of being tightened in place.
|
|
770
823
|
- `release.json` is the single release-identity owner. Governed GitHub tag and title
|
|
771
824
|
are both exactly `v<SemVer>`; package metadata, runtime version, artifact names,
|
|
772
825
|
authorization evidence, and later consumer locks must match it. Public-impact PRs
|
|
@@ -154,6 +154,32 @@ Completed historical decisions retain their original evidence and require no
|
|
|
154
154
|
backfill. A recommendation resolution is decision evidence only and never substitutes
|
|
155
155
|
for lifecycle completion or delivery authority.
|
|
156
156
|
|
|
157
|
+
## Material-decision implementation gate
|
|
158
|
+
|
|
159
|
+
Plan schema 3 adds explicit `authored` or `process-generated` provenance. The
|
|
160
|
+
plan-decision assignment and review artifacts start at schema 1, while the optional
|
|
161
|
+
project lifecycle policy is additive to project schemas 3 and 4. Released plan
|
|
162
|
+
schemas 1 and 2 retain their historical meaning and remain readable; a project that
|
|
163
|
+
does not adopt the policy retains its released schema-2 planning behavior.
|
|
164
|
+
|
|
165
|
+
Adopting `provenance-gated-authored-review` changes the pre-implementation lifecycle
|
|
166
|
+
semantics and is therefore a breaking package change before 1.0. Every new
|
|
167
|
+
nontrivial authored plan receives a fresh read-only semantic assessment across the
|
|
168
|
+
canonical material categories. A clear assessment permits `change implement`; a
|
|
169
|
+
decision-required assessment remains blocked until the existing independently
|
|
170
|
+
reviewed recommendation and explicit owner-resolution chain bind that exact
|
|
171
|
+
assessment. A process-generated plan bypasses semantic assessment only when the
|
|
172
|
+
installed immutable authority recognizes its generator and exactly recomputes the
|
|
173
|
+
complete plan from validated source-owned inputs. Unknown generators, claimed
|
|
174
|
+
labels, partial comparison, and stale contract, plan, source, authority, policy,
|
|
175
|
+
context, assessment, recommendation, or resolution evidence fail closed.
|
|
176
|
+
|
|
177
|
+
The producer ships the opt-in as a target-version adoption migration. Its current
|
|
178
|
+
N-1 release candidate stays on plan schema 2, then self-adoption activates schema 3
|
|
179
|
+
and exact release-plan recomputation for subsequent releases. No package, runtime,
|
|
180
|
+
tag, artifact, or consumer-lock identity changes in the feature PR; the separate
|
|
181
|
+
generated Release PR derives the pre-1.0 minor version.
|
|
182
|
+
|
|
157
183
|
Remote-verification request and evidence-set schema-1 artifacts, optional project
|
|
158
184
|
requirements, optional change selections, lifecycle references, and receipt content
|
|
159
185
|
are additive serialized surfaces. A project does not gain the gate until a separate
|
|
@@ -28,6 +28,8 @@ from .contracts import (
|
|
|
28
28
|
validate_improvement_resolution,
|
|
29
29
|
validate_improvement_signal,
|
|
30
30
|
validate_plan,
|
|
31
|
+
validate_plan_decision_review,
|
|
32
|
+
validate_plan_decision_review_assignment,
|
|
31
33
|
validate_process_lock,
|
|
32
34
|
validate_project,
|
|
33
35
|
validate_recommendation,
|
|
@@ -79,10 +81,13 @@ from .lifecycle import (
|
|
|
79
81
|
lifecycle_status,
|
|
80
82
|
ingest_remote_verification,
|
|
81
83
|
register_plan,
|
|
84
|
+
resolve_plan_decision,
|
|
82
85
|
request_remote_verification,
|
|
83
86
|
start_change,
|
|
87
|
+
start_plan_decision_review,
|
|
84
88
|
start_review,
|
|
85
89
|
submit_review,
|
|
90
|
+
submit_plan_decision_review,
|
|
86
91
|
verify_change,
|
|
87
92
|
)
|
|
88
93
|
from .runner import run_profile, source_state
|
|
@@ -295,6 +300,8 @@ def command_contract_validate(args: argparse.Namespace) -> int:
|
|
|
295
300
|
"improvement-resolution": validate_improvement_resolution,
|
|
296
301
|
"improvement-signal": validate_improvement_signal,
|
|
297
302
|
"plan": validate_plan,
|
|
303
|
+
"plan-decision-review": validate_plan_decision_review,
|
|
304
|
+
"plan-decision-review-assignment": validate_plan_decision_review_assignment,
|
|
298
305
|
"recommendation": validate_recommendation,
|
|
299
306
|
"recommendation-resolution": validate_recommendation_resolution,
|
|
300
307
|
"recommendation-review": validate_recommendation_review,
|
|
@@ -628,11 +635,80 @@ def command_change_plan(args: argparse.Namespace) -> int:
|
|
|
628
635
|
return 0
|
|
629
636
|
|
|
630
637
|
|
|
638
|
+
def command_change_decision_start(args: argparse.Namespace) -> int:
|
|
639
|
+
project = _lifecycle_project(args)
|
|
640
|
+
state, assignment = start_plan_decision_review(
|
|
641
|
+
args.project_root,
|
|
642
|
+
project,
|
|
643
|
+
args.change_id,
|
|
644
|
+
actor_id=args.actor,
|
|
645
|
+
context_id=args.context,
|
|
646
|
+
kind=args.actor_kind,
|
|
647
|
+
method=args.method,
|
|
648
|
+
attested_by=args.attested_by,
|
|
649
|
+
evidence=args.attestation_evidence,
|
|
650
|
+
)
|
|
651
|
+
_emit(
|
|
652
|
+
args,
|
|
653
|
+
_change_result(
|
|
654
|
+
"change decision start",
|
|
655
|
+
state,
|
|
656
|
+
verdict="pending",
|
|
657
|
+
assignment=state["planDecision"]["assignment"]["path"],
|
|
658
|
+
planSha256=assignment["planSha256"],
|
|
659
|
+
),
|
|
660
|
+
)
|
|
661
|
+
return 0
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def command_change_decision_submit(args: argparse.Namespace) -> int:
|
|
665
|
+
project = _lifecycle_project(args)
|
|
666
|
+
state, review = submit_plan_decision_review(
|
|
667
|
+
args.project_root, project, args.change_id, args.review
|
|
668
|
+
)
|
|
669
|
+
_emit(
|
|
670
|
+
args,
|
|
671
|
+
_change_result(
|
|
672
|
+
"change decision submit",
|
|
673
|
+
state,
|
|
674
|
+
verdict=review["verdict"],
|
|
675
|
+
review=state["planDecision"]["review"]["path"],
|
|
676
|
+
),
|
|
677
|
+
)
|
|
678
|
+
return 0
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
def command_change_decision_resolve(args: argparse.Namespace) -> int:
|
|
682
|
+
project = _lifecycle_project(args)
|
|
683
|
+
state = resolve_plan_decision(
|
|
684
|
+
args.project_root,
|
|
685
|
+
project,
|
|
686
|
+
args.change_id,
|
|
687
|
+
recommendation_path=args.recommendation,
|
|
688
|
+
assignment_path=args.assignment,
|
|
689
|
+
review_path=args.recommendation_review,
|
|
690
|
+
resolution_path=args.resolution,
|
|
691
|
+
actor_id=args.actor,
|
|
692
|
+
context_id=args.context,
|
|
693
|
+
kind=args.actor_kind,
|
|
694
|
+
)
|
|
695
|
+
_emit(
|
|
696
|
+
args,
|
|
697
|
+
_change_result(
|
|
698
|
+
"change decision resolve",
|
|
699
|
+
state,
|
|
700
|
+
resolution=state["planDecision"]["resolution"]["path"],
|
|
701
|
+
),
|
|
702
|
+
)
|
|
703
|
+
return 0
|
|
704
|
+
|
|
705
|
+
|
|
631
706
|
def command_change_implement(args: argparse.Namespace) -> int:
|
|
632
|
-
_lifecycle_project(args)
|
|
707
|
+
project = _lifecycle_project(args)
|
|
633
708
|
state = begin_implementation(
|
|
634
709
|
args.project_root,
|
|
635
710
|
args.change_id,
|
|
711
|
+
project=project,
|
|
636
712
|
actor_id=args.actor,
|
|
637
713
|
context_id=args.context,
|
|
638
714
|
kind=args.actor_kind,
|
|
@@ -1597,6 +1673,8 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
1597
1673
|
"improvement-resolution",
|
|
1598
1674
|
"improvement-signal",
|
|
1599
1675
|
"plan",
|
|
1676
|
+
"plan-decision-review",
|
|
1677
|
+
"plan-decision-review-assignment",
|
|
1600
1678
|
"recommendation",
|
|
1601
1679
|
"recommendation-resolution",
|
|
1602
1680
|
"recommendation-review",
|
|
@@ -2361,6 +2439,47 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
2361
2439
|
change_plan.add_argument("--plan", type=Path, required=True)
|
|
2362
2440
|
change_plan.set_defaults(handler=command_change_plan)
|
|
2363
2441
|
|
|
2442
|
+
change_decision = change_commands.add_parser(
|
|
2443
|
+
"decision", help="Assess material decisions in an authored plan"
|
|
2444
|
+
)
|
|
2445
|
+
decision_commands = change_decision.add_subparsers(
|
|
2446
|
+
dest="change_decision_command", required=True
|
|
2447
|
+
)
|
|
2448
|
+
decision_start = decision_commands.add_parser(
|
|
2449
|
+
"start", help="Reserve a fresh reviewer and create the plan assessment assignment"
|
|
2450
|
+
)
|
|
2451
|
+
_add_lifecycle_common(decision_start)
|
|
2452
|
+
_add_actor(decision_start)
|
|
2453
|
+
decision_start.add_argument("--change-id", required=True)
|
|
2454
|
+
decision_start.add_argument(
|
|
2455
|
+
"--method", choices=("isolated-context", "separate-person"), required=True
|
|
2456
|
+
)
|
|
2457
|
+
decision_start.add_argument("--attested-by", required=True)
|
|
2458
|
+
decision_start.add_argument("--attestation-evidence", required=True)
|
|
2459
|
+
decision_start.set_defaults(handler=command_change_decision_start)
|
|
2460
|
+
|
|
2461
|
+
decision_submit = decision_commands.add_parser(
|
|
2462
|
+
"submit", help="Validate and register the fresh material-decision assessment"
|
|
2463
|
+
)
|
|
2464
|
+
_add_lifecycle_common(decision_submit)
|
|
2465
|
+
decision_submit.add_argument("--change-id", required=True)
|
|
2466
|
+
decision_submit.add_argument("--review", type=Path, required=True)
|
|
2467
|
+
decision_submit.set_defaults(handler=command_change_decision_submit)
|
|
2468
|
+
|
|
2469
|
+
decision_resolve = decision_commands.add_parser(
|
|
2470
|
+
"resolve", help="Bind an approved recommendation and owner resolution"
|
|
2471
|
+
)
|
|
2472
|
+
_add_lifecycle_common(decision_resolve)
|
|
2473
|
+
_add_actor(decision_resolve)
|
|
2474
|
+
decision_resolve.add_argument("--change-id", required=True)
|
|
2475
|
+
decision_resolve.add_argument("--recommendation", type=Path, required=True)
|
|
2476
|
+
decision_resolve.add_argument("--assignment", type=Path, required=True)
|
|
2477
|
+
decision_resolve.add_argument(
|
|
2478
|
+
"--recommendation-review", type=Path, required=True
|
|
2479
|
+
)
|
|
2480
|
+
decision_resolve.add_argument("--resolution", type=Path, required=True)
|
|
2481
|
+
decision_resolve.set_defaults(handler=command_change_decision_resolve)
|
|
2482
|
+
|
|
2364
2483
|
change_implement = change_commands.add_parser(
|
|
2365
2484
|
"implement", help="Register an implementation actor and begin a cycle"
|
|
2366
2485
|
)
|