engineering-process 0.1.0__py3-none-any.whl
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/__init__.py +3 -0
- engineering_process/_download_worker.py +73 -0
- engineering_process/_supervisor_posix.py +162 -0
- engineering_process/_supervisor_windows.py +148 -0
- engineering_process/_windows_job.py +419 -0
- engineering_process/bootstrap.py +217 -0
- engineering_process/bundles.py +81 -0
- engineering_process/cli.py +1012 -0
- engineering_process/contracts.py +1274 -0
- engineering_process/distribution.py +90 -0
- engineering_process/environment.py +753 -0
- engineering_process/helper_launch.py +37 -0
- engineering_process/lifecycle.py +1024 -0
- engineering_process/managed.py +89 -0
- engineering_process/markdown.py +78 -0
- engineering_process/publication.py +463 -0
- engineering_process/requirements-build.txt +1 -0
- engineering_process/requirements-dev.txt +10 -0
- engineering_process/requirements-runtime.txt +3 -0
- engineering_process/runner.py +191 -0
- engineering_process/runtime.py +55 -0
- engineering_process/skills.py +118 -0
- engineering_process/supervision.py +72 -0
- engineering_process/syncing.py +398 -0
- engineering_process/tooling.py +891 -0
- engineering_process-0.1.0.data/data/share/engineering-process/bundles.json +47 -0
- engineering_process-0.1.0.data/data/share/engineering-process/examples/change.json +26 -0
- engineering_process-0.1.0.data/data/share/engineering-process/examples/plan.json +28 -0
- engineering_process-0.1.0.data/data/share/engineering-process/examples/project.json +54 -0
- engineering_process-0.1.0.data/data/share/engineering-process/examples/review.json +31 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/change.schema.json +88 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/lifecycle.schema.json +122 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/plan.schema.json +105 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/process-lock.schema.json +39 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/project.schema.json +515 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/review.schema.json +140 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/reviewer-attestation.schema.json +30 -0
- engineering_process-0.1.0.data/data/share/engineering-process/schemas/verification.schema.json +120 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/assess-design/SKILL.md +39 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/build-frontend/SKILL.md +38 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/build-frontend-foundation/SKILL.md +36 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/change-api/SKILL.md +36 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/cross-repo-change/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/define-change-contract/SKILL.md +40 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/design-module/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/evolve-process/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/finish-change/SKILL.md +34 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/govern-ui/SKILL.md +40 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-change/SKILL.md +41 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-module/SKILL.md +36 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-use-case/SKILL.md +36 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/integrate-mcp/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/maintain-docs/SKILL.md +35 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/plan-change/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/publish-change/SKILL.md +38 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/review-change/SKILL.md +49 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/run-change/SKILL.md +51 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/run-change/references/execution.md +88 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/run-project-command/SKILL.md +55 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/specify-use-case/SKILL.md +37 -0
- engineering_process-0.1.0.data/data/share/engineering-process/skills/verify-change/SKILL.md +38 -0
- engineering_process-0.1.0.data/data/share/engineering-process/templates/AGENTS.process.md +17 -0
- engineering_process-0.1.0.data/data/share/engineering-process/templates/PULL_REQUEST_TEMPLATE.md +27 -0
- engineering_process-0.1.0.dist-info/METADATA +387 -0
- engineering_process-0.1.0.dist-info/RECORD +69 -0
- engineering_process-0.1.0.dist-info/WHEEL +5 -0
- engineering_process-0.1.0.dist-info/entry_points.txt +2 -0
- engineering_process-0.1.0.dist-info/licenses/LICENSE +21 -0
- engineering_process-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: engineering-process
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Agent-neutral end-to-end engineering lifecycle and deterministic process CLI
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Homepage, https://github.com/phuongnse/engineering-process
|
|
7
|
+
Project-URL: Issues, https://github.com/phuongnse/engineering-process/issues
|
|
8
|
+
Project-URL: Repository, https://github.com/phuongnse/engineering-process.git
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Operating System :: MacOS
|
|
12
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
13
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
17
|
+
Requires-Python: >=3.11
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: markdown-it-py==4.2.0
|
|
21
|
+
Requires-Dist: mdurl==0.1.2
|
|
22
|
+
Requires-Dist: regex==2026.7.19
|
|
23
|
+
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: attrs==26.1.0; extra == "dev"
|
|
25
|
+
Requires-Dist: build==1.5.0; extra == "dev"
|
|
26
|
+
Requires-Dist: colorama==0.4.6; os_name == "nt" and extra == "dev"
|
|
27
|
+
Requires-Dist: jsonschema==4.26.0; extra == "dev"
|
|
28
|
+
Requires-Dist: jsonschema-specifications==2025.9.1; extra == "dev"
|
|
29
|
+
Requires-Dist: packaging==26.3; extra == "dev"
|
|
30
|
+
Requires-Dist: pyproject_hooks==1.2.0; extra == "dev"
|
|
31
|
+
Requires-Dist: referencing==0.37.0; extra == "dev"
|
|
32
|
+
Requires-Dist: rpds-py==2026.6.3; extra == "dev"
|
|
33
|
+
Requires-Dist: typing-extensions==4.15.0; python_version < "3.13" and extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Engineering Process
|
|
37
|
+
|
|
38
|
+
An agent-neutral, end-to-end engineering lifecycle. A consumer supplies project
|
|
39
|
+
policy and commands; this repository supplies the same specification, planning,
|
|
40
|
+
implementation, verification, independent-review, finding-loop, and completion
|
|
41
|
+
gates to every project.
|
|
42
|
+
|
|
43
|
+
The enforcement boundary has three parts:
|
|
44
|
+
|
|
45
|
+
1. Portable Agent Skills tell any compatible agent how to perform each phase.
|
|
46
|
+
2. `processctl` owns lifecycle state, transitions, immutable evidence, and exit codes.
|
|
47
|
+
3. The consumer's `AGENTS.md` and `.process/project.json` own domain policy and exact
|
|
48
|
+
argument-array verification commands.
|
|
49
|
+
|
|
50
|
+
Publication conventions are distribution-owned as well: manual and automation branch
|
|
51
|
+
names, Conventional Commit subjects, PR titles, the managed PR-description structure,
|
|
52
|
+
structured requirement statuses, and draft-versus-ready semantics are validated by
|
|
53
|
+
`processctl publication ...`. Projects populate those sections with their own contract,
|
|
54
|
+
impact, risk, evidence, and review details and may append stronger domain checks.
|
|
55
|
+
|
|
56
|
+
Core semantics never name a model, agent product, orchestration API, or code-indexing
|
|
57
|
+
provider. An agent host or human workflow supplies an independent reviewer identity;
|
|
58
|
+
`processctl` rejects any reviewer actor or context used by the current implementation
|
|
59
|
+
cycle. If the host cannot attest separation, review remains blocked.
|
|
60
|
+
|
|
61
|
+
The core ships only the agent-neutral reviewer-attestation contract. Host-specific
|
|
62
|
+
launchers and model configuration are separate integrations and are never part of a
|
|
63
|
+
required process bundle.
|
|
64
|
+
|
|
65
|
+
Python 3.11 or newer and Git are required. Windows command containment requires
|
|
66
|
+
Windows 10 or Windows Server 2016 and newer so Job Object membership can be attached
|
|
67
|
+
atomically during process creation. Lifecycle state is stored under ignored
|
|
68
|
+
`.process/runs/`; completion, review, and verification are bound to a clean Git
|
|
69
|
+
checkpoint and workspace fingerprint.
|
|
70
|
+
|
|
71
|
+
## Execution architecture
|
|
72
|
+
|
|
73
|
+
Consumers use one foreground-task contract on every supported platform. The contract
|
|
74
|
+
owns argument-array commands, non-interactive standard input, bounded output, timeout,
|
|
75
|
+
exit status, and descendant cleanup. Platform selection occurs once inside the
|
|
76
|
+
distribution: the POSIX backend owns a new process session/group and the Windows
|
|
77
|
+
backend owns a kill-on-close Job Object. Consumer manifests, evidence, and exit codes
|
|
78
|
+
do not branch by operating system. If an outer Windows Job applies incompatible
|
|
79
|
+
nesting or UI limits, target creation fails closed instead of running uncontained.
|
|
80
|
+
|
|
81
|
+
This task boundary intentionally separates finite commands from services and
|
|
82
|
+
interactive protocols. `processctl exec`, requirement probes, setup command actions,
|
|
83
|
+
and verification checks are finite foreground tasks. Detached Docker Compose stacks,
|
|
84
|
+
log followers, interactive shells, watchers, and stdio servers remain project-owned
|
|
85
|
+
commands outside this executor until a separate service or interactive lifecycle is
|
|
86
|
+
specified. They must not be placed in verification profiles or wrapped by
|
|
87
|
+
`processctl exec`.
|
|
88
|
+
|
|
89
|
+
## Consumer bootstrap
|
|
90
|
+
|
|
91
|
+
Add only project-owned configuration:
|
|
92
|
+
|
|
93
|
+
~~~text
|
|
94
|
+
project/
|
|
95
|
+
├── AGENTS.md
|
|
96
|
+
├── .github/
|
|
97
|
+
│ └── PULL_REQUEST_TEMPLATE.md
|
|
98
|
+
├── .gitignore # includes .process/runs/
|
|
99
|
+
└── .process/
|
|
100
|
+
└── project.json # project profiles and lifecycle baseline
|
|
101
|
+
~~~
|
|
102
|
+
|
|
103
|
+
Install `processctl` from a tagged release and create a candidate manifest from
|
|
104
|
+
`examples/project.json` with the repository's real commands. Bootstrap the complete
|
|
105
|
+
standard in one command:
|
|
106
|
+
|
|
107
|
+
~~~text
|
|
108
|
+
python -m pip install "engineering-process==0.1.0"
|
|
109
|
+
processctl project init --project-root . --manifest project.json \
|
|
110
|
+
--bundle core --bundle delivery --bundle product
|
|
111
|
+
processctl doctor --project-root .
|
|
112
|
+
~~~
|
|
113
|
+
|
|
114
|
+
`project init` validates the manifest, preflights ownership conflicts, writes the
|
|
115
|
+
lock, installs the managed `AGENTS.md` and pull-request contracts, adds the ignored
|
|
116
|
+
lifecycle-state path, and synchronizes the selected skills. It refuses to replace
|
|
117
|
+
differing project configuration or unmanaged skills unless the conflict is resolved
|
|
118
|
+
explicitly. `sync --check` and `doctor` detect drift in skills, the managed agent
|
|
119
|
+
contract, and the pull-request block. A consumer never authors or maintains process
|
|
120
|
+
skills locally.
|
|
121
|
+
|
|
122
|
+
The single project-manifest contract includes environment profiles, project-attested
|
|
123
|
+
read-only requirement probes, remediation, declarative managed-tool artifacts, and
|
|
124
|
+
optional setup actions. Use the same interface in every consumer:
|
|
125
|
+
|
|
126
|
+
~~~text
|
|
127
|
+
processctl doctor --project-root . --profile development
|
|
128
|
+
processctl setup --project-root . --profile development
|
|
129
|
+
processctl setup --project-root . --profile development --apply \
|
|
130
|
+
--allow network --allow user-files --allow project-files
|
|
131
|
+
processctl exec --project-root . --profile development -- \
|
|
132
|
+
python scripts/project.py local-dev
|
|
133
|
+
~~~
|
|
134
|
+
|
|
135
|
+
A portable tool is data, not a consumer-owned installer. Each project pins the
|
|
136
|
+
version and one immutable artifact contract per supported platform, then references
|
|
137
|
+
the tool from a `managed-tool` setup action:
|
|
138
|
+
|
|
139
|
+
~~~json
|
|
140
|
+
{
|
|
141
|
+
"managedTools": [{
|
|
142
|
+
"id": "sample-tool",
|
|
143
|
+
"version": "1.2.3",
|
|
144
|
+
"artifacts": [{
|
|
145
|
+
"platform": "linux-glibc-x64",
|
|
146
|
+
"url": "https://publisher.example/sample-tool-1.2.3.tar.gz",
|
|
147
|
+
"checksum": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
|
|
148
|
+
"archiveFormat": "tar.gz",
|
|
149
|
+
"stripComponents": 1,
|
|
150
|
+
"maxDownloadBytes": 50000000,
|
|
151
|
+
"maxExtractedBytes": 200000000,
|
|
152
|
+
"maxFiles": 10000,
|
|
153
|
+
"commands": {"sample-tool": "bin/sample-tool"}
|
|
154
|
+
}]
|
|
155
|
+
}],
|
|
156
|
+
"setupActions": [{
|
|
157
|
+
"id": "install-sample-tool",
|
|
158
|
+
"kind": "managed-tool",
|
|
159
|
+
"tool": "sample-tool",
|
|
160
|
+
"timeoutSeconds": 600
|
|
161
|
+
}]
|
|
162
|
+
}
|
|
163
|
+
~~~
|
|
164
|
+
|
|
165
|
+
The zero checksum above is a shape example only; a real manifest must contain the
|
|
166
|
+
publisher artifact's verified digest and declare every supported platform explicitly.
|
|
167
|
+
|
|
168
|
+
Schema-3 Windows command entries must resolve to native `.exe` applications. Batch
|
|
169
|
+
files are rejected because running `.cmd` or `.bat` requires a command shell. When a
|
|
170
|
+
publisher exposes a script launcher, bind the stable logical command to a verified
|
|
171
|
+
native runtime and a verified contained script instead. For example, a Windows Node
|
|
172
|
+
artifact can preserve the portable `npm` command without `cmd.exe`:
|
|
173
|
+
|
|
174
|
+
~~~json
|
|
175
|
+
{
|
|
176
|
+
"commands": {
|
|
177
|
+
"npm": {
|
|
178
|
+
"executable": "node.exe",
|
|
179
|
+
"script": "node_modules/npm/bin/npm-cli.js"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
~~~
|
|
184
|
+
|
|
185
|
+
Managed artifact paths always use contained, relative, forward-slash syntax on every
|
|
186
|
+
host. Schema-1 and schema-2 project manifests remain readable for lifecycle history,
|
|
187
|
+
but a schema-2 Windows `.cmd` or `.bat` launcher is intentionally not executable by
|
|
188
|
+
the shell-free supervisor. Migrate that entry manually to schema 3 and bind it to the
|
|
189
|
+
publisher's trusted native runtime and contained script as above; a generic migrator
|
|
190
|
+
cannot safely infer either file or attest that the task is foreground-only.
|
|
191
|
+
|
|
192
|
+
The report still records the logical command such as `["npm", "ci"]`; the executor
|
|
193
|
+
uses the absolute managed application and script paths internally. Unqualified Windows
|
|
194
|
+
commands are resolved only from absolute PATH entries, so a same-named executable in
|
|
195
|
+
the project working directory cannot shadow a verified managed tool.
|
|
196
|
+
|
|
197
|
+
`doctor` executes only probes explicitly attested `readOnly: true` and never invokes
|
|
198
|
+
setup actions. A schema-3 environment contract must also attest `foregroundOnly: true`
|
|
199
|
+
for every process-managed task. The project owner remains responsible for those
|
|
200
|
+
attestations.
|
|
201
|
+
`setup` is plan-only unless `--apply` is present, computes
|
|
202
|
+
the full dependency-ordered action plan before execution, and refuses to run any
|
|
203
|
+
action until every declared mutation scope has been approved. Supported scopes are
|
|
204
|
+
`network`, `project-files`, `user-files`, and `host-configuration`. Commands are
|
|
205
|
+
argument arrays executed without a shell, with bounded output, timeout, exit status,
|
|
206
|
+
owned process-group/job cleanup, and command digest evidence. `exec` runs an
|
|
207
|
+
ad-hoc project command only after the selected environment passes and injects paths
|
|
208
|
+
for verified managed tools. After applying a plan, processctl reruns the original
|
|
209
|
+
probes; an installer exit code alone never proves readiness.
|
|
210
|
+
|
|
211
|
+
The distribution owns detection, planning, bounded execution, HTTPS acquisition,
|
|
212
|
+
size limits, checksum verification, safe archive extraction, atomic user-local tool
|
|
213
|
+
installation, and exact managed command binding/PATH injection. A consumer owns only
|
|
214
|
+
declarative environment
|
|
215
|
+
data: exact probes, tool versions and per-platform artifacts, immutable checksums,
|
|
216
|
+
project-native dependency commands, dependency edges, and remediation. Project source
|
|
217
|
+
does not carry a generic downloader, archive installer, doctor, or setup lifecycle.
|
|
218
|
+
Host prerequisites with no safe automated setup action stay blocking.
|
|
219
|
+
|
|
220
|
+
Probe `readOnly`, foreground-only execution, and command-action mutation scopes are
|
|
221
|
+
project-owner attestations, not an operating-system sandbox: `processctl` cannot infer
|
|
222
|
+
arbitrary subprocess side effects. Commands must not daemonize, start a detached
|
|
223
|
+
session, or leave background work behind. The runner owns a POSIX process group and a
|
|
224
|
+
Windows Job Object, but no portable POSIX primitive can contain a deliberately detached
|
|
225
|
+
process. Managed-tool actions are stronger—the distribution constrains them to
|
|
226
|
+
HTTPS, declared size/checksum/archive/path boundaries and derives their approvals as
|
|
227
|
+
`network` plus `user-files`. Use a command action only for project-native package
|
|
228
|
+
managers or domain preparation that cannot be represented by the managed-tool
|
|
229
|
+
primitive, and declare every possible scope truthfully. New consumers use
|
|
230
|
+
project-manifest schema 3. Schema 1 (without an environment contract) and schema 2
|
|
231
|
+
(the original environment contract) remain readable for backward compatibility; they
|
|
232
|
+
are not relabeled as newer shapes. A consumer upgrades explicitly to schema 3 to
|
|
233
|
+
attest foreground-only task execution and use managed script bindings. New integrations
|
|
234
|
+
receive the complete environment contract instead of creating a project-local doctor
|
|
235
|
+
or setup lifecycle.
|
|
236
|
+
|
|
237
|
+
Select capability bundles from `bundles.json`: every consumer starts with `core`,
|
|
238
|
+
then adds only capabilities it actually owns. For example, a web product commonly
|
|
239
|
+
adds `delivery`, `product`, `api`, `frontend`, `docs`, and `publication`. Add
|
|
240
|
+
`cross-repo` only when independently versioned repositories participate in one
|
|
241
|
+
public-contract change. Re-run `project init ... --replace` with the intended bundle
|
|
242
|
+
set when deliberately changing the pin; version remains unchanged during an
|
|
243
|
+
unpublished development iteration.
|
|
244
|
+
|
|
245
|
+
During process development, pass
|
|
246
|
+
`--process-root /path/to/engineering-process`; consumer manifests never store that
|
|
247
|
+
local path.
|
|
248
|
+
|
|
249
|
+
`project.json.lifecycle.requiredProfiles` is the minimum evidence for every change.
|
|
250
|
+
Individual change contracts may add profiles but cannot remove the baseline.
|
|
251
|
+
Agents enter non-trivial delivery through the synchronized `run-change` skill; phase
|
|
252
|
+
skills are internal owners, not a workflow each project must reconnect.
|
|
253
|
+
|
|
254
|
+
## Canonical lifecycle
|
|
255
|
+
|
|
256
|
+
Create a change contract from `examples/change.json` and a plan from
|
|
257
|
+
`examples/plan.json`. The plan's `contractDigest` is returned by `change start`.
|
|
258
|
+
|
|
259
|
+
~~~text
|
|
260
|
+
processctl change start --contract change.json \
|
|
261
|
+
--actor worker --context worker-session --actor-kind agent
|
|
262
|
+
|
|
263
|
+
processctl change plan --change-id issue-123 --plan plan.json \
|
|
264
|
+
--actor worker --context worker-session --actor-kind agent
|
|
265
|
+
|
|
266
|
+
processctl change implement --change-id issue-123 \
|
|
267
|
+
--actor worker --context worker-session --actor-kind agent
|
|
268
|
+
|
|
269
|
+
processctl change verify --change-id issue-123 --profile development \
|
|
270
|
+
--actor worker --context worker-session --actor-kind agent
|
|
271
|
+
|
|
272
|
+
processctl change verify --change-id issue-123 --profile review \
|
|
273
|
+
--actor worker --context worker-session --actor-kind agent
|
|
274
|
+
~~~
|
|
275
|
+
|
|
276
|
+
After the phase becomes `verified`, a separate reviewer context registers its
|
|
277
|
+
assignment:
|
|
278
|
+
|
|
279
|
+
~~~text
|
|
280
|
+
processctl change review start --change-id issue-123 \
|
|
281
|
+
--actor reviewer --context isolated-review-session --actor-kind agent \
|
|
282
|
+
--method isolated-context --attested-by agent-host \
|
|
283
|
+
--attestation-evidence "Host-created isolated read-only context"
|
|
284
|
+
|
|
285
|
+
processctl change review submit --change-id issue-123 --report review.json
|
|
286
|
+
~~~
|
|
287
|
+
|
|
288
|
+
`changes-requested` returns to `change implement`, which starts a new cycle and
|
|
289
|
+
invalidates prior verification and approval. `approved` can advance only while the
|
|
290
|
+
source still matches:
|
|
291
|
+
|
|
292
|
+
~~~text
|
|
293
|
+
processctl change finish --change-id issue-123 \
|
|
294
|
+
--actor worker --context worker-session --actor-kind agent
|
|
295
|
+
processctl change status --change-id issue-123
|
|
296
|
+
~~~
|
|
297
|
+
|
|
298
|
+
One worker owning specification, planning, implementation, and verification is the
|
|
299
|
+
default topology. Bounded helpers are optional optimizations, not required roles;
|
|
300
|
+
only review requires a separate actor and context.
|
|
301
|
+
|
|
302
|
+
Open and deferred findings remain completion-blocking until a later review records
|
|
303
|
+
them as resolved or false-positive with evidence. Schema-1 lifecycle state is loaded
|
|
304
|
+
through a fail-closed migration that replays immutable review artifacts to reconstruct
|
|
305
|
+
pending findings before any transition is allowed.
|
|
306
|
+
|
|
307
|
+
Completion does not imply commit creation, push, merge, release, or deployment.
|
|
308
|
+
Those remain separately authorized project workflows.
|
|
309
|
+
|
|
310
|
+
## Publication contract
|
|
311
|
+
|
|
312
|
+
Validate common metadata before creating or updating a review object:
|
|
313
|
+
|
|
314
|
+
~~~text
|
|
315
|
+
processctl publication validate-branch --branch feat/short-description
|
|
316
|
+
processctl publication validate-commit --subject "feat(scope): describe the change"
|
|
317
|
+
processctl publication validate-range --project-root . \
|
|
318
|
+
--branch feat/short-description --range origin/main..HEAD
|
|
319
|
+
processctl publication validate-pr --title "feat(scope): describe the change" \
|
|
320
|
+
--branch feat/short-description --state draft --body-file pr.md
|
|
321
|
+
~~~
|
|
322
|
+
|
|
323
|
+
Manual branches use `{type}/{kebab-description}`. Automation uses the provider-neutral
|
|
324
|
+
`automation/{owner}/{description}` namespace. Commit subjects and PR titles use
|
|
325
|
+
Conventional Commit syntax and are limited to 72 characters. Draft PRs may retain
|
|
326
|
+
explicitly pending checklist items; every ready PR, including automation, must satisfy
|
|
327
|
+
them. The managed template owns the ordered shared sections and immutable standard
|
|
328
|
+
checklist meaning. An optional extension after its closing marker uses only
|
|
329
|
+
`## Project-specific requirements` plus one-line
|
|
330
|
+
`**Project-specific: Label**` checklist items; arbitrary headings, prose, HTML, and
|
|
331
|
+
code fences are rejected, and reserved core-policy phrases are rejected anywhere in
|
|
332
|
+
an extension item. These checks prevent structural shadowing; independent review
|
|
333
|
+
remains responsible for the semantic truth of project-specific evidence.
|
|
334
|
+
Raw HTML is outside the supported grammar for both managed `AGENTS.md` contracts and
|
|
335
|
+
pull-request descriptions; use visible CommonMark instead.
|
|
336
|
+
|
|
337
|
+
## Trust boundary
|
|
338
|
+
|
|
339
|
+
The CLI proves structural separation: reviewer actor id and context id must both be
|
|
340
|
+
unused by implementation, and the review must match the verified checkpoint. The
|
|
341
|
+
agent host or human organization owns the truth of the identity attestation. A host
|
|
342
|
+
adapter should create a read-only isolated context, pass stable identities to
|
|
343
|
+
`change review start`, and preserve its evidence. Self-asserted separation without a
|
|
344
|
+
host or human attestation does not satisfy the process.
|
|
345
|
+
|
|
346
|
+
`change review submit` may be invoked by a coordinator transporting the assigned
|
|
347
|
+
reviewer's exact report. The CLI validates that artifact against the assignment and
|
|
348
|
+
carried findings; the attesting host or human boundary, not local process state,
|
|
349
|
+
authenticates who produced it.
|
|
350
|
+
|
|
351
|
+
## Distribution contracts
|
|
352
|
+
|
|
353
|
+
- `project.json` declares baseline profiles and exact argument-array checks.
|
|
354
|
+
- `process.lock` pins the process version, selected skills, and a digest covering the
|
|
355
|
+
runtime, canonical exact runtime/build/development dependency locks, schemas,
|
|
356
|
+
templates, bundle catalog, and
|
|
357
|
+
complete selected skill resources. Startup fails when installed runtime dependency
|
|
358
|
+
versions differ from that lock.
|
|
359
|
+
- Versioned JSON schemas define change, plan, verification, review, lifecycle, and
|
|
360
|
+
completion-related artifacts.
|
|
361
|
+
- Project commands run without a shell and inherit the caller environment. Never put
|
|
362
|
+
secrets in manifests, arguments, or reports.
|
|
363
|
+
- Consumer skill roots are distribution-owned: unmanaged `SKILL.md` files or catalog
|
|
364
|
+
files fail `sync` and `doctor`. Project-specific policy belongs in `AGENTS.md`,
|
|
365
|
+
product contracts, source, and the manifest's command bindings.
|
|
366
|
+
- Host-specific launchers, agent role files, and model settings are optional external
|
|
367
|
+
integrations. They are neither bundled into the core nor required in consumer
|
|
368
|
+
repositories.
|
|
369
|
+
- The managed pull-request template and publication validators are shared process
|
|
370
|
+
policy. Consumer repositories may append project-specific requirements after the
|
|
371
|
+
managed block but do not copy or redefine the common convention.
|
|
372
|
+
|
|
373
|
+
## Development
|
|
374
|
+
|
|
375
|
+
~~~text
|
|
376
|
+
python -m venv .venv
|
|
377
|
+
.venv/bin/python -m pip install -e '.[dev]'
|
|
378
|
+
.venv/bin/python -m unittest discover -s tests -p 'test_*.py'
|
|
379
|
+
.venv/bin/python processctl.py skills validate --root .agents/skills
|
|
380
|
+
.venv/bin/python processctl.py digest
|
|
381
|
+
~~~
|
|
382
|
+
|
|
383
|
+
Version 0.x remains a compatibility pilot. A 1.0 release requires publishing the CLI,
|
|
384
|
+
running consumer CI through the published artifact, and completing forward tests on
|
|
385
|
+
representative agent hosts. Portable evaluation fixtures live in `evals/cases.json`.
|
|
386
|
+
Maintainer release steps and the secretless PyPI publisher identity are defined in
|
|
387
|
+
[`RELEASING.md`](https://github.com/phuongnse/engineering-process/blob/main/RELEASING.md).
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
engineering_process/__init__.py,sha256=sr6Y1EeuE2b1pxlPEuwPRjfQaJnNUH_Q0Fb_85cn0xE,60
|
|
2
|
+
engineering_process/_download_worker.py,sha256=VAh_6pjObYCtoegj_IiE1Z8ARuzr5IZzbzmB4JF5Z8M,2565
|
|
3
|
+
engineering_process/_supervisor_posix.py,sha256=je8soio5GexWyRHPzGTEF6CTcdal_oLywZdfOziZ5dk,5330
|
|
4
|
+
engineering_process/_supervisor_windows.py,sha256=dJ8OJ_II42dEg4yLsCh3f7QFNUelI8huB4-ISbfJE-Q,4728
|
|
5
|
+
engineering_process/_windows_job.py,sha256=IzDNFPFm77ho8sWb_xXN0Ox0-DOhoHL1hDpLlQLCxP4,15280
|
|
6
|
+
engineering_process/bootstrap.py,sha256=pQnf7ah-qOJGEHObA_jloU-Guo4phSOiOZhSL398VR4,7688
|
|
7
|
+
engineering_process/bundles.py,sha256=VNb_7h7uCoD3NRawzqc61fCQZy5Af8SeiN-x_j5kfDg,2934
|
|
8
|
+
engineering_process/cli.py,sha256=t-yix6JtzwmD5QX_Qg-zJAPmgNFGh51e8RY70RcNgwY,33294
|
|
9
|
+
engineering_process/contracts.py,sha256=RQcb1uLFiozd15eXBEyYQHTZp2-vv11cGyGsyjuAyic,48579
|
|
10
|
+
engineering_process/distribution.py,sha256=ojT6JKH_Db2pYnKy8V03a0WQhRc6byfGpdqniWjQ0_Y,2880
|
|
11
|
+
engineering_process/environment.py,sha256=pwt-w106s4pJ35A3GhqXglts2h8VaJgaa3R9M3936JE,26186
|
|
12
|
+
engineering_process/helper_launch.py,sha256=czSsEY1MBmJJQlMdn4s3x5HujKUvaPCrXVPHS0_fvAg,1087
|
|
13
|
+
engineering_process/lifecycle.py,sha256=nJpBIrwoKTJ-qiOVSF8sSJzgsgo65nAJ-QBdNyr6rTg,35152
|
|
14
|
+
engineering_process/managed.py,sha256=Ea-QWYQ3Mw5m2ycMmR57z-z0T8eThNWWU5I89XaC7R8,3358
|
|
15
|
+
engineering_process/markdown.py,sha256=aemVlHhimYJObKgRfMG5maofxDuN9TR5Q_0g2lZxQeI,2493
|
|
16
|
+
engineering_process/publication.py,sha256=PHlZIVmBH3QsaddLPOq6yYyeWKT6jmzc4QbCY_4gotU,17406
|
|
17
|
+
engineering_process/requirements-build.txt,sha256=W5ahs6tozL1WzaH31W6AS3rAUZS4Z2KzdjyEwTqSz-s,19
|
|
18
|
+
engineering_process/requirements-dev.txt,sha256=rziqwu7-SipEhI-GjKOBdOwfcy0PiRtP3nKYiXtglc8,243
|
|
19
|
+
engineering_process/requirements-runtime.txt,sha256=S0fPUsz89qUYqNK-IMKPicLALpH1dVYvx1walBrDscI,52
|
|
20
|
+
engineering_process/runner.py,sha256=__yzxavL5xu5bGSvOUYNVLG5Jm8Ocxj8ygYoRTlOoYo,5946
|
|
21
|
+
engineering_process/runtime.py,sha256=LN13oFAosXfxlSzNUM9-Lax4vDhfxLTP_tFvgsLbMoE,1881
|
|
22
|
+
engineering_process/skills.py,sha256=S_c2pQh40pcJtmdO9ltakK1nXaFN3jz_1CdLmW-CJ7Q,4626
|
|
23
|
+
engineering_process/supervision.py,sha256=8_giRZ9kltHdXmeLe5k-Pya9ShK1gswIZDFTYjDIHgM,1892
|
|
24
|
+
engineering_process/syncing.py,sha256=NuX-KCQUenqQDrvNI2pU6COvD6x_wAcSswNQFMxYZIg,15156
|
|
25
|
+
engineering_process/tooling.py,sha256=VII4aTyDGfwmyBMWziBNLPMEIftIRC7uCvhZgh9k4BE,33121
|
|
26
|
+
engineering_process-0.1.0.data/data/share/engineering-process/bundles.json,sha256=p3HBmz1yFJ3oJ5BIRp62l5dnC0OhRY5ITw8pQ6M8tmA,816
|
|
27
|
+
engineering_process-0.1.0.data/data/share/engineering-process/examples/change.json,sha256=DloBrj9xBbwmbtVKop3d_DlHfLVsm-bfvwGsOba3DaY,663
|
|
28
|
+
engineering_process-0.1.0.data/data/share/engineering-process/examples/plan.json,sha256=QsTApNafkUcEf-yjztQbqBiYY94lxxnBC3N9lrsXT5s,842
|
|
29
|
+
engineering_process-0.1.0.data/data/share/engineering-process/examples/project.json,sha256=D82oXdVqcH2trZnTX6bXTSHzQC1uuXgbDf_XbunGMvQ,1187
|
|
30
|
+
engineering_process-0.1.0.data/data/share/engineering-process/examples/review.json,sha256=TG5bODNLJdcHv9vPA3eqH88-jvxlpPi8Dz_DW0y7L1k,866
|
|
31
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/change.schema.json,sha256=MUqK6DwVCkyr8z7yfkTB6d-RD9Rn2DZQx5u1wKAWW6I,2555
|
|
32
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/lifecycle.schema.json,sha256=_rO3LOqac1TJjwLE_4YQaQl7WyyXMFIP-i2z7q-ycXM,3750
|
|
33
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/plan.schema.json,sha256=WFYFpIAaoOp2K10T0qNHwXTEiRklUptqQq9H1KFIReQ,3030
|
|
34
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/process-lock.schema.json,sha256=DTrzvLkxmOtTDYJPCeg2kRcqsNkALcXq2s3l6sH8Q_g,918
|
|
35
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/project.schema.json,sha256=MiWkI0cYYVUUeyCB2vFpTlLoQESbCAVLHCgK7um4irA,14414
|
|
36
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/review.schema.json,sha256=6JgmV6DTU_awjAlCVZk0auPmKOmvsGDeX5SpKDdJR-0,4146
|
|
37
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/reviewer-attestation.schema.json,sha256=iCZiBQwB1EOf3lWn1bu7aid1hFepu07NQClPVHnnPV4,1089
|
|
38
|
+
engineering_process-0.1.0.data/data/share/engineering-process/schemas/verification.schema.json,sha256=_dt63ONZxE6wHrZrqZgRscNYmfTWxjtqQoHWCl8FepY,2729
|
|
39
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/assess-design/SKILL.md,sha256=5xwPCojPTpKz7i22AM_Bw3UcdTQsSv9m_-fHW6XM2Mw,1948
|
|
40
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/build-frontend/SKILL.md,sha256=hAtfCv84kXjHFqojc1wqpukUb7NG6kPej2vQXgTmZ_E,1810
|
|
41
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/build-frontend-foundation/SKILL.md,sha256=EDSJee7jj6SDEpbNI6uhsUuiqzdpg94pDkpNn-NElvA,1752
|
|
42
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/change-api/SKILL.md,sha256=rFf1VjkMuc3J6n8tJEdHXKlQlS9XSjbriqsazLc_oZM,1789
|
|
43
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/cross-repo-change/SKILL.md,sha256=-xbh0CFa-sNHP4npLghHJ0rNx5cTC_vm1S6Dwnzbdos,1809
|
|
44
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/define-change-contract/SKILL.md,sha256=WTs2cVdlLKIsmwLbrx_vzt2XU7wl8CwvDvo4NkJMm9k,1989
|
|
45
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/design-module/SKILL.md,sha256=JQf-ijVD-4ZF_HgqV5VtddycpDvpIya5UfiEBsuzJlU,1723
|
|
46
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/evolve-process/SKILL.md,sha256=CST0FwZGROos3caumjdAhaBq7418GXbN-9IRfc0PwJw,1657
|
|
47
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/finish-change/SKILL.md,sha256=-RS35B4RMpj4Znsg4BaKebNLb60tnWWO5tRsQoK7TaE,1561
|
|
48
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/govern-ui/SKILL.md,sha256=NwwFTyeKH4yZebSkqOWM08MMrfgyqTlLCnM2oUv0vWg,2041
|
|
49
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-change/SKILL.md,sha256=70_eypofM5nbvqOojlCI8hG756LU6x02fJqSoxDyz74,2003
|
|
50
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-module/SKILL.md,sha256=5ZzNrMlul5S_spcmYGNXBr72DY62j5IPAwbhak5YoNo,1566
|
|
51
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/implement-use-case/SKILL.md,sha256=gHhJB437Dh-P6eQjcRkBDihuQgQy3ssu219tEbE3hvA,1681
|
|
52
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/integrate-mcp/SKILL.md,sha256=oxZSXBoz2IugWwCV-Up7FyY5xxbVheWD5417GSztx_k,1882
|
|
53
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/maintain-docs/SKILL.md,sha256=5Ab-sGNQ66AkpSxjjk70BL_wJfPbXBL21YciB0Oj4GE,1617
|
|
54
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/plan-change/SKILL.md,sha256=9HfMNXrSD6cwMPDSCecPzL9AcYLlfkgW7Mcf4oSbziw,1628
|
|
55
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/publish-change/SKILL.md,sha256=T5dsFELT2Oam9wTirI5Tb9xVRSMDVcQ4loY8YIrHV3E,1738
|
|
56
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/review-change/SKILL.md,sha256=LoP-D6MJAJ1vL-aS8AutgJEDugW1RtURpW3yslf_Feo,2691
|
|
57
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/run-change/SKILL.md,sha256=WbPZ63vdp7cPTtucI8qstfXXNY5nYqcPgsWD6KJDqgw,2458
|
|
58
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/run-change/references/execution.md,sha256=Zo_38Bsc-1NH12Vc5sDYX6_39ps1r0dCBCiwN-OlM2U,4671
|
|
59
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/run-project-command/SKILL.md,sha256=u77FmChZ8O5mNXZJlgm_rNoBvLPJXtCogeZhxYsMSp0,3188
|
|
60
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/specify-use-case/SKILL.md,sha256=cxf-4qIL5EvlSDabtWWCcPBhM9HReeSt2P_uSEKhoe0,1806
|
|
61
|
+
engineering_process-0.1.0.data/data/share/engineering-process/skills/verify-change/SKILL.md,sha256=KdMEtfFk1rYP7u2sFlzdy1cRCETc5l8GfvgVM_GPNq8,1737
|
|
62
|
+
engineering_process-0.1.0.data/data/share/engineering-process/templates/AGENTS.process.md,sha256=nzfuMzAawpEZk5PJPNgLjfDsj_-eHorRra-XuqqkOlo,917
|
|
63
|
+
engineering_process-0.1.0.data/data/share/engineering-process/templates/PULL_REQUEST_TEMPLATE.md,sha256=YHcPujaWXR6T5qY0NHavnW8oJ6rvqj4Yy45N7IEHErU,1077
|
|
64
|
+
engineering_process-0.1.0.dist-info/licenses/LICENSE,sha256=Tm6UkBZiW25MSgs721n0XrIdhEYNpRpPbAjoKg4nfLc,1089
|
|
65
|
+
engineering_process-0.1.0.dist-info/METADATA,sha256=2IuTxEbeHLY2bZFqEvjHX61v-p4J5r2FK9uToAjTHTY,19207
|
|
66
|
+
engineering_process-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
67
|
+
engineering_process-0.1.0.dist-info/entry_points.txt,sha256=pq2B7N0N_GmwdZKLTSZC5CK30e71UQ1hgpvLCagrn_Q,60
|
|
68
|
+
engineering_process-0.1.0.dist-info/top_level.txt,sha256=H4SsnAxJXndryC0y1hGHHPc2qswVIsEzgwbcCd___lM,20
|
|
69
|
+
engineering_process-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 engineering-process contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
engineering_process
|