protocol-governed-computing 4.0.0__tar.gz → 5.0.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.
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/PKG-INFO +114 -37
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/README.md +104 -27
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/protocol_governed_computing.egg-info/PKG-INFO +114 -37
- protocol_governed_computing-5.0.0/protocol_governed_computing.egg-info/requires.txt +11 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/pyproject.toml +10 -10
- protocol_governed_computing-4.0.0/protocol_governed_computing.egg-info/requires.txt +0 -11
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/pgc/__init__.py +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/pgc/cli.py +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/protocol_governed_computing.egg-info/SOURCES.txt +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/protocol_governed_computing.egg-info/dependency_links.txt +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/protocol_governed_computing.egg-info/entry_points.txt +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/protocol_governed_computing.egg-info/top_level.txt +0 -0
- {protocol_governed_computing-4.0.0 → protocol_governed_computing-5.0.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: protocol-governed-computing
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.0.0
|
|
4
4
|
Summary: Protocol-Governed Computing — installs the full toolchain and reports whether an environment is ready to compile, seal, and execute
|
|
5
5
|
Author-email: Bhash Ganti <bachipeachy@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -15,16 +15,16 @@ Classifier: Operating System :: OS Independent
|
|
|
15
15
|
Classifier: Topic :: Software Development :: Compilers
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
|
-
Requires-Dist: pgc-compiler==
|
|
19
|
-
Requires-Dist: pgc-assembler==
|
|
20
|
-
Requires-Dist: pgc-runtime==
|
|
21
|
-
Requires-Dist: pgc-inspector==
|
|
22
|
-
Requires-Dist: pgc-transformation==
|
|
23
|
-
Requires-Dist: pgc-governance==
|
|
24
|
-
Requires-Dist: pgc-workloads==
|
|
25
|
-
Requires-Dist: pgc-domains==
|
|
18
|
+
Requires-Dist: pgc-compiler==5.0.0
|
|
19
|
+
Requires-Dist: pgc-assembler==5.0.0
|
|
20
|
+
Requires-Dist: pgc-runtime==5.0.0
|
|
21
|
+
Requires-Dist: pgc-inspector==5.0.0
|
|
22
|
+
Requires-Dist: pgc-transformation==5.0.0
|
|
23
|
+
Requires-Dist: pgc-governance==5.0.0
|
|
24
|
+
Requires-Dist: pgc-workloads==5.0.0
|
|
25
|
+
Requires-Dist: pgc-domains==5.0.0
|
|
26
26
|
Provides-Extra: blockchain
|
|
27
|
-
Requires-Dist: pgc-domains[blockchain]==
|
|
27
|
+
Requires-Dist: pgc-domains[blockchain]==5.0.0; extra == "blockchain"
|
|
28
28
|
|
|
29
29
|
# pgc_install
|
|
30
30
|
|
|
@@ -107,16 +107,34 @@ git clone https://github.com/protocol-governed-computing/.github pgc_github
|
|
|
107
107
|
`.github` carries the snapshot profiles, which are conformance contracts rather than
|
|
108
108
|
code and are not published in any wheel.
|
|
109
109
|
|
|
110
|
+
A **fifth** clone is needed only to reach the platform over HTTP (§7), and only on
|
|
111
|
+
whichever node serves the boundary:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
git clone https://github.com/protocol-governed-computing/protocol_transport
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`protocol_transport` is deliberately not published. It provisions its import roots —
|
|
118
|
+
`adapters` and `resolver` — from its repository root rather than from an installed
|
|
119
|
+
package, so the boundary is composed by whoever deploys it rather than carried into
|
|
120
|
+
every install. Steps 4 through 6 need none of it.
|
|
121
|
+
|
|
122
|
+
**Pin what you clone.** These commands fetch the default branch, which moves. A wheel at
|
|
123
|
+
one version against declarations from a later branch is an incoherence nothing reports:
|
|
124
|
+
the implementations are one composition's and the declarations another's. Clone
|
|
125
|
+
`--branch <tag>` at the release matching your toolchain — `v5` for `5.0.0` — whenever the
|
|
126
|
+
build has to be reproducible.
|
|
127
|
+
|
|
110
128
|
### 3. The anchors
|
|
111
129
|
|
|
112
|
-
|
|
130
|
+
Five environment variables govern where the toolchain reads and writes. Where the compiler
|
|
131
|
+
writes is not one of them.
|
|
113
132
|
|
|
114
133
|
| Anchor | Read by | Meaning |
|
|
115
134
|
|---|---|---|
|
|
116
135
|
| `PGC_PLATFORM_ROOT` | compiler | the governance repository — the directory containing `registry/` |
|
|
117
136
|
| `PGC_DOMAIN_ROOTS` | compiler | the domain being compiled — the directory containing `registry/structures/` |
|
|
118
|
-
| `PGC_SNAPSHOT_ROOT` |
|
|
119
|
-
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute — a different meaning; prefer `--snapshot` |
|
|
137
|
+
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute; prefer `--snapshot` |
|
|
120
138
|
| `PGC_SNAPSHOT_PROFILES` | assembler | the directory holding snapshot profiles |
|
|
121
139
|
| `PGC_DATA_ROOT` | runtime | side-effect state and traces — or pass `--data-root` |
|
|
122
140
|
|
|
@@ -125,9 +143,12 @@ the repository above it. For `conformance_workloads` that is the workload direct
|
|
|
125
143
|
(`workloads/collatz`); for `snapshot_inspector` it is the repository root. Pointing it one
|
|
126
144
|
level too high is silent — the build config is simply never found.
|
|
127
145
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
146
|
+
**Where a build writes is declared, not supplied.** Each build configuration names its root in
|
|
147
|
+
`output_configuration.root`, resolved inside the repository that declares it, and every layer's
|
|
148
|
+
output consolidates there. Every shipped configuration declares `snapshot`, so each domain writes
|
|
149
|
+
into its own repository's `snapshot/`. Two in-force configurations of one repository naming the
|
|
150
|
+
same root are refused, and a configuration naming none cannot be built. The compiler does not read
|
|
151
|
+
`PGC_SNAPSHOT_ROOT`.
|
|
131
152
|
|
|
132
153
|
### 4. Compile each domain
|
|
133
154
|
|
|
@@ -136,21 +157,22 @@ read from `$PGC_PLATFORM_ROOT/snapshot` regardless of where output is being writ
|
|
|
136
157
|
|
|
137
158
|
```bash
|
|
138
159
|
export PGC_PLATFORM_ROOT=$PWD/software_governance
|
|
139
|
-
protocol_compiler compile --structure
|
|
160
|
+
protocol_compiler compile --structure STRUCTURE_BUILD_PLATFORM_CONFIG_V2
|
|
140
161
|
```
|
|
141
162
|
|
|
142
|
-
Then each domain, into its
|
|
163
|
+
Then each domain, into the root its build configuration declares:
|
|
143
164
|
|
|
144
165
|
```bash
|
|
145
166
|
PGC_DOMAIN_ROOTS=$PWD/conformance_workloads/workloads/collatz \
|
|
146
|
-
PGC_SNAPSHOT_ROOT=$PWD/workload_snapshot \
|
|
147
167
|
protocol_compiler compile --structure STRUCTURE_BUILD_WORKLOAD_CONFIG_V0
|
|
148
168
|
|
|
149
169
|
PGC_DOMAIN_ROOTS=$PWD/snapshot_inspector \
|
|
150
|
-
PGC_SNAPSHOT_ROOT=$PWD/inspection_snapshot \
|
|
151
170
|
protocol_compiler compile --structure STRUCTURE_BUILD_INSPECTION_CONFIG_V0
|
|
152
171
|
```
|
|
153
172
|
|
|
173
|
+
Each domain writes into its own repository's `snapshot/`, which is where the platform
|
|
174
|
+
already wrote its own and which every one of these repositories gitignores.
|
|
175
|
+
|
|
154
176
|
Each run reports its stages, artifact count, and whether the result verified and attested.
|
|
155
177
|
|
|
156
178
|
### 5. Assemble and seal
|
|
@@ -163,8 +185,8 @@ export PGC_SNAPSHOT_PROFILES=$PWD/pgc_github/snapshot_profiles
|
|
|
163
185
|
|
|
164
186
|
snapshot_assembler assemble \
|
|
165
187
|
--source $PWD/software_governance/snapshot/compiled \
|
|
166
|
-
--source $PWD/
|
|
167
|
-
--source $PWD/
|
|
188
|
+
--source $PWD/conformance_workloads/workloads/collatz/snapshot/compiled \
|
|
189
|
+
--source $PWD/snapshot_inspector/snapshot/compiled \
|
|
168
190
|
--out $PWD/snapshot \
|
|
169
191
|
--profile GOVERNANCE_SURFACE_PROFILE_V0
|
|
170
192
|
```
|
|
@@ -187,6 +209,50 @@ protocol_runtime run \
|
|
|
187
209
|
`boot` loads and hash-verifies every domain in the manifest before anything executes. The
|
|
188
210
|
payloads are declarations and live in the cloned repository, not in a wheel.
|
|
189
211
|
|
|
212
|
+
`boot` also reads `PGC_SNAPSHOT_PROFILES`, exported in §5. A sealed snapshot's profile claim was
|
|
213
|
+
evaluated when it was sealed, so booting one should not need the profile root — today it does, and
|
|
214
|
+
reports an error before proceeding if the anchor is unset.
|
|
215
|
+
|
|
216
|
+
### 7. Reach it over HTTP
|
|
217
|
+
|
|
218
|
+
Steps 1 through 6 execute through the CLI. The interaction boundary is a separate surface, and two
|
|
219
|
+
of the cloned repositories ship a client for it: `conformance_workloads/workloads/collatz/client`
|
|
220
|
+
submits work, and `snapshot_inspector/client` reads the snapshot. Each carries its own `web/`, a
|
|
221
|
+
`bindings/http.json` naming which operations are reachable at which route, and a `serve.sh`.
|
|
222
|
+
|
|
223
|
+
**Those `serve.sh` scripts assume a development checkout**, where `runtime`, `inspector` and
|
|
224
|
+
`assembler` are sibling repository roots on `PYTHONPATH`. Here they are installed packages, so the
|
|
225
|
+
roots point at site-packages instead. `protocol_transport` is the exception, and is genuinely a
|
|
226
|
+
repository root because it is unpublished.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
SP=$(python3 -c 'import site; print(site.getsitepackages()[0])')
|
|
230
|
+
CLIENT=$PWD/conformance_workloads/workloads/collatz/client
|
|
231
|
+
|
|
232
|
+
PGC_RUNTIME_ROOT=$SP PGC_INSPECTOR_ROOT=$SP PGC_ASSEMBLER_ROOT=$SP PGC_IMPL_ROOTS=$SP \
|
|
233
|
+
PGC_SNAPSHOT_ROOT=$PWD/snapshot \
|
|
234
|
+
PGC_DATA_ROOT=$PWD/data/collatz \
|
|
235
|
+
PGC_HTTP_BINDINGS=$CLIENT/bindings/http.json \
|
|
236
|
+
PGC_STATIC_MOUNTS="/=$CLIENT/web;/snapshot=$PWD/snapshot" \
|
|
237
|
+
PGC_HTTP_PORT=8000 \
|
|
238
|
+
$PWD/protocol_transport/run_http.sh
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Substitute `$PWD/snapshot_inspector/client` and another port for the read surface. Then:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
curl -s -X POST http://localhost:8000/collatz -d '{"number":27}'
|
|
245
|
+
curl -s -X POST http://localhost:8001/si -d '{"operation":"si.snapshot.validate"}'
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
The read surface routes every `si.*` operation through one binding, named in the request body
|
|
249
|
+
rather than in the path. The boundary reads its bindings once, at startup: restart it after any
|
|
250
|
+
rebuild.
|
|
251
|
+
|
|
252
|
+
`run_http.sh` launches `python3`, which is the virtual environment's interpreter while §1's
|
|
253
|
+
environment is active. Set `PYTHON` to an absolute path if you invoke this without activating it —
|
|
254
|
+
not to `$(command -v python)`, which returns an alias rather than a path under some shells.
|
|
255
|
+
|
|
190
256
|
## Adding your own domain
|
|
191
257
|
|
|
192
258
|
A domain is a directory the compiler is pointed at. It declares what it contributes, compiles against
|
|
@@ -239,6 +305,7 @@ artifact_discovery:
|
|
|
239
305
|
domain: platform # compile against the platform's compiled surface
|
|
240
306
|
artifact_types: [AC, IN, WF, CC, CT]
|
|
241
307
|
output_configuration:
|
|
308
|
+
root: snapshot # where this build writes, inside your_domain
|
|
242
309
|
artifacts:
|
|
243
310
|
layer: PROTOCOL_BUILD_ROOT
|
|
244
311
|
subpath: compiled/canonical
|
|
@@ -253,7 +320,8 @@ output_configuration:
|
|
|
253
320
|
subpath: compiled/canonical
|
|
254
321
|
```
|
|
255
322
|
|
|
256
|
-
|
|
323
|
+
**`root` and all five projection paths are required.** A configuration without `root` is refused
|
|
324
|
+
before anything is compiled. Omitting them does not fail early: the build passes
|
|
257
325
|
discovery, governance and construction and dies at S7 with five `E301_WRITE_FAILED` errors naming
|
|
258
326
|
each missing path. It reads like a compiler fault and is a missing declaration.
|
|
259
327
|
|
|
@@ -265,7 +333,6 @@ succeeds, conformance passes, and the domain is simply wrongly named. Nothing ca
|
|
|
265
333
|
|
|
266
334
|
```bash
|
|
267
335
|
PGC_DOMAIN_ROOTS=$PWD/your_domain \
|
|
268
|
-
PGC_SNAPSHOT_ROOT=$PWD/your_domain/snapshot \
|
|
269
336
|
protocol_compiler compile --structure STRUCTURE_BUILD_YOUR_DOMAIN_CONFIG_V0
|
|
270
337
|
```
|
|
271
338
|
|
|
@@ -292,17 +359,27 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
292
359
|
|
|
293
360
|
## Known rough edges
|
|
294
361
|
|
|
295
|
-
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
362
|
+
- **A successful compile may end with `⚠ Machine-block health: N candidate unconsumed key(s)`.**
|
|
363
|
+
It is expected, and it is not a failure: the build has already verified and attested by the
|
|
364
|
+
time it prints. It is a heuristic run after the build. For each artifact kind that no schema
|
|
365
|
+
closes, it looks for machine-block keys whose names appear nowhere in the compiler's source. A
|
|
366
|
+
key it lists is a *candidate* for a declaration nothing reads, not proof of one. `--verbose`
|
|
367
|
+
shows the keys.
|
|
299
368
|
- **`PGC_BUILD_ROOT` is inert.** It is accepted and reported, and nothing reads it.
|
|
300
|
-
`PGC_SNAPSHOT_ROOT` is the anchor that controls compiled output.
|
|
301
|
-
- **`PGC_SNAPSHOT_ROOT` carries two meanings** — compiled output to the compiler, assembled
|
|
302
|
-
snapshot to the runtime. Pass `--snapshot` to the runtime rather than relying on it.
|
|
303
369
|
- **`pgc` reports readiness for the platform compile only.** It reads three anchors and
|
|
304
370
|
reports "Ready" once the governance surface resolves; assembly and execution need the
|
|
305
371
|
other three.
|
|
372
|
+
- **`protocol_runtime boot` requires `PGC_SNAPSHOT_PROFILES`.** A sealed snapshot carries its
|
|
373
|
+
profile claim, and that claim was evaluated when the snapshot was sealed, so booting it should
|
|
374
|
+
not need the profile root. Unset, `boot` prints an error and then proceeds and succeeds. The
|
|
375
|
+
sequence above exports it in §5, so §6 inherits it — which makes the ordering load-bearing
|
|
376
|
+
rather than incidental.
|
|
377
|
+
- **`--data-root` rejects a relative path.** `$PWD/data` above is absolute and passes. A bare
|
|
378
|
+
`data` does not, which will surface first in whatever script wraps this.
|
|
379
|
+
- **No serving path is published for an installed platform.** Both clients' `serve.sh` resolve
|
|
380
|
+
`runtime`, `inspector` and `assembler` from sibling repository roots, which exist in a
|
|
381
|
+
development checkout and not in an install. §7 gives the equivalent invocation; nothing in any
|
|
382
|
+
repository does.
|
|
306
383
|
|
|
307
384
|
## The family
|
|
308
385
|
|
|
@@ -319,9 +396,9 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
319
396
|
|
|
320
397
|
**Versioning.** Two schemes. Each repository's `VERSION` is a monotonic composition ordinal —
|
|
321
398
|
internal build accounting, tagged `release-<N>`, never published. `PUBLIC_VERSION` is the platform's
|
|
322
|
-
public identity, tagged on every component repository; the platform is at **`
|
|
399
|
+
public identity, tagged on every component repository; the platform is at **`v5`**.
|
|
323
400
|
|
|
324
|
-
**The published version follows the public one: `
|
|
401
|
+
**The published version follows the public one: `v5` opens at `5.0.0`.** The family releases in
|
|
325
402
|
lockstep, so the composition pins exact versions rather than ranges.
|
|
326
403
|
|
|
327
404
|
A public identity may carry more than one published version. A packaging or distribution defect can
|
|
@@ -329,10 +406,10 @@ be corrected in a patch release within the same identity, because such a fix cha
|
|
|
329
406
|
contains and not what the composition determines. A change to what the composition determines takes
|
|
330
407
|
the next public identity, and only that mints a new DOI.
|
|
331
408
|
|
|
332
|
-
`
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
said otherwise.
|
|
409
|
+
`v5` is the second kind. The snapshot identity now covers the claimed profile's content, so
|
|
410
|
+
acceptance refuses a profile changed after sealing, and refuses every snapshot sealed before `v5`.
|
|
411
|
+
A superseded artifact no longer confers effect. Both change what the composition admits, and a patch
|
|
412
|
+
release would have said otherwise.
|
|
336
413
|
|
|
337
414
|
The standard these packages implement is a separate artifact on its own track, is not this number,
|
|
338
415
|
and is published separately: https://doi.org/10.5281/zenodo.22150616
|
|
@@ -79,16 +79,34 @@ git clone https://github.com/protocol-governed-computing/.github pgc_github
|
|
|
79
79
|
`.github` carries the snapshot profiles, which are conformance contracts rather than
|
|
80
80
|
code and are not published in any wheel.
|
|
81
81
|
|
|
82
|
+
A **fifth** clone is needed only to reach the platform over HTTP (§7), and only on
|
|
83
|
+
whichever node serves the boundary:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git clone https://github.com/protocol-governed-computing/protocol_transport
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`protocol_transport` is deliberately not published. It provisions its import roots —
|
|
90
|
+
`adapters` and `resolver` — from its repository root rather than from an installed
|
|
91
|
+
package, so the boundary is composed by whoever deploys it rather than carried into
|
|
92
|
+
every install. Steps 4 through 6 need none of it.
|
|
93
|
+
|
|
94
|
+
**Pin what you clone.** These commands fetch the default branch, which moves. A wheel at
|
|
95
|
+
one version against declarations from a later branch is an incoherence nothing reports:
|
|
96
|
+
the implementations are one composition's and the declarations another's. Clone
|
|
97
|
+
`--branch <tag>` at the release matching your toolchain — `v5` for `5.0.0` — whenever the
|
|
98
|
+
build has to be reproducible.
|
|
99
|
+
|
|
82
100
|
### 3. The anchors
|
|
83
101
|
|
|
84
|
-
|
|
102
|
+
Five environment variables govern where the toolchain reads and writes. Where the compiler
|
|
103
|
+
writes is not one of them.
|
|
85
104
|
|
|
86
105
|
| Anchor | Read by | Meaning |
|
|
87
106
|
|---|---|---|
|
|
88
107
|
| `PGC_PLATFORM_ROOT` | compiler | the governance repository — the directory containing `registry/` |
|
|
89
108
|
| `PGC_DOMAIN_ROOTS` | compiler | the domain being compiled — the directory containing `registry/structures/` |
|
|
90
|
-
| `PGC_SNAPSHOT_ROOT` |
|
|
91
|
-
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute — a different meaning; prefer `--snapshot` |
|
|
109
|
+
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute; prefer `--snapshot` |
|
|
92
110
|
| `PGC_SNAPSHOT_PROFILES` | assembler | the directory holding snapshot profiles |
|
|
93
111
|
| `PGC_DATA_ROOT` | runtime | side-effect state and traces — or pass `--data-root` |
|
|
94
112
|
|
|
@@ -97,9 +115,12 @@ the repository above it. For `conformance_workloads` that is the workload direct
|
|
|
97
115
|
(`workloads/collatz`); for `snapshot_inspector` it is the repository root. Pointing it one
|
|
98
116
|
level too high is silent — the build config is simply never found.
|
|
99
117
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
118
|
+
**Where a build writes is declared, not supplied.** Each build configuration names its root in
|
|
119
|
+
`output_configuration.root`, resolved inside the repository that declares it, and every layer's
|
|
120
|
+
output consolidates there. Every shipped configuration declares `snapshot`, so each domain writes
|
|
121
|
+
into its own repository's `snapshot/`. Two in-force configurations of one repository naming the
|
|
122
|
+
same root are refused, and a configuration naming none cannot be built. The compiler does not read
|
|
123
|
+
`PGC_SNAPSHOT_ROOT`.
|
|
103
124
|
|
|
104
125
|
### 4. Compile each domain
|
|
105
126
|
|
|
@@ -108,21 +129,22 @@ read from `$PGC_PLATFORM_ROOT/snapshot` regardless of where output is being writ
|
|
|
108
129
|
|
|
109
130
|
```bash
|
|
110
131
|
export PGC_PLATFORM_ROOT=$PWD/software_governance
|
|
111
|
-
protocol_compiler compile --structure
|
|
132
|
+
protocol_compiler compile --structure STRUCTURE_BUILD_PLATFORM_CONFIG_V2
|
|
112
133
|
```
|
|
113
134
|
|
|
114
|
-
Then each domain, into its
|
|
135
|
+
Then each domain, into the root its build configuration declares:
|
|
115
136
|
|
|
116
137
|
```bash
|
|
117
138
|
PGC_DOMAIN_ROOTS=$PWD/conformance_workloads/workloads/collatz \
|
|
118
|
-
PGC_SNAPSHOT_ROOT=$PWD/workload_snapshot \
|
|
119
139
|
protocol_compiler compile --structure STRUCTURE_BUILD_WORKLOAD_CONFIG_V0
|
|
120
140
|
|
|
121
141
|
PGC_DOMAIN_ROOTS=$PWD/snapshot_inspector \
|
|
122
|
-
PGC_SNAPSHOT_ROOT=$PWD/inspection_snapshot \
|
|
123
142
|
protocol_compiler compile --structure STRUCTURE_BUILD_INSPECTION_CONFIG_V0
|
|
124
143
|
```
|
|
125
144
|
|
|
145
|
+
Each domain writes into its own repository's `snapshot/`, which is where the platform
|
|
146
|
+
already wrote its own and which every one of these repositories gitignores.
|
|
147
|
+
|
|
126
148
|
Each run reports its stages, artifact count, and whether the result verified and attested.
|
|
127
149
|
|
|
128
150
|
### 5. Assemble and seal
|
|
@@ -135,8 +157,8 @@ export PGC_SNAPSHOT_PROFILES=$PWD/pgc_github/snapshot_profiles
|
|
|
135
157
|
|
|
136
158
|
snapshot_assembler assemble \
|
|
137
159
|
--source $PWD/software_governance/snapshot/compiled \
|
|
138
|
-
--source $PWD/
|
|
139
|
-
--source $PWD/
|
|
160
|
+
--source $PWD/conformance_workloads/workloads/collatz/snapshot/compiled \
|
|
161
|
+
--source $PWD/snapshot_inspector/snapshot/compiled \
|
|
140
162
|
--out $PWD/snapshot \
|
|
141
163
|
--profile GOVERNANCE_SURFACE_PROFILE_V0
|
|
142
164
|
```
|
|
@@ -159,6 +181,50 @@ protocol_runtime run \
|
|
|
159
181
|
`boot` loads and hash-verifies every domain in the manifest before anything executes. The
|
|
160
182
|
payloads are declarations and live in the cloned repository, not in a wheel.
|
|
161
183
|
|
|
184
|
+
`boot` also reads `PGC_SNAPSHOT_PROFILES`, exported in §5. A sealed snapshot's profile claim was
|
|
185
|
+
evaluated when it was sealed, so booting one should not need the profile root — today it does, and
|
|
186
|
+
reports an error before proceeding if the anchor is unset.
|
|
187
|
+
|
|
188
|
+
### 7. Reach it over HTTP
|
|
189
|
+
|
|
190
|
+
Steps 1 through 6 execute through the CLI. The interaction boundary is a separate surface, and two
|
|
191
|
+
of the cloned repositories ship a client for it: `conformance_workloads/workloads/collatz/client`
|
|
192
|
+
submits work, and `snapshot_inspector/client` reads the snapshot. Each carries its own `web/`, a
|
|
193
|
+
`bindings/http.json` naming which operations are reachable at which route, and a `serve.sh`.
|
|
194
|
+
|
|
195
|
+
**Those `serve.sh` scripts assume a development checkout**, where `runtime`, `inspector` and
|
|
196
|
+
`assembler` are sibling repository roots on `PYTHONPATH`. Here they are installed packages, so the
|
|
197
|
+
roots point at site-packages instead. `protocol_transport` is the exception, and is genuinely a
|
|
198
|
+
repository root because it is unpublished.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
SP=$(python3 -c 'import site; print(site.getsitepackages()[0])')
|
|
202
|
+
CLIENT=$PWD/conformance_workloads/workloads/collatz/client
|
|
203
|
+
|
|
204
|
+
PGC_RUNTIME_ROOT=$SP PGC_INSPECTOR_ROOT=$SP PGC_ASSEMBLER_ROOT=$SP PGC_IMPL_ROOTS=$SP \
|
|
205
|
+
PGC_SNAPSHOT_ROOT=$PWD/snapshot \
|
|
206
|
+
PGC_DATA_ROOT=$PWD/data/collatz \
|
|
207
|
+
PGC_HTTP_BINDINGS=$CLIENT/bindings/http.json \
|
|
208
|
+
PGC_STATIC_MOUNTS="/=$CLIENT/web;/snapshot=$PWD/snapshot" \
|
|
209
|
+
PGC_HTTP_PORT=8000 \
|
|
210
|
+
$PWD/protocol_transport/run_http.sh
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Substitute `$PWD/snapshot_inspector/client` and another port for the read surface. Then:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
curl -s -X POST http://localhost:8000/collatz -d '{"number":27}'
|
|
217
|
+
curl -s -X POST http://localhost:8001/si -d '{"operation":"si.snapshot.validate"}'
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
The read surface routes every `si.*` operation through one binding, named in the request body
|
|
221
|
+
rather than in the path. The boundary reads its bindings once, at startup: restart it after any
|
|
222
|
+
rebuild.
|
|
223
|
+
|
|
224
|
+
`run_http.sh` launches `python3`, which is the virtual environment's interpreter while §1's
|
|
225
|
+
environment is active. Set `PYTHON` to an absolute path if you invoke this without activating it —
|
|
226
|
+
not to `$(command -v python)`, which returns an alias rather than a path under some shells.
|
|
227
|
+
|
|
162
228
|
## Adding your own domain
|
|
163
229
|
|
|
164
230
|
A domain is a directory the compiler is pointed at. It declares what it contributes, compiles against
|
|
@@ -211,6 +277,7 @@ artifact_discovery:
|
|
|
211
277
|
domain: platform # compile against the platform's compiled surface
|
|
212
278
|
artifact_types: [AC, IN, WF, CC, CT]
|
|
213
279
|
output_configuration:
|
|
280
|
+
root: snapshot # where this build writes, inside your_domain
|
|
214
281
|
artifacts:
|
|
215
282
|
layer: PROTOCOL_BUILD_ROOT
|
|
216
283
|
subpath: compiled/canonical
|
|
@@ -225,7 +292,8 @@ output_configuration:
|
|
|
225
292
|
subpath: compiled/canonical
|
|
226
293
|
```
|
|
227
294
|
|
|
228
|
-
|
|
295
|
+
**`root` and all five projection paths are required.** A configuration without `root` is refused
|
|
296
|
+
before anything is compiled. Omitting them does not fail early: the build passes
|
|
229
297
|
discovery, governance and construction and dies at S7 with five `E301_WRITE_FAILED` errors naming
|
|
230
298
|
each missing path. It reads like a compiler fault and is a missing declaration.
|
|
231
299
|
|
|
@@ -237,7 +305,6 @@ succeeds, conformance passes, and the domain is simply wrongly named. Nothing ca
|
|
|
237
305
|
|
|
238
306
|
```bash
|
|
239
307
|
PGC_DOMAIN_ROOTS=$PWD/your_domain \
|
|
240
|
-
PGC_SNAPSHOT_ROOT=$PWD/your_domain/snapshot \
|
|
241
308
|
protocol_compiler compile --structure STRUCTURE_BUILD_YOUR_DOMAIN_CONFIG_V0
|
|
242
309
|
```
|
|
243
310
|
|
|
@@ -264,17 +331,27 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
264
331
|
|
|
265
332
|
## Known rough edges
|
|
266
333
|
|
|
267
|
-
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
334
|
+
- **A successful compile may end with `⚠ Machine-block health: N candidate unconsumed key(s)`.**
|
|
335
|
+
It is expected, and it is not a failure: the build has already verified and attested by the
|
|
336
|
+
time it prints. It is a heuristic run after the build. For each artifact kind that no schema
|
|
337
|
+
closes, it looks for machine-block keys whose names appear nowhere in the compiler's source. A
|
|
338
|
+
key it lists is a *candidate* for a declaration nothing reads, not proof of one. `--verbose`
|
|
339
|
+
shows the keys.
|
|
271
340
|
- **`PGC_BUILD_ROOT` is inert.** It is accepted and reported, and nothing reads it.
|
|
272
|
-
`PGC_SNAPSHOT_ROOT` is the anchor that controls compiled output.
|
|
273
|
-
- **`PGC_SNAPSHOT_ROOT` carries two meanings** — compiled output to the compiler, assembled
|
|
274
|
-
snapshot to the runtime. Pass `--snapshot` to the runtime rather than relying on it.
|
|
275
341
|
- **`pgc` reports readiness for the platform compile only.** It reads three anchors and
|
|
276
342
|
reports "Ready" once the governance surface resolves; assembly and execution need the
|
|
277
343
|
other three.
|
|
344
|
+
- **`protocol_runtime boot` requires `PGC_SNAPSHOT_PROFILES`.** A sealed snapshot carries its
|
|
345
|
+
profile claim, and that claim was evaluated when the snapshot was sealed, so booting it should
|
|
346
|
+
not need the profile root. Unset, `boot` prints an error and then proceeds and succeeds. The
|
|
347
|
+
sequence above exports it in §5, so §6 inherits it — which makes the ordering load-bearing
|
|
348
|
+
rather than incidental.
|
|
349
|
+
- **`--data-root` rejects a relative path.** `$PWD/data` above is absolute and passes. A bare
|
|
350
|
+
`data` does not, which will surface first in whatever script wraps this.
|
|
351
|
+
- **No serving path is published for an installed platform.** Both clients' `serve.sh` resolve
|
|
352
|
+
`runtime`, `inspector` and `assembler` from sibling repository roots, which exist in a
|
|
353
|
+
development checkout and not in an install. §7 gives the equivalent invocation; nothing in any
|
|
354
|
+
repository does.
|
|
278
355
|
|
|
279
356
|
## The family
|
|
280
357
|
|
|
@@ -291,9 +368,9 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
291
368
|
|
|
292
369
|
**Versioning.** Two schemes. Each repository's `VERSION` is a monotonic composition ordinal —
|
|
293
370
|
internal build accounting, tagged `release-<N>`, never published. `PUBLIC_VERSION` is the platform's
|
|
294
|
-
public identity, tagged on every component repository; the platform is at **`
|
|
371
|
+
public identity, tagged on every component repository; the platform is at **`v5`**.
|
|
295
372
|
|
|
296
|
-
**The published version follows the public one: `
|
|
373
|
+
**The published version follows the public one: `v5` opens at `5.0.0`.** The family releases in
|
|
297
374
|
lockstep, so the composition pins exact versions rather than ranges.
|
|
298
375
|
|
|
299
376
|
A public identity may carry more than one published version. A packaging or distribution defect can
|
|
@@ -301,10 +378,10 @@ be corrected in a patch release within the same identity, because such a fix cha
|
|
|
301
378
|
contains and not what the composition determines. A change to what the composition determines takes
|
|
302
379
|
the next public identity, and only that mints a new DOI.
|
|
303
380
|
|
|
304
|
-
`
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
said otherwise.
|
|
381
|
+
`v5` is the second kind. The snapshot identity now covers the claimed profile's content, so
|
|
382
|
+
acceptance refuses a profile changed after sealing, and refuses every snapshot sealed before `v5`.
|
|
383
|
+
A superseded artifact no longer confers effect. Both change what the composition admits, and a patch
|
|
384
|
+
release would have said otherwise.
|
|
308
385
|
|
|
309
386
|
The standard these packages implement is a separate artifact on its own track, is not this number,
|
|
310
387
|
and is published separately: https://doi.org/10.5281/zenodo.22150616
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: protocol-governed-computing
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.0.0
|
|
4
4
|
Summary: Protocol-Governed Computing — installs the full toolchain and reports whether an environment is ready to compile, seal, and execute
|
|
5
5
|
Author-email: Bhash Ganti <bachipeachy@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -15,16 +15,16 @@ Classifier: Operating System :: OS Independent
|
|
|
15
15
|
Classifier: Topic :: Software Development :: Compilers
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
|
-
Requires-Dist: pgc-compiler==
|
|
19
|
-
Requires-Dist: pgc-assembler==
|
|
20
|
-
Requires-Dist: pgc-runtime==
|
|
21
|
-
Requires-Dist: pgc-inspector==
|
|
22
|
-
Requires-Dist: pgc-transformation==
|
|
23
|
-
Requires-Dist: pgc-governance==
|
|
24
|
-
Requires-Dist: pgc-workloads==
|
|
25
|
-
Requires-Dist: pgc-domains==
|
|
18
|
+
Requires-Dist: pgc-compiler==5.0.0
|
|
19
|
+
Requires-Dist: pgc-assembler==5.0.0
|
|
20
|
+
Requires-Dist: pgc-runtime==5.0.0
|
|
21
|
+
Requires-Dist: pgc-inspector==5.0.0
|
|
22
|
+
Requires-Dist: pgc-transformation==5.0.0
|
|
23
|
+
Requires-Dist: pgc-governance==5.0.0
|
|
24
|
+
Requires-Dist: pgc-workloads==5.0.0
|
|
25
|
+
Requires-Dist: pgc-domains==5.0.0
|
|
26
26
|
Provides-Extra: blockchain
|
|
27
|
-
Requires-Dist: pgc-domains[blockchain]==
|
|
27
|
+
Requires-Dist: pgc-domains[blockchain]==5.0.0; extra == "blockchain"
|
|
28
28
|
|
|
29
29
|
# pgc_install
|
|
30
30
|
|
|
@@ -107,16 +107,34 @@ git clone https://github.com/protocol-governed-computing/.github pgc_github
|
|
|
107
107
|
`.github` carries the snapshot profiles, which are conformance contracts rather than
|
|
108
108
|
code and are not published in any wheel.
|
|
109
109
|
|
|
110
|
+
A **fifth** clone is needed only to reach the platform over HTTP (§7), and only on
|
|
111
|
+
whichever node serves the boundary:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
git clone https://github.com/protocol-governed-computing/protocol_transport
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`protocol_transport` is deliberately not published. It provisions its import roots —
|
|
118
|
+
`adapters` and `resolver` — from its repository root rather than from an installed
|
|
119
|
+
package, so the boundary is composed by whoever deploys it rather than carried into
|
|
120
|
+
every install. Steps 4 through 6 need none of it.
|
|
121
|
+
|
|
122
|
+
**Pin what you clone.** These commands fetch the default branch, which moves. A wheel at
|
|
123
|
+
one version against declarations from a later branch is an incoherence nothing reports:
|
|
124
|
+
the implementations are one composition's and the declarations another's. Clone
|
|
125
|
+
`--branch <tag>` at the release matching your toolchain — `v5` for `5.0.0` — whenever the
|
|
126
|
+
build has to be reproducible.
|
|
127
|
+
|
|
110
128
|
### 3. The anchors
|
|
111
129
|
|
|
112
|
-
|
|
130
|
+
Five environment variables govern where the toolchain reads and writes. Where the compiler
|
|
131
|
+
writes is not one of them.
|
|
113
132
|
|
|
114
133
|
| Anchor | Read by | Meaning |
|
|
115
134
|
|---|---|---|
|
|
116
135
|
| `PGC_PLATFORM_ROOT` | compiler | the governance repository — the directory containing `registry/` |
|
|
117
136
|
| `PGC_DOMAIN_ROOTS` | compiler | the domain being compiled — the directory containing `registry/structures/` |
|
|
118
|
-
| `PGC_SNAPSHOT_ROOT` |
|
|
119
|
-
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute — a different meaning; prefer `--snapshot` |
|
|
137
|
+
| `PGC_SNAPSHOT_ROOT` | runtime | the assembled snapshot to execute; prefer `--snapshot` |
|
|
120
138
|
| `PGC_SNAPSHOT_PROFILES` | assembler | the directory holding snapshot profiles |
|
|
121
139
|
| `PGC_DATA_ROOT` | runtime | side-effect state and traces — or pass `--data-root` |
|
|
122
140
|
|
|
@@ -125,9 +143,12 @@ the repository above it. For `conformance_workloads` that is the workload direct
|
|
|
125
143
|
(`workloads/collatz`); for `snapshot_inspector` it is the repository root. Pointing it one
|
|
126
144
|
level too high is silent — the build config is simply never found.
|
|
127
145
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
146
|
+
**Where a build writes is declared, not supplied.** Each build configuration names its root in
|
|
147
|
+
`output_configuration.root`, resolved inside the repository that declares it, and every layer's
|
|
148
|
+
output consolidates there. Every shipped configuration declares `snapshot`, so each domain writes
|
|
149
|
+
into its own repository's `snapshot/`. Two in-force configurations of one repository naming the
|
|
150
|
+
same root are refused, and a configuration naming none cannot be built. The compiler does not read
|
|
151
|
+
`PGC_SNAPSHOT_ROOT`.
|
|
131
152
|
|
|
132
153
|
### 4. Compile each domain
|
|
133
154
|
|
|
@@ -136,21 +157,22 @@ read from `$PGC_PLATFORM_ROOT/snapshot` regardless of where output is being writ
|
|
|
136
157
|
|
|
137
158
|
```bash
|
|
138
159
|
export PGC_PLATFORM_ROOT=$PWD/software_governance
|
|
139
|
-
protocol_compiler compile --structure
|
|
160
|
+
protocol_compiler compile --structure STRUCTURE_BUILD_PLATFORM_CONFIG_V2
|
|
140
161
|
```
|
|
141
162
|
|
|
142
|
-
Then each domain, into its
|
|
163
|
+
Then each domain, into the root its build configuration declares:
|
|
143
164
|
|
|
144
165
|
```bash
|
|
145
166
|
PGC_DOMAIN_ROOTS=$PWD/conformance_workloads/workloads/collatz \
|
|
146
|
-
PGC_SNAPSHOT_ROOT=$PWD/workload_snapshot \
|
|
147
167
|
protocol_compiler compile --structure STRUCTURE_BUILD_WORKLOAD_CONFIG_V0
|
|
148
168
|
|
|
149
169
|
PGC_DOMAIN_ROOTS=$PWD/snapshot_inspector \
|
|
150
|
-
PGC_SNAPSHOT_ROOT=$PWD/inspection_snapshot \
|
|
151
170
|
protocol_compiler compile --structure STRUCTURE_BUILD_INSPECTION_CONFIG_V0
|
|
152
171
|
```
|
|
153
172
|
|
|
173
|
+
Each domain writes into its own repository's `snapshot/`, which is where the platform
|
|
174
|
+
already wrote its own and which every one of these repositories gitignores.
|
|
175
|
+
|
|
154
176
|
Each run reports its stages, artifact count, and whether the result verified and attested.
|
|
155
177
|
|
|
156
178
|
### 5. Assemble and seal
|
|
@@ -163,8 +185,8 @@ export PGC_SNAPSHOT_PROFILES=$PWD/pgc_github/snapshot_profiles
|
|
|
163
185
|
|
|
164
186
|
snapshot_assembler assemble \
|
|
165
187
|
--source $PWD/software_governance/snapshot/compiled \
|
|
166
|
-
--source $PWD/
|
|
167
|
-
--source $PWD/
|
|
188
|
+
--source $PWD/conformance_workloads/workloads/collatz/snapshot/compiled \
|
|
189
|
+
--source $PWD/snapshot_inspector/snapshot/compiled \
|
|
168
190
|
--out $PWD/snapshot \
|
|
169
191
|
--profile GOVERNANCE_SURFACE_PROFILE_V0
|
|
170
192
|
```
|
|
@@ -187,6 +209,50 @@ protocol_runtime run \
|
|
|
187
209
|
`boot` loads and hash-verifies every domain in the manifest before anything executes. The
|
|
188
210
|
payloads are declarations and live in the cloned repository, not in a wheel.
|
|
189
211
|
|
|
212
|
+
`boot` also reads `PGC_SNAPSHOT_PROFILES`, exported in §5. A sealed snapshot's profile claim was
|
|
213
|
+
evaluated when it was sealed, so booting one should not need the profile root — today it does, and
|
|
214
|
+
reports an error before proceeding if the anchor is unset.
|
|
215
|
+
|
|
216
|
+
### 7. Reach it over HTTP
|
|
217
|
+
|
|
218
|
+
Steps 1 through 6 execute through the CLI. The interaction boundary is a separate surface, and two
|
|
219
|
+
of the cloned repositories ship a client for it: `conformance_workloads/workloads/collatz/client`
|
|
220
|
+
submits work, and `snapshot_inspector/client` reads the snapshot. Each carries its own `web/`, a
|
|
221
|
+
`bindings/http.json` naming which operations are reachable at which route, and a `serve.sh`.
|
|
222
|
+
|
|
223
|
+
**Those `serve.sh` scripts assume a development checkout**, where `runtime`, `inspector` and
|
|
224
|
+
`assembler` are sibling repository roots on `PYTHONPATH`. Here they are installed packages, so the
|
|
225
|
+
roots point at site-packages instead. `protocol_transport` is the exception, and is genuinely a
|
|
226
|
+
repository root because it is unpublished.
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
SP=$(python3 -c 'import site; print(site.getsitepackages()[0])')
|
|
230
|
+
CLIENT=$PWD/conformance_workloads/workloads/collatz/client
|
|
231
|
+
|
|
232
|
+
PGC_RUNTIME_ROOT=$SP PGC_INSPECTOR_ROOT=$SP PGC_ASSEMBLER_ROOT=$SP PGC_IMPL_ROOTS=$SP \
|
|
233
|
+
PGC_SNAPSHOT_ROOT=$PWD/snapshot \
|
|
234
|
+
PGC_DATA_ROOT=$PWD/data/collatz \
|
|
235
|
+
PGC_HTTP_BINDINGS=$CLIENT/bindings/http.json \
|
|
236
|
+
PGC_STATIC_MOUNTS="/=$CLIENT/web;/snapshot=$PWD/snapshot" \
|
|
237
|
+
PGC_HTTP_PORT=8000 \
|
|
238
|
+
$PWD/protocol_transport/run_http.sh
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Substitute `$PWD/snapshot_inspector/client` and another port for the read surface. Then:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
curl -s -X POST http://localhost:8000/collatz -d '{"number":27}'
|
|
245
|
+
curl -s -X POST http://localhost:8001/si -d '{"operation":"si.snapshot.validate"}'
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
The read surface routes every `si.*` operation through one binding, named in the request body
|
|
249
|
+
rather than in the path. The boundary reads its bindings once, at startup: restart it after any
|
|
250
|
+
rebuild.
|
|
251
|
+
|
|
252
|
+
`run_http.sh` launches `python3`, which is the virtual environment's interpreter while §1's
|
|
253
|
+
environment is active. Set `PYTHON` to an absolute path if you invoke this without activating it —
|
|
254
|
+
not to `$(command -v python)`, which returns an alias rather than a path under some shells.
|
|
255
|
+
|
|
190
256
|
## Adding your own domain
|
|
191
257
|
|
|
192
258
|
A domain is a directory the compiler is pointed at. It declares what it contributes, compiles against
|
|
@@ -239,6 +305,7 @@ artifact_discovery:
|
|
|
239
305
|
domain: platform # compile against the platform's compiled surface
|
|
240
306
|
artifact_types: [AC, IN, WF, CC, CT]
|
|
241
307
|
output_configuration:
|
|
308
|
+
root: snapshot # where this build writes, inside your_domain
|
|
242
309
|
artifacts:
|
|
243
310
|
layer: PROTOCOL_BUILD_ROOT
|
|
244
311
|
subpath: compiled/canonical
|
|
@@ -253,7 +320,8 @@ output_configuration:
|
|
|
253
320
|
subpath: compiled/canonical
|
|
254
321
|
```
|
|
255
322
|
|
|
256
|
-
|
|
323
|
+
**`root` and all five projection paths are required.** A configuration without `root` is refused
|
|
324
|
+
before anything is compiled. Omitting them does not fail early: the build passes
|
|
257
325
|
discovery, governance and construction and dies at S7 with five `E301_WRITE_FAILED` errors naming
|
|
258
326
|
each missing path. It reads like a compiler fault and is a missing declaration.
|
|
259
327
|
|
|
@@ -265,7 +333,6 @@ succeeds, conformance passes, and the domain is simply wrongly named. Nothing ca
|
|
|
265
333
|
|
|
266
334
|
```bash
|
|
267
335
|
PGC_DOMAIN_ROOTS=$PWD/your_domain \
|
|
268
|
-
PGC_SNAPSHOT_ROOT=$PWD/your_domain/snapshot \
|
|
269
336
|
protocol_compiler compile --structure STRUCTURE_BUILD_YOUR_DOMAIN_CONFIG_V0
|
|
270
337
|
```
|
|
271
338
|
|
|
@@ -292,17 +359,27 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
292
359
|
|
|
293
360
|
## Known rough edges
|
|
294
361
|
|
|
295
|
-
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
362
|
+
- **A successful compile may end with `⚠ Machine-block health: N candidate unconsumed key(s)`.**
|
|
363
|
+
It is expected, and it is not a failure: the build has already verified and attested by the
|
|
364
|
+
time it prints. It is a heuristic run after the build. For each artifact kind that no schema
|
|
365
|
+
closes, it looks for machine-block keys whose names appear nowhere in the compiler's source. A
|
|
366
|
+
key it lists is a *candidate* for a declaration nothing reads, not proof of one. `--verbose`
|
|
367
|
+
shows the keys.
|
|
299
368
|
- **`PGC_BUILD_ROOT` is inert.** It is accepted and reported, and nothing reads it.
|
|
300
|
-
`PGC_SNAPSHOT_ROOT` is the anchor that controls compiled output.
|
|
301
|
-
- **`PGC_SNAPSHOT_ROOT` carries two meanings** — compiled output to the compiler, assembled
|
|
302
|
-
snapshot to the runtime. Pass `--snapshot` to the runtime rather than relying on it.
|
|
303
369
|
- **`pgc` reports readiness for the platform compile only.** It reads three anchors and
|
|
304
370
|
reports "Ready" once the governance surface resolves; assembly and execution need the
|
|
305
371
|
other three.
|
|
372
|
+
- **`protocol_runtime boot` requires `PGC_SNAPSHOT_PROFILES`.** A sealed snapshot carries its
|
|
373
|
+
profile claim, and that claim was evaluated when the snapshot was sealed, so booting it should
|
|
374
|
+
not need the profile root. Unset, `boot` prints an error and then proceeds and succeeds. The
|
|
375
|
+
sequence above exports it in §5, so §6 inherits it — which makes the ordering load-bearing
|
|
376
|
+
rather than incidental.
|
|
377
|
+
- **`--data-root` rejects a relative path.** `$PWD/data` above is absolute and passes. A bare
|
|
378
|
+
`data` does not, which will surface first in whatever script wraps this.
|
|
379
|
+
- **No serving path is published for an installed platform.** Both clients' `serve.sh` resolve
|
|
380
|
+
`runtime`, `inspector` and `assembler` from sibling repository roots, which exist in a
|
|
381
|
+
development checkout and not in an install. §7 gives the equivalent invocation; nothing in any
|
|
382
|
+
repository does.
|
|
306
383
|
|
|
307
384
|
## The family
|
|
308
385
|
|
|
@@ -319,9 +396,9 @@ violate the claimed profile: a snapshot may carry more than a profile requires a
|
|
|
319
396
|
|
|
320
397
|
**Versioning.** Two schemes. Each repository's `VERSION` is a monotonic composition ordinal —
|
|
321
398
|
internal build accounting, tagged `release-<N>`, never published. `PUBLIC_VERSION` is the platform's
|
|
322
|
-
public identity, tagged on every component repository; the platform is at **`
|
|
399
|
+
public identity, tagged on every component repository; the platform is at **`v5`**.
|
|
323
400
|
|
|
324
|
-
**The published version follows the public one: `
|
|
401
|
+
**The published version follows the public one: `v5` opens at `5.0.0`.** The family releases in
|
|
325
402
|
lockstep, so the composition pins exact versions rather than ranges.
|
|
326
403
|
|
|
327
404
|
A public identity may carry more than one published version. A packaging or distribution defect can
|
|
@@ -329,10 +406,10 @@ be corrected in a patch release within the same identity, because such a fix cha
|
|
|
329
406
|
contains and not what the composition determines. A change to what the composition determines takes
|
|
330
407
|
the next public identity, and only that mints a new DOI.
|
|
331
408
|
|
|
332
|
-
`
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
said otherwise.
|
|
409
|
+
`v5` is the second kind. The snapshot identity now covers the claimed profile's content, so
|
|
410
|
+
acceptance refuses a profile changed after sealing, and refuses every snapshot sealed before `v5`.
|
|
411
|
+
A superseded artifact no longer confers effect. Both change what the composition admits, and a patch
|
|
412
|
+
release would have said otherwise.
|
|
336
413
|
|
|
337
414
|
The standard these packages implement is a separate artifact on its own track, is not this number,
|
|
338
415
|
and is published separately: https://doi.org/10.5281/zenodo.22150616
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
# composition takes the full project name. The import package and the console script are unaffected:
|
|
8
8
|
# a user still runs `pgc`.
|
|
9
9
|
name = "protocol-governed-computing"
|
|
10
|
-
version = "
|
|
10
|
+
version = "5.0.0"
|
|
11
11
|
description = "Protocol-Governed Computing — installs the full toolchain and reports whether an environment is ready to compile, seal, and execute"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.10"
|
|
@@ -28,20 +28,20 @@ classifiers = [
|
|
|
28
28
|
# the repos release together and the governance closure forces lockstep, so a
|
|
29
29
|
# mixed-version install is not a supported configuration.
|
|
30
30
|
dependencies = [
|
|
31
|
-
"pgc-compiler==
|
|
32
|
-
"pgc-assembler==
|
|
33
|
-
"pgc-runtime==
|
|
34
|
-
"pgc-inspector==
|
|
35
|
-
"pgc-transformation==
|
|
36
|
-
"pgc-governance==
|
|
37
|
-
"pgc-workloads==
|
|
38
|
-
"pgc-domains==
|
|
31
|
+
"pgc-compiler==5.0.0",
|
|
32
|
+
"pgc-assembler==5.0.0",
|
|
33
|
+
"pgc-runtime==5.0.0",
|
|
34
|
+
"pgc-inspector==5.0.0",
|
|
35
|
+
"pgc-transformation==5.0.0",
|
|
36
|
+
"pgc-governance==5.0.0",
|
|
37
|
+
"pgc-workloads==5.0.0",
|
|
38
|
+
"pgc-domains==5.0.0",
|
|
39
39
|
]
|
|
40
40
|
|
|
41
41
|
# The blockchain domain's capability transforms need Keccak-256, which is optional in pgc-domains
|
|
42
42
|
# for the same reason it is optional there: the core compile path imports none of it.
|
|
43
43
|
[project.optional-dependencies]
|
|
44
|
-
blockchain = ["pgc-domains[blockchain]==
|
|
44
|
+
blockchain = ["pgc-domains[blockchain]==5.0.0"]
|
|
45
45
|
|
|
46
46
|
[project.scripts]
|
|
47
47
|
pgc = "pgc.cli:main"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|