engineering-process 0.3.0__tar.gz → 0.5.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.5.0/MANIFEST.in +2 -0
- {engineering_process-0.3.0/engineering_process.egg-info → engineering_process-0.5.0}/PKG-INFO +195 -11
- engineering_process-0.5.0/PROCESS_IMPROVEMENT.md +132 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/PRODUCTION_STANDARD.md +59 -6
- {engineering_process-0.3.0 → engineering_process-0.5.0}/README.md +194 -10
- {engineering_process-0.3.0 → engineering_process-0.5.0}/VERSIONING.md +85 -19
- {engineering_process-0.3.0 → engineering_process-0.5.0}/bundles.json +2 -6
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/__init__.py +1 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/_supervisor_posix.py +15 -2
- engineering_process-0.5.0/engineering_process/_supervisor_windows.py +284 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/_windows_job.py +128 -15
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/bootstrap.py +3 -2
- engineering_process-0.5.0/engineering_process/bounded_process.py +236 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/cli.py +809 -6
- engineering_process-0.5.0/engineering_process/command_catalog.py +26 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/contracts.py +1224 -7
- engineering_process-0.5.0/engineering_process/diagnostics.py +95 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/distribution.py +14 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/distribution_verify.py +11 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/environment.py +22 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/evidence.py +2 -0
- engineering_process-0.5.0/engineering_process/evidence_transport.py +93 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/git.py +12 -0
- engineering_process-0.5.0/engineering_process/improvement.py +1308 -0
- engineering_process-0.5.0/engineering_process/lifecycle.py +2457 -0
- engineering_process-0.5.0/engineering_process/lifecycle_routes.py +107 -0
- engineering_process-0.5.0/engineering_process/process_graph.py +327 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/publication.py +356 -2
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/release_candidate.py +47 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/runner.py +2 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/supervision.py +3 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/supplemental.py +5 -4
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/syncing.py +9 -5
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/tooling.py +40 -11
- {engineering_process-0.3.0 → engineering_process-0.5.0/engineering_process.egg-info}/PKG-INFO +195 -11
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process.egg-info/SOURCES.txt +38 -0
- engineering_process-0.5.0/examples/automation-policy.json +30 -0
- engineering_process-0.5.0/examples/automation-proposal-policy.json +30 -0
- engineering_process-0.5.0/examples/automation-proposal.json +72 -0
- engineering_process-0.5.0/examples/improvement-catalog.json +24 -0
- engineering_process-0.5.0/examples/improvement-disposition.json +36 -0
- engineering_process-0.5.0/examples/improvement-reproduction.json +40 -0
- engineering_process-0.5.0/examples/improvement-resolution.json +26 -0
- engineering_process-0.5.0/examples/improvement-signal.json +50 -0
- engineering_process-0.5.0/improvement-catalog.json +67 -0
- engineering_process-0.5.0/process-graph.json +136 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/assess-design/SKILL.md +5 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/cross-repo-change/SKILL.md +6 -0
- engineering_process-0.5.0/process_assets/skills/evolve-process/SKILL.md +69 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/finish-change/SKILL.md +6 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/plan-change/SKILL.md +4 -0
- engineering_process-0.5.0/process_assets/skills/publish-change/SKILL.md +88 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/review-change/SKILL.md +16 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/run-change/SKILL.md +24 -5
- engineering_process-0.5.0/process_assets/skills/run-change/references/execution.md +242 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/run-project-command/SKILL.md +5 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/verify-change/SKILL.md +6 -2
- {engineering_process-0.3.0 → engineering_process-0.5.0}/pyproject.toml +19 -2
- engineering_process-0.5.0/release.json +138 -0
- engineering_process-0.5.0/schemas/automation-policy.schema.json +63 -0
- engineering_process-0.5.0/schemas/automation-proposal-policy.schema.json +117 -0
- engineering_process-0.5.0/schemas/automation-proposal.schema.json +223 -0
- engineering_process-0.5.0/schemas/improvement-catalog.schema.json +89 -0
- engineering_process-0.5.0/schemas/improvement-disposition.schema.json +167 -0
- engineering_process-0.5.0/schemas/improvement-reproduction.schema.json +89 -0
- engineering_process-0.5.0/schemas/improvement-resolution.schema.json +65 -0
- engineering_process-0.5.0/schemas/improvement-signal.schema.json +235 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/lifecycle.schema.json +54 -1
- engineering_process-0.5.0/schemas/process-graph.schema.json +48 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/supplemental-verification.schema.json +106 -4
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/verification.schema.json +103 -2
- {engineering_process-0.3.0 → engineering_process-0.5.0}/templates/adopt-process-windows-job.py +128 -15
- {engineering_process-0.3.0 → engineering_process-0.5.0}/templates/adopt-process.py +215 -7
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_adoption_runner.py +57 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_bootstrap.py +46 -0
- engineering_process-0.5.0/tests/test_bounded_process.py +229 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_bundles.py +3 -2
- engineering_process-0.5.0/tests/test_cli.py +891 -0
- engineering_process-0.5.0/tests/test_completed_release_dispatch.py +249 -0
- engineering_process-0.5.0/tests/test_completion_evidence_transport.py +91 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_contracts.py +190 -0
- engineering_process-0.5.0/tests/test_diagnostics.py +80 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_distribution_verify.py +47 -33
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_environment.py +63 -0
- engineering_process-0.5.0/tests/test_improvement.py +499 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_lifecycle.py +847 -1
- engineering_process-0.5.0/tests/test_process_graph.py +174 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_process_install.py +211 -0
- engineering_process-0.5.0/tests/test_publication.py +976 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_release_candidate.py +94 -156
- engineering_process-0.5.0/tests/test_release_candidate_boundary.py +92 -0
- engineering_process-0.5.0/tests/test_release_completion_identity.py +141 -0
- engineering_process-0.5.0/tests/test_release_evidence_restore.py +259 -0
- engineering_process-0.5.0/tests/test_release_evidence_selection.py +164 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_release_qualification.py +69 -8
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_runner.py +95 -1
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_schemas.py +52 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_self_hosting.py +188 -106
- engineering_process-0.5.0/tests/test_skills.py +135 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_source_checkout.py +62 -0
- engineering_process-0.5.0/tests/test_supervision.py +310 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_supplemental.py +40 -2
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_syncing.py +7 -1
- engineering_process-0.5.0/tests/test_test_suite.py +62 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_tooling.py +88 -4
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_windows_job.py +121 -9
- engineering_process-0.3.0/MANIFEST.in +0 -4
- engineering_process-0.3.0/engineering_process/_supervisor_windows.py +0 -149
- engineering_process-0.3.0/engineering_process/lifecycle.py +0 -1204
- engineering_process-0.3.0/process_assets/skills/evolve-process/SKILL.md +0 -39
- engineering_process-0.3.0/process_assets/skills/publish-change/SKILL.md +0 -49
- engineering_process-0.3.0/process_assets/skills/run-change/references/execution.md +0 -92
- engineering_process-0.3.0/release.json +0 -54
- engineering_process-0.3.0/tests/test_cli.py +0 -426
- engineering_process-0.3.0/tests/test_publication.py +0 -356
- engineering_process-0.3.0/tests/test_skills.py +0 -65
- engineering_process-0.3.0/tests/test_supervision.py +0 -146
- {engineering_process-0.3.0 → engineering_process-0.5.0}/LICENSE +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/__main__.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/_download_worker.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/adoption.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/artifact_attestation.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/bundles.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/git_attributes.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/helper_launch.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/impact.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/managed.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/markdown.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/release.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/requirements-build.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/requirements-dev.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/requirements-release.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/requirements-runtime.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/runtime.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process/skills.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process.egg-info/dependency_links.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process.egg-info/entry_points.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process.egg-info/requires.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/engineering_process.egg-info/top_level.txt +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/adoption-migration.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/change.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/plan.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/project.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/release-change.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/release.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/examples/review.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/build-frontend/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/build-frontend-foundation/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/change-api/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/define-change-contract/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/design-module/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/govern-ui/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/implement-change/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/implement-module/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/implement-use-case/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/integrate-mcp/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/maintain-docs/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/process_assets/skills/specify-use-case/SKILL.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/adoption-migration.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/change.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/evidence-receipt.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/plan.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/process-lock.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/project.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/release-change.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/release.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/review.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/schemas/reviewer-attestation.schema.json +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/setup.cfg +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/templates/AGENTS.process.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/templates/PULL_REQUEST_TEMPLATE.md +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_adoption.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_artifact_attestation.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_distribution.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_evals.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_impact.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_publish_event.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_pypi_publication.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_release.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_release_preparation.py +0 -0
- {engineering_process-0.3.0 → engineering_process-0.5.0}/tests/test_runtime.py +0 -0
{engineering_process-0.3.0/engineering_process.egg-info → engineering_process-0.5.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.5.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
|
|
@@ -78,6 +78,13 @@ checkpoint and workspace fingerprint.
|
|
|
78
78
|
|
|
79
79
|
## Execution architecture
|
|
80
80
|
|
|
81
|
+
Validated failures participate in a federated improvement loop. Consumers export
|
|
82
|
+
bounded, redacted signals to the owning producer without granting authority;
|
|
83
|
+
producer triage, lifecycle completion, immutable release, consumer adoption, and
|
|
84
|
+
consumer reproduction remain separate gates. `processctl improvement status` exposes
|
|
85
|
+
the portable chain and next owner. See
|
|
86
|
+
[PROCESS_IMPROVEMENT.md](PROCESS_IMPROVEMENT.md).
|
|
87
|
+
|
|
81
88
|
Consumers use one foreground-task contract on every supported platform. The contract
|
|
82
89
|
owns argument-array commands, non-interactive standard input, bounded output, timeout,
|
|
83
90
|
exit status, and descendant cleanup. Platform selection occurs once inside the
|
|
@@ -85,6 +92,9 @@ distribution: the POSIX backend owns a new process session/group and the Windows
|
|
|
85
92
|
backend owns a kill-on-close Job Object. Consumer manifests, evidence, and exit codes
|
|
86
93
|
do not branch by operating system. If an outer Windows Job applies incompatible
|
|
87
94
|
nesting or UI limits, target creation fails closed instead of running uncontained.
|
|
95
|
+
After a command root exits, both backends allow at most 250 milliseconds for child
|
|
96
|
+
accounting to drain naturally. A process still present after that bound is terminated
|
|
97
|
+
and makes the command fail; commands with no remaining child return immediately.
|
|
88
98
|
|
|
89
99
|
This task boundary intentionally separates finite commands from services and
|
|
90
100
|
interactive protocols. `processctl exec`, requirement probes, setup command actions,
|
|
@@ -94,6 +104,14 @@ commands outside this executor until a separate service or interactive lifecycle
|
|
|
94
104
|
specified. They must not be placed in verification profiles or wrapped by
|
|
95
105
|
`processctl exec`.
|
|
96
106
|
|
|
107
|
+
A finite command succeeds only when its process boundary passes and its complete
|
|
108
|
+
admitted stdout and stderr are free of classified warning and error diagnostics. The
|
|
109
|
+
shared classifier is bounded and non-configurable. Exit-zero diagnostics therefore
|
|
110
|
+
fail `doctor`, `setup`, `exec`, verification, and internal distribution commands at
|
|
111
|
+
the shared owner. Reports retain redacted diagnostic metadata and line digests, not
|
|
112
|
+
raw matched text. Fix the warning or error at its owner; do not silence it, replace
|
|
113
|
+
the canonical command, or set a tool-specific suppression variable to obtain a pass.
|
|
114
|
+
|
|
97
115
|
## Consumer bootstrap
|
|
98
116
|
|
|
99
117
|
Add only project-owned configuration:
|
|
@@ -156,10 +174,12 @@ Renovate must install and verify a target authority before that target exists in
|
|
|
156
174
|
checkout, and `processctl sync --check` compares those bytes with the pinned
|
|
157
175
|
distribution.
|
|
158
176
|
|
|
159
|
-
For an existing consumer,
|
|
177
|
+
For an existing consumer, automation may prepare one unpublished adoption candidate,
|
|
178
|
+
but the normal Renovate PR-first route is excluded from process-authority updates.
|
|
160
179
|
The managed runner installs the target authority from the complete hash lock outside
|
|
161
|
-
the checkout and atomically updates the process lock and managed assets
|
|
162
|
-
|
|
180
|
+
the checkout and atomically updates the process lock and managed assets before the
|
|
181
|
+
lifecycle host publishes the completed candidate. If the consumer chooses or requires
|
|
182
|
+
new project configuration, it adds
|
|
163
183
|
`.process/adoption-migrations/<target-version>.json`; the installed target authority
|
|
164
184
|
binds the source and target manifest digests, validates the complete target manifest,
|
|
165
185
|
and updates `.process/project.json` in the same rollback transaction. Optional
|
|
@@ -365,7 +385,8 @@ component closure, check routing, and evidence remain distribution-owned.
|
|
|
365
385
|
|
|
366
386
|
Select capability bundles from `bundles.json`: every consumer starts with `core`,
|
|
367
387
|
then adds only capabilities it actually owns. For example, a web product commonly
|
|
368
|
-
adds `delivery`, `product`, `api`, `frontend`,
|
|
388
|
+
adds `delivery`, `product`, `api`, `frontend`, and `docs`. Publication from a
|
|
389
|
+
completed checkpoint is part of the mandatory core chain. Add
|
|
369
390
|
`cross-repo` only when independently versioned repositories participate in one
|
|
370
391
|
public-contract change. Re-run `project init ... --replace` with the intended bundle
|
|
371
392
|
set when deliberately changing the pin; version remains unchanged during an
|
|
@@ -384,6 +405,12 @@ through its public N-1 self-hosting boundary.
|
|
|
384
405
|
Agents enter non-trivial delivery through the synchronized `run-change` skill; phase
|
|
385
406
|
skills are internal owners, not a workflow each project must reconnect.
|
|
386
407
|
|
|
408
|
+
`process-graph.json` is the machine-readable owner for that chain. It binds every
|
|
409
|
+
phase to one owner skill, permitted `processctl` commands, success/failure outcomes,
|
|
410
|
+
next phase/skill, and the standing-policy merge boundary. Distribution validation rejects
|
|
411
|
+
missing skills, non-core chain owners, nonexistent commands, unknown phases, and
|
|
412
|
+
broken handoffs; prose skills explain the graph but do not replace it.
|
|
413
|
+
|
|
387
414
|
## Canonical lifecycle
|
|
388
415
|
|
|
389
416
|
Create a change contract from `examples/change.json` and a plan from
|
|
@@ -445,7 +472,26 @@ through a fail-closed migration that replays immutable review artifacts to recon
|
|
|
445
472
|
pending findings before any transition is allowed.
|
|
446
473
|
|
|
447
474
|
Completion does not imply commit creation, push, merge, release, or deployment.
|
|
448
|
-
Those remain separately
|
|
475
|
+
Those remain separately gated project workflows. A valid `.process/automation.json`
|
|
476
|
+
provides standing authorization, so the host continues each operation automatically
|
|
477
|
+
after its owning gate instead of asking for repeated confirmation. An owner directive
|
|
478
|
+
may authorize installing that policy but never substitutes for a missing policy.
|
|
479
|
+
|
|
480
|
+
When new evidence exposes multiple materially valid directions or would change
|
|
481
|
+
accepted scope, owner, trust boundary, authority, compatibility, rollout, or
|
|
482
|
+
lifecycle order, the coordinator stops dependent mutation and asks the project owner.
|
|
483
|
+
It presents evidence, the invariant, real options, trade-offs, and a recommendation;
|
|
484
|
+
the accepted decision is recorded before work resumes. Bounded implementation details
|
|
485
|
+
already decided by the contract continue autonomously.
|
|
486
|
+
|
|
487
|
+
The canonical publication order is stricter than a PR-first workflow: implementation
|
|
488
|
+
and every required profile pass on a clean checkpoint; a consumer-selected independent
|
|
489
|
+
agent or human semantically reviews that checkpoint; findings repeat implementation,
|
|
490
|
+
complete verification, and fresh review until approved; `change finish` records
|
|
491
|
+
completion; only then may automation push and create the PR. Static policy/secret/pin
|
|
492
|
+
checks supplement this review and cannot generate a semantic verdict. With a valid
|
|
493
|
+
standing policy, automation then waits for exact-head/current-base required checks and
|
|
494
|
+
performs the configured merge without a separate human step.
|
|
449
495
|
|
|
450
496
|
Completed local evidence can be moved across machines or attached to a release as a
|
|
451
497
|
bounded receipt. Export and validate it before any explicit prune:
|
|
@@ -477,6 +523,10 @@ processctl publication validate-range --project-root . \
|
|
|
477
523
|
--branch feat/short-description --range origin/main..HEAD
|
|
478
524
|
processctl publication validate-pr --title "feat(scope): describe the change" \
|
|
479
525
|
--branch feat/short-description --state draft --body-file pr.md
|
|
526
|
+
processctl publication validate-source --project-root . \
|
|
527
|
+
--change-id issue-123 --commit <completed-checkpoint> \
|
|
528
|
+
--title "feat(scope): describe the change" \
|
|
529
|
+
--branch feat/short-description --body-file pr.md
|
|
480
530
|
processctl contract validate --kind release release.json
|
|
481
531
|
processctl publication validate-release --project-root . \
|
|
482
532
|
--tag v0.2.0 --release-name v0.2.0 \
|
|
@@ -497,6 +547,90 @@ remains responsible for the semantic truth of project-specific evidence.
|
|
|
497
547
|
Raw HTML is outside the supported grammar for both managed `AGENTS.md` contracts and
|
|
498
548
|
pull-request descriptions; use visible CommonMark instead.
|
|
499
549
|
|
|
550
|
+
`validate-pr` remains a metadata-compatibility command. `validate-source` is the
|
|
551
|
+
canonical publication gate and requires current completion evidence for the exact
|
|
552
|
+
commit, regardless of provider draft/ready presentation.
|
|
553
|
+
|
|
554
|
+
### Standing gated automation
|
|
555
|
+
|
|
556
|
+
Projects opt into unattended routine operation with `.process/automation.json`, using
|
|
557
|
+
the packaged `automation-policy` schema. The exact policy authorizes commit, push,
|
|
558
|
+
review-object publication, merge, release, publication, deployment, adoption, and
|
|
559
|
+
ephemeral cleanup only after their existing gates. Merge always requires completed
|
|
560
|
+
lifecycle evidence, fresh independent review, exact head, current protected base,
|
|
561
|
+
required checks, branch protection, and the configured merge method. Missing or
|
|
562
|
+
invalid policy grants no authority.
|
|
563
|
+
|
|
564
|
+
The confirmation mode is `exceptions-only`. Automation involves the owner only when a
|
|
565
|
+
required capability or authority is unavailable, bounded idempotent recovery is
|
|
566
|
+
exhausted, or a material product/security decision is missing. Pending checks,
|
|
567
|
+
ordinary retries, routine merges, and already authorized external actions continue
|
|
568
|
+
without per-action confirmation.
|
|
569
|
+
|
|
570
|
+
### Controlled automation proposals
|
|
571
|
+
|
|
572
|
+
Completion-before-publication remains the default. A consumer may enable an untrusted
|
|
573
|
+
dependency proposal before completion only through a policy file already present on
|
|
574
|
+
the protected base at `.process/automation-proposals.json`. The policy uses the
|
|
575
|
+
shape in `examples/automation-proposal-policy.json`: current policy uses schema 2,
|
|
576
|
+
selects the target and automation prefix, allows only `dependency-update`,
|
|
577
|
+
requires the canonical `lifecycle-completion` check, and fixes every dangerous control
|
|
578
|
+
to its fail-closed value. Absence, disablement, a branch-only policy, or a policy digest
|
|
579
|
+
mismatch blocks the route.
|
|
580
|
+
|
|
581
|
+
The immutable provider verifier emits one bounded
|
|
582
|
+
`engineering-process-controlled-automation-proposal` report for the exact repository,
|
|
583
|
+
base/head, changed paths, title/body digest, owner, controls, and verifier revision.
|
|
584
|
+
The adapter resolves `--base-commit` independently from the provider's current target
|
|
585
|
+
event; it must not copy that value from the report being checked. Before creating or
|
|
586
|
+
updating a proposal, validate the report against the clean source:
|
|
587
|
+
|
|
588
|
+
~~~text
|
|
589
|
+
processctl contract validate --kind automation-proposal-policy \
|
|
590
|
+
.process/automation-proposals.json
|
|
591
|
+
processctl contract validate --kind automation-proposal proposal-policy.json
|
|
592
|
+
processctl publication validate-proposal --project-root . \
|
|
593
|
+
--policy-evidence proposal-policy.json \
|
|
594
|
+
--repository <owner/repository> --commit <head-sha> \
|
|
595
|
+
--title "chore(deps): update dependencies" \
|
|
596
|
+
--branch automation/renovate/dependencies --target-branch main \
|
|
597
|
+
--base-commit <protected-base-sha> \
|
|
598
|
+
--state draft --body-file pr.md \
|
|
599
|
+
--verifier-repository <owner/verifier> --verifier-commit <verifier-sha>
|
|
600
|
+
~~~
|
|
601
|
+
|
|
602
|
+
This pass proves only that the proposal is safe to expose as untrusted input. It is
|
|
603
|
+
not verification, semantic review, completion, or merge authority. Proposal checks
|
|
604
|
+
remain read-only and receive no secrets; automerge, scripts, plugins, shell execution,
|
|
605
|
+
privileged CI, process-authority, workflow, release, deployment, security-policy, and
|
|
606
|
+
trust-root changes are excluded.
|
|
607
|
+
|
|
608
|
+
The required completion check is absent on every new proposal head. After the exact
|
|
609
|
+
head completes the lifecycle, export its receipt, finalize the managed PR requirements,
|
|
610
|
+
and have the same immutable verifier produce fresh policy evidence bound to the final
|
|
611
|
+
ready body and unchanged base/head. Then run the combined gate:
|
|
612
|
+
|
|
613
|
+
~~~text
|
|
614
|
+
processctl publication validate-proposal-completion --project-root . \
|
|
615
|
+
--policy-evidence proposal-policy.json \
|
|
616
|
+
--evidence completion.json --evidence-kind receipt \
|
|
617
|
+
--repository <owner/repository> --commit <head-sha> \
|
|
618
|
+
--title "chore(deps): update dependencies" \
|
|
619
|
+
--branch automation/renovate/dependencies --target-branch main \
|
|
620
|
+
--base-commit <protected-base-sha> \
|
|
621
|
+
--body-file ready-pr.md \
|
|
622
|
+
--verifier-repository <owner/verifier> --verifier-commit <verifier-sha>
|
|
623
|
+
~~~
|
|
624
|
+
|
|
625
|
+
Only a successful combined gate permits the provider adapter to create
|
|
626
|
+
`lifecycle-completion` for that exact SHA. A force update has no inherited check;
|
|
627
|
+
branch protection must require the proposal to be current with the exact validated
|
|
628
|
+
base; duplicate mismatch fails closed. Historical schema-1 policy remains human-only.
|
|
629
|
+
Schema 2 keeps provider automerge disabled before completion and permits merge only
|
|
630
|
+
after the protected base's standing automation policy and exact completion gate pass.
|
|
631
|
+
Provider tokens, check APIs, branch protection, retries, and repository selection
|
|
632
|
+
remain consumer-owned adapter behavior.
|
|
633
|
+
|
|
500
634
|
## Trust boundary
|
|
501
635
|
|
|
502
636
|
The CLI proves structural separation: reviewer actor id and context id must both be
|
|
@@ -508,11 +642,58 @@ conversation, pass stable identities to `change review start`, and preserve its
|
|
|
508
642
|
evidence. A stable reviewer actor or role may be reused with a fresh context; merely
|
|
509
643
|
renaming retained context does not satisfy the process.
|
|
510
644
|
|
|
645
|
+
Self-hosted verifier, signing, release-controller, and process-authority changes use
|
|
646
|
+
the portable authority-rotation rule: the old trust root governs introduction, the
|
|
647
|
+
new root is published under an immutable identity before consumers pin it, cutover is
|
|
648
|
+
proved without a control gap, and retirement happens only after the new boundary is
|
|
649
|
+
active. Provider-specific mechanics may require multiple independently completed
|
|
650
|
+
changes; normal product changes do not inherit that staging automatically.
|
|
651
|
+
|
|
511
652
|
`change review submit` may be invoked by a coordinator transporting the assigned
|
|
512
653
|
reviewer's exact report. The CLI validates that artifact against the assignment and
|
|
513
654
|
carried findings; the attesting host or human boundary, not local process state,
|
|
514
655
|
authenticates who produced it.
|
|
515
656
|
|
|
657
|
+
The producer release workflows implement the same host-neutral chain with explicit
|
|
658
|
+
artifacts and callbacks: `release-pr.yml` creates only an unpublished Git bundle;
|
|
659
|
+
`release-candidate.yml` restores it and runs `change start`, `change plan`,
|
|
660
|
+
`change implement`, and every required `change verify`; the resulting
|
|
661
|
+
`engineering-process-review-required` event names the exact artifact and checkpoint.
|
|
662
|
+
The consumer-selected host restores that lifecycle, chooses an agent or human,
|
|
663
|
+
registers the assignment, submits the exact report, resolves any finding loop, runs
|
|
664
|
+
`change finish`, and exports completion evidence. It sends only that bounded
|
|
665
|
+
gzip/base64 evidence to `release-approval.yml`; semantic reports and reviewer selection
|
|
666
|
+
never become workflow inputs. The publication workflow validates the receipt against
|
|
667
|
+
the exact clean source with `publication validate-evidence-source`, and only then
|
|
668
|
+
pushes the branch, creates or reconciles the ready PR, validates the standing policy,
|
|
669
|
+
and enables exact-head protected auto-merge. No workflow bypasses branch protection.
|
|
670
|
+
|
|
671
|
+
The host callback is deterministic after semantic completion:
|
|
672
|
+
|
|
673
|
+
~~~text
|
|
674
|
+
processctl evidence export --change-id <change-id> --output completion.json
|
|
675
|
+
processctl evidence encode-completion --evidence completion.json \
|
|
676
|
+
--evidence-kind receipt --output completion.txt
|
|
677
|
+
gh workflow run release-approval.yml --ref main \
|
|
678
|
+
-f verified_run_id=<verified-run-id> \
|
|
679
|
+
-f comparison_base=<base-sha> \
|
|
680
|
+
-f release_head_sha=<completed-checkpoint> \
|
|
681
|
+
-f completion_evidence_gzip_base64="$(<completion.txt)"
|
|
682
|
+
~~~
|
|
683
|
+
|
|
684
|
+
The callback `comparison_base` is the candidate source base: the immediate protected
|
|
685
|
+
`main` parent used for source restoration, current-base checks, and the publication
|
|
686
|
+
range. The receipt's lifecycle comparison base is independently owned by
|
|
687
|
+
`.release/change.json` and normally identifies the previous immutable release tag;
|
|
688
|
+
the publication boundary validates both identities against their respective owners.
|
|
689
|
+
An older callback whose candidate source base is no longer current fails before any
|
|
690
|
+
candidate-owned publication adapter is invoked.
|
|
691
|
+
|
|
692
|
+
A bootstrap-authority release uses `evidence export-bootstrap` and
|
|
693
|
+
`--evidence-kind bootstrap-authorization`. The adapter rejects oversized or malformed
|
|
694
|
+
transport, a different process identity, base, project, checkpoint, workspace
|
|
695
|
+
fingerprint, source tree, or publication range.
|
|
696
|
+
|
|
516
697
|
## Distribution contracts
|
|
517
698
|
|
|
518
699
|
- `project.json` declares baseline profiles and exact argument-array checks.
|
|
@@ -541,12 +722,15 @@ authenticates who produced it.
|
|
|
541
722
|
classification contract. The generated Release PR gate binds that contract to the
|
|
542
723
|
exact SemVer increment, package version, latest reachable prior tag, reviewed head,
|
|
543
724
|
identical merge tree, immutable checkpoint, and main ancestry.
|
|
544
|
-
- Remote matrix jobs publish one bounded supplemental-verification schema-
|
|
725
|
+
- Remote matrix jobs publish one bounded supplemental-verification schema-2 bundle
|
|
545
726
|
per platform/runtime. Its manifest binds the exact source and workflow checkpoints,
|
|
546
727
|
automation actor/context, run URL, platform/runtime identity, selected impact,
|
|
547
|
-
configured timeouts, output byte counts/digests,
|
|
548
|
-
its schema-
|
|
549
|
-
|
|
728
|
+
configured timeouts, output byte counts/digests, redacted diagnostic summaries,
|
|
729
|
+
truncation state, and the hashes of its schema-3 profile reports. Historical
|
|
730
|
+
supplemental schema-1 bundles and verification schema-1/schema-2 reports remain
|
|
731
|
+
readable under their released semantics. GitHub's artifact id and digest complete
|
|
732
|
+
the immutable remote reference; this supplements rather than replaces N-1
|
|
733
|
+
lifecycle evidence.
|
|
550
734
|
- New lifecycle work uses bounded plan schema 2. Selective-impact consumers may add
|
|
551
735
|
the optional capability on project schema 3, while new integrations use bounded
|
|
552
736
|
project schema 4. Plan schema 1 and the pre-existing fields of project schemas 1-3
|
|
@@ -580,7 +764,7 @@ authenticates who produced it.
|
|
|
580
764
|
~~~text
|
|
581
765
|
python -m venv .venv
|
|
582
766
|
.venv/bin/python -m pip install -e '.[dev]'
|
|
583
|
-
.venv/bin/python
|
|
767
|
+
.venv/bin/python verification/run_test_suite.py
|
|
584
768
|
.venv/bin/python processctl.py skills validate --root process_assets/skills
|
|
585
769
|
.venv/bin/python processctl.py digest
|
|
586
770
|
~~~
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Federated process improvement
|
|
2
|
+
|
|
3
|
+
This document owns the public feedback protocol that turns validated failures into
|
|
4
|
+
local correction or shared process evolution without transferring repository
|
|
5
|
+
authority.
|
|
6
|
+
|
|
7
|
+
## Ownership
|
|
8
|
+
|
|
9
|
+
A consumer owns its project behavior, exact evidence, local lifecycle, publication,
|
|
10
|
+
and adoption decisions. A process producer owns portable lifecycle semantics,
|
|
11
|
+
schemas, CLI enforcement, invariant classification, releases, and the public
|
|
12
|
+
improvement catalog. A transport moves immutable artifacts and may attest delivery;
|
|
13
|
+
it owns neither side's implementation, merge, release, nor adoption.
|
|
14
|
+
|
|
15
|
+
Consumer evidence is untrusted producer input. A signal can trigger triage but never
|
|
16
|
+
authorizes mutation. A producer disposition can classify and link work but never
|
|
17
|
+
authorizes implementation or delivery. A completed producer change does not prove an
|
|
18
|
+
immutable release or consumer recovery.
|
|
19
|
+
|
|
20
|
+
## Artifact chain
|
|
21
|
+
|
|
22
|
+
The portable chain contains four independent schema-1 JSON artifacts:
|
|
23
|
+
|
|
24
|
+
1. `engineering-process-improvement-signal` binds the consumer project, repository,
|
|
25
|
+
checkpoint, process lock, trigger, owner claim, proposed invariant, bounded
|
|
26
|
+
evidence hashes, and target producer. It contains no raw output, environment,
|
|
27
|
+
secrets, credentials, or authority grant.
|
|
28
|
+
2. `engineering-process-improvement-disposition` is producer-owned triage. It binds
|
|
29
|
+
the canonical signal digest, assigns the canonical invariant and reusable class,
|
|
30
|
+
records new, duplicate, or recurring status, and links accepted work to a producer
|
|
31
|
+
lifecycle. Rejection is explicit and evidence-backed.
|
|
32
|
+
3. `engineering-process-improvement-resolution` binds an accepted disposition to a
|
|
33
|
+
completed producer lifecycle receipt and one immutable public release. It grants
|
|
34
|
+
no consumer adoption authority.
|
|
35
|
+
4. `engineering-process-improvement-reproduction` binds the producer version, tag,
|
|
36
|
+
release name, commit, and artifact-set digest to a clean consumer checkpoint, its
|
|
37
|
+
selected-skill process-lock digest, and passing project-owned profiles. Only this
|
|
38
|
+
artifact closes a shared consumer case.
|
|
39
|
+
|
|
40
|
+
Every later artifact carries canonical digests for every prior artifact. Validation
|
|
41
|
+
is bounded by item count, document bytes, aggregate bytes, identifier size, and URI
|
|
42
|
+
size. Core reads and writes local files only. GitHub issues, dispatches, MCP calls,
|
|
43
|
+
queues, or other delivery mechanisms are optional adapters and must preserve exact
|
|
44
|
+
artifact bytes.
|
|
45
|
+
|
|
46
|
+
## Lifecycle gates
|
|
47
|
+
|
|
48
|
+
A rejected governed verification profile or unresolved independent-review finding
|
|
49
|
+
creates a pending improvement case. Corrective work cannot silently advance through
|
|
50
|
+
another verification, completion, or source publication while classification is
|
|
51
|
+
missing.
|
|
52
|
+
|
|
53
|
+
Classification records:
|
|
54
|
+
|
|
55
|
+
- owner boundary: `project-local`, `shared-process`, `operations-or-external`, or
|
|
56
|
+
`missing-product-or-authorization-input`;
|
|
57
|
+
- reusable class: local behavior, process rule, deterministic enforcement,
|
|
58
|
+
portability gap, or obsolete guidance;
|
|
59
|
+
- canonical or proposed invariant id;
|
|
60
|
+
- explicit local, shared, external, input, or producer disposition;
|
|
61
|
+
- a rationale digest and, for shared escalation, the producer target.
|
|
62
|
+
|
|
63
|
+
A reviewed local fix may close at lifecycle completion. An accepted inbound producer
|
|
64
|
+
case may reach producer completion but stays release-owned until an immutable
|
|
65
|
+
resolution exists. A shared consumer case stays incomplete until disposition,
|
|
66
|
+
resolution, and reproduction all validate.
|
|
67
|
+
|
|
68
|
+
`producer-improvement` classifies a shared-process defect discovered in the producer's
|
|
69
|
+
own governed work. It remains local producer lifecycle work and requires the reviewed
|
|
70
|
+
catalog to activate the same invariant and change before completion; it does not
|
|
71
|
+
fabricate a consumer signal. Inbound consumer evidence enters only through
|
|
72
|
+
`improvement ingest` and retains the complete signal/catalog/disposition receipt
|
|
73
|
+
boundary.
|
|
74
|
+
|
|
75
|
+
`processctl change status` reports every local, producer, and consumer case, including
|
|
76
|
+
proposed and canonical invariant ids, recurrence, catalog status and digest,
|
|
77
|
+
producer/change, immutable release, consumer checkpoint/process identity, artifact
|
|
78
|
+
source and canonical digests, blockers, and next owner. The public projection omits
|
|
79
|
+
private lifecycle artifact paths.
|
|
80
|
+
`processctl improvement status` reports a transported artifact chain without reading
|
|
81
|
+
either repository's private lifecycle files.
|
|
82
|
+
|
|
83
|
+
## Recurrence
|
|
84
|
+
|
|
85
|
+
`improvement-catalog.json` is producer-owned and versioned with the distribution. It
|
|
86
|
+
contains canonical invariant ids, reusable classes, public surfaces, status, and
|
|
87
|
+
public resolving change/release identity. It never contains consumer repository
|
|
88
|
+
identity or incident evidence.
|
|
89
|
+
|
|
90
|
+
A new signal assigned to a resolved catalog invariant is a recurrence. It cannot be
|
|
91
|
+
closed as another non-shared narrow incident unless the producer disposition carries
|
|
92
|
+
an explicit owner-approved exception and evidence digest. An active invariant yields
|
|
93
|
+
a duplicate disposition linked to existing work. A new semantic class is added only
|
|
94
|
+
through a reviewed producer lifecycle. Before that producer lifecycle can complete,
|
|
95
|
+
the reviewed distribution catalog must contain the canonical invariant as `active`,
|
|
96
|
+
with the same reusable class and `activeChangeId` as the selected lifecycle. Release
|
|
97
|
+
PR materialization resolves only entries whose active change is in the exact release
|
|
98
|
+
change set.
|
|
99
|
+
|
|
100
|
+
## Release and adoption
|
|
101
|
+
|
|
102
|
+
Producer completion, producer release, consumer adoption, and consumer reproduction
|
|
103
|
+
are separate boundaries:
|
|
104
|
+
|
|
105
|
+
1. Public N-1 governs and reviews the producer capability.
|
|
106
|
+
2. The owner separately authorizes one immutable producer release.
|
|
107
|
+
3. A consumer independently adopts that release under its currently pinned public
|
|
108
|
+
authority. It never commits a dependency on the producer working tree.
|
|
109
|
+
4. The consumer reruns the exact affected boundary and exports reproduction evidence.
|
|
110
|
+
5. Aggregate improvement closes only when producer and consumer proof are both valid.
|
|
111
|
+
|
|
112
|
+
Before release, a read-only candidate artifact may provide forward compatibility
|
|
113
|
+
evidence at a real consumer. It is supplemental proof, not a production dependency,
|
|
114
|
+
adoption, publication, or merge authorization.
|
|
115
|
+
|
|
116
|
+
## Commands
|
|
117
|
+
|
|
118
|
+
~~~text
|
|
119
|
+
processctl improvement classify ...
|
|
120
|
+
processctl improvement observe ...
|
|
121
|
+
processctl improvement export-signal ...
|
|
122
|
+
processctl improvement disposition ...
|
|
123
|
+
processctl improvement ingest ...
|
|
124
|
+
processctl improvement resolution ...
|
|
125
|
+
processctl improvement reproduction ...
|
|
126
|
+
processctl improvement attach ...
|
|
127
|
+
processctl improvement validate-chain ...
|
|
128
|
+
processctl improvement status ...
|
|
129
|
+
~~~
|
|
130
|
+
|
|
131
|
+
All mutation commands operate only on the selected local project and explicit output
|
|
132
|
+
files. No improvement command performs network work or mutates another repository.
|
|
@@ -46,18 +46,56 @@ Environment probe regular expressions evaluate a bounded view whose CRLF and CR
|
|
|
46
46
|
boundaries are canonicalized to LF. Captured output, byte counts, truncation state,
|
|
47
47
|
and digests retain the original bytes so portability does not weaken evidence.
|
|
48
48
|
|
|
49
|
+
Process-owned finite commands pass only when execution is otherwise successful and
|
|
50
|
+
the complete admitted stdout and stderr streams are free of classified warning and
|
|
51
|
+
error diagnostics. The distribution owns one bounded, non-configurable classifier;
|
|
52
|
+
an exit code of zero cannot override a diagnostic failure. Projects correct the
|
|
53
|
+
diagnostic at its owning boundary rather than suppressing output, changing the
|
|
54
|
+
canonical command, or installing a consumer wrapper. Durable reports record only the
|
|
55
|
+
policy, severity, stream, line number, bounded count, truncation state, and line
|
|
56
|
+
SHA-256. They never copy the diagnostic line into lifecycle evidence.
|
|
57
|
+
|
|
49
58
|
Missing, stale, truncated beyond a declared policy, blocked, or unverifiable evidence
|
|
50
59
|
never becomes a pass. Independent review records each accepted dimension as
|
|
51
60
|
`verified`, `failed`, or `not-applicable-confirmed`; lifecycle submission compares
|
|
52
61
|
that evidence one-for-one with the change contract before approval.
|
|
53
62
|
|
|
54
63
|
Remote matrix claims require one bounded supplemental bundle per platform/runtime.
|
|
55
|
-
The schema-
|
|
56
|
-
actor/context, run identity and URL, platform/runtime identity, selected
|
|
57
|
-
configured timeouts, output byte counts/digests,
|
|
58
|
-
its schema-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
The current schema-2 manifest binds the exact source and workflow checkpoints,
|
|
65
|
+
automation actor/context, run identity and URL, platform/runtime identity, selected
|
|
66
|
+
impact, configured timeouts, output byte counts/digests, diagnostic summaries,
|
|
67
|
+
truncation state, and the hashes of its schema-3 profile reports. Historical
|
|
68
|
+
supplemental schema-1 manifests and verification schema-1/schema-2 reports retain
|
|
69
|
+
their released reader semantics. The remote artifact id and service-computed digest
|
|
70
|
+
are preserved with review evidence. These reports supplement the public N-1
|
|
71
|
+
lifecycle authority; code under verification never promotes itself to lifecycle
|
|
72
|
+
authority.
|
|
73
|
+
|
|
74
|
+
## Failure to invariant
|
|
75
|
+
|
|
76
|
+
A validated command, gate, release, adoption, or external-integration failure must
|
|
77
|
+
preserve exact bounded evidence and classify its owner before corrective mutation as
|
|
78
|
+
project-local, shared-process, operations-or-external, or missing product or
|
|
79
|
+
authorization input. Dependent candidates stay blocked. Shared defects are corrected
|
|
80
|
+
in the producer rather than wrapped or duplicated by consumers; project behavior
|
|
81
|
+
remains project-owned unless a portable class is proven.
|
|
82
|
+
|
|
83
|
+
Every governed verification failure and unresolved review finding has a structured
|
|
84
|
+
improvement disposition before corrective progress. A shared consumer case exports a
|
|
85
|
+
bounded untrusted signal and remains incomplete until a producer disposition,
|
|
86
|
+
completed-lifecycle and immutable-release resolution, and exact consumer reproduction
|
|
87
|
+
all validate. A failure assigned to an already resolved catalog invariant is a
|
|
88
|
+
recurrence and requires producer-owned process evolution or an explicit owner-approved
|
|
89
|
+
exception. See `PROCESS_IMPROVEMENT.md`.
|
|
90
|
+
|
|
91
|
+
Every correction proves valid behavior and the corresponding fail-closed class at the
|
|
92
|
+
lowest reliable owner boundary. Shared corrections additionally require producer
|
|
93
|
+
profiles and reproduction at affected consumer boundaries before release. A transient
|
|
94
|
+
operations/external recovery is allowed only with unchanged source and configuration;
|
|
95
|
+
attempts are bounded, idempotent, diagnostic-preserving, and stop on deterministic
|
|
96
|
+
failure. Source, branch, version, credentials, and controls are never changed merely
|
|
97
|
+
to cause another attempt. Independent review treats violation of these ownership and
|
|
98
|
+
evidence boundaries as completion-blocking.
|
|
61
99
|
|
|
62
100
|
## Resource and generated-state policy
|
|
63
101
|
|
|
@@ -104,6 +142,21 @@ policy. This keeps distribution input bytes platform-independent. The producer
|
|
|
104
142
|
root policy is not a consumer-managed asset and is never written by bootstrap or
|
|
105
143
|
sync.
|
|
106
144
|
|
|
145
|
+
## Standing gated automation
|
|
146
|
+
|
|
147
|
+
A project-owned standing policy may authorize unattended commit, push,
|
|
148
|
+
review-object, exact-head merge, release, publication, deployment, adoption, and
|
|
149
|
+
ephemeral cleanup only after the existing owning gates pass. It never weakens
|
|
150
|
+
lifecycle completion, fresh independent review, exact head/base, required checks,
|
|
151
|
+
branch protection, consumer ownership, release identity, or destructive-target
|
|
152
|
+
validation. Provider automerge remains disabled for untrusted pre-completion
|
|
153
|
+
proposals.
|
|
154
|
+
|
|
155
|
+
Owner involvement is exceptions-only: a required capability or authority is
|
|
156
|
+
unavailable, bounded idempotent recovery is exhausted, or a material product/security
|
|
157
|
+
decision is missing. Pending checks, normal bounded retries, and routine authorized
|
|
158
|
+
merge or publication operations continue automatically with durable diagnostics.
|
|
159
|
+
|
|
107
160
|
## Release identity
|
|
108
161
|
|
|
109
162
|
The release contract is the source of truth for package name, distribution name,
|