unaltraweb 0.7.1 → 0.7.3
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.
- checksums.yaml +4 -4
- data/Makefile +26 -4
- data/docs/_documentation/en/40-distribution.md +33 -10
- data/docs/_documentation/en/43-workspace-path-policies.md +13 -0
- data/docs/_documentation/en/47-private-practice-pdfs.md +130 -0
- data/docs/agents/consolidation-0.7.2.md +97 -0
- data/docs/agents/d0-runtime-identity.md +8 -0
- data/docs/agents/deployment-integration-0.7.1.md +4 -0
- data/docs/agents/manual-authoring-components.md +23 -0
- data/docs/agents/mcp-contract.md +109 -4
- data/docs/agents/owner-closeout-93.md +185 -0
- data/docs/agents/practice-editions-98.md +816 -0
- data/docs/agents/practice-pdf-installable-98.md +250 -0
- data/docs/agents/practice-runtime-archives-98.md +147 -0
- data/docs/agents/private-practice-verifier-98.md +296 -0
- data/docs/agents/qgis-0.6.1-adoption-109.md +110 -0
- data/docs/agents/source-ci-98.md +148 -0
- data/scripts/check_practice_verifier_runtime.py +69 -0
- data/scripts/export_practice_runtime_archives.py +138 -0
- data/scripts/manual/filters/practice-finish.lua +36 -0
- data/scripts/manual/filters/practice-layout.lua +84 -0
- data/scripts/manual/practice_pdf.py +31 -0
- data/scripts/manual/render_practice.py +125 -0
- data/scripts/manual/templates/practice.tex +95 -0
- data/scripts/prepare_practice_candidate.py +159 -0
- data/scripts/prepare_practice_editions_candidate.py +119 -0
- data/scripts/test_wheel_install.py +20 -0
- data/scripts/unaltraweb-mcp-bootstrap.sh +1 -1
- data/scripts/validate_distribution.py +18 -1
- data/src/unaltraweb_mcp/component-contract.json +28 -17
- data/src/unaltraweb_mcp/editorial_sources.py +62 -4
- metadata +20 -2
data/docs/agents/mcp-contract.md
CHANGED
|
@@ -38,8 +38,10 @@ it to an image ID before execution. The source checkout's digest pin is separate
|
|
|
38
38
|
it advances only after a new receipt exists. Explicit `--image` (or the console
|
|
39
39
|
adapter's `UNALTRAWEB_MCP_IMAGE`) permits a reviewed immutable selection.
|
|
40
40
|
|
|
41
|
-
The post-release checkout pin selects published 0.7.
|
|
42
|
-
`sha256:
|
|
41
|
+
The post-release checkout pin selects published 0.7.1 MCP digest
|
|
42
|
+
`sha256:6aa20cff86c3891a876e37ba0548fa36f3c5633c9f22ba672e9f50123d677cf6`.
|
|
43
|
+
The [0.7.1 delivery report](owner-closeout-93.md) records the consolidated deployment
|
|
44
|
+
contract, exact hotfix migration and matching PDF verifier closure.
|
|
43
45
|
Existing processes keep their running image until clients reconnect. Site build
|
|
44
46
|
defaults and customized Makefiles remain separate, explicitly reviewed selections.
|
|
45
47
|
|
|
@@ -87,6 +89,8 @@ baseline format nor runtime cleanup changes.
|
|
|
87
89
|
|
|
88
90
|
| Resource | Description |
|
|
89
91
|
| --- | --- |
|
|
92
|
+
| `web://practice-edition-schema` | Versioned Web recipient/edition configuration, separate from the producer-owned GIS descriptor. |
|
|
93
|
+
| `web://practice-verifier-runtime` | Static private controller/package/profile identities and distinct release metadata; acquisition belongs to the hub. |
|
|
90
94
|
| `web://runtime-identity` | Bounded identity of this serving process: startup/current code, instance/PID namespaces, binding, runtime selections and cooperative lifecycle. |
|
|
91
95
|
| `web://distribution` | Package-owned component BOM plus offline, feature-aware doctor findings for the current factory and project. |
|
|
92
96
|
| `web://site-context` | Site profile, feature flags, content inventory, bibliography, bibliometrics, build state, and offline consumer-update advisory. |
|
|
@@ -114,8 +118,68 @@ baseline format nor runtime cleanup changes.
|
|
|
114
118
|
|
|
115
119
|
## Tools
|
|
116
120
|
|
|
121
|
+
Private teaching editions use `manual_practice_compose(config, dry_run=false)`
|
|
122
|
+
(CLI `mcp manual-practice-compose`, factory Make `manual-practice-compose`).
|
|
123
|
+
`web://practice-edition-schema` supplies the versioned Web composition contract.
|
|
124
|
+
The editor invokes the native CLI of the hub-prepared private QGIS controller, validates the full common
|
|
125
|
+
bundle, selects explicit IDs with their complete producer closure, and retains
|
|
126
|
+
one independent PDF and one ZIP per recipient, plus external receipts, under
|
|
127
|
+
`dist/practiques/`. The PDF is copied from the sealed reading job and has exactly
|
|
128
|
+
the same bytes as its ZIP member; no second render occurs. The entire edition
|
|
129
|
+
directory is installed atomically and never replaces an existing edition. GIS parsing,
|
|
130
|
+
execution and offline project reopening remain producer-owned.
|
|
131
|
+
|
|
132
|
+
Each PDF build returns its original PDF and receipt hashes. Composition captures
|
|
133
|
+
and checks that seal before building the other recipient, then copies only those
|
|
134
|
+
sealed bytes. A changed PDF or replaced/resealed receipt fails before publication.
|
|
135
|
+
|
|
136
|
+
`packages.<recipient>` retains its ZIP fields and adds `pdf` with the independent
|
|
137
|
+
PDF path/hash/bytes and its own receipt path/hash. Names share the same stem:
|
|
138
|
+
`<slug>[-docent]-<version>-<lang>.pdf` and `.zip`. Source/reading code remains
|
|
139
|
+
versioned; data, PDFs, ZIPs and their retained sandbox/dist jobs remain ignored
|
|
140
|
+
deliveries for Moodle, not Git publication. The paired PDF keeps ZIP-relative
|
|
141
|
+
resource links; extract the ZIP beside it for those links to resolve locally.
|
|
142
|
+
|
|
143
|
+
An edition's `gis.profile` explicitly selects `qgis-practice-v1` or
|
|
144
|
+
`qgis-practice-v2` and its matching producer schema hash. Omitted profile is the
|
|
145
|
+
legacy v1 case only. New configurations explicitly select verifier origin
|
|
146
|
+
`prepared-image`, its image ID, native installed-package revision and schema hash.
|
|
147
|
+
Legacy installed-wheel configuration shapes remain readable but are not silently
|
|
148
|
+
converted or executed by this public Web runtime. Schema discovery invokes the
|
|
149
|
+
requested profile in the private image. The selected bundle check must return
|
|
150
|
+
that same profile. V2 map exports and their font/symbol/sidecar closures retain
|
|
151
|
+
producer-declared roles and paths; the editor does not inspect their native formats.
|
|
152
|
+
|
|
153
|
+
The public Web image contains no private QGIS package. The hub prepares the
|
|
154
|
+
authenticated private image before activation; missing/mismatched images produce
|
|
155
|
+
a concrete blocker without pull/build. Native calls reuse bounded processes,
|
|
156
|
+
mount encoding and exact worker lifecycle. `practice_verifier` is a startup-fixed
|
|
157
|
+
worker selection. Release wheel hashes and release producer revisions are declared
|
|
158
|
+
provenance, separate from observed image/package identity; no `direct_url` is
|
|
159
|
+
fabricated. Public CI reports private checks as `not_run`.
|
|
160
|
+
See [private-practice-verifier-98.md](private-practice-verifier-98.md).
|
|
161
|
+
|
|
162
|
+
Existing private readings can be declared once in `_config.yml` under
|
|
163
|
+
`unaltraweb.practices.readings`, with exact `source`, `slug`, `lang`, `recipient`.
|
|
164
|
+
Only Markdown beneath `practiques/` or `_practices/` is accepted. The same resolver
|
|
165
|
+
serves PDF preparation and targeted `prose_check` / `editorial_review_prepare`.
|
|
166
|
+
Private targets include draft/unpublished prose and retain original anchors;
|
|
167
|
+
they are excluded from the default public corpus. Mapping does not approve copy
|
|
168
|
+
or expose private directories through Jekyll.
|
|
169
|
+
|
|
170
|
+
Reading mappings and edition readings accept the same optional `bindings` list:
|
|
171
|
+
`reference`, exactly one `path` or selected `product`, required `sha256`, and
|
|
172
|
+
optional portable `destination`. One practice resolver uses these declarations
|
|
173
|
+
for both image snapshots and prose links. It never searches sandbox directories.
|
|
174
|
+
Composition normalizes a prose href relative to the original source and emits
|
|
175
|
+
only the authorised recipient's ZIP destination; bound files/maps and effective
|
|
176
|
+
Pandoc sources are fingerprinted and receipted. Normal filesystem validators stay
|
|
177
|
+
strict. Standalone PDFs allow explicit image bindings but refuse local file links
|
|
178
|
+
without a portable edition context; HTTPS and internal anchors remain intact.
|
|
179
|
+
|
|
117
180
|
| Tool | Notes |
|
|
118
181
|
| --- | --- |
|
|
182
|
+
| `manual_practice_compose` | One versioned consumer configuration selects GIS roots, two approved reading hashes and optional declared editable-SVG resources; delivers an independent PDF and ZIP per recipient with complete closure and create-only receipts. |
|
|
119
183
|
| `runtime_identity` | Observe the actual serving instance, startup/current package evidence and selected/observed images; never prepare a runtime or inspect site content. |
|
|
120
184
|
| `runtime_drain` | With `confirm=true`, stop admission on this connection; then close stdio and verify exact container/session resource termination. It is not workspace-wide down. |
|
|
121
185
|
| `distribution_doctor` | Return offline component/factory/project findings with stable codes and optional local Docker image inspection that never pulls. |
|
|
@@ -131,7 +195,7 @@ baseline format nor runtime cleanup changes.
|
|
|
131
195
|
| `site_source_read` | Read one allowed UTF-8 site source and return its exact SHA-256. |
|
|
132
196
|
| `site_source_write` | Dry-run or atomically create/update one allowed source. Creates require `create_only`; updates require the exact SHA-256 returned by a read. |
|
|
133
197
|
| `site_source_delete` | Dry-run or delete one allowed source with exact SHA-256 and explicit confirmation. It never deletes `_config.yml` or directories. |
|
|
134
|
-
| `scaffold_sync` | Dry-run or transactionally synchronize the
|
|
198
|
+
| `scaffold_sync` | Dry-run or transactionally synchronize the ten package-managed scaffold controls against `.unaltraweb/scaffold.json`; preserve local edits if the package file has not changed from baseline, reject conflicting edits and known version downgrades, and optionally require `expected_plan_sha256` from the reviewed proposal. Exact package bytes may be adopted without rewriting. Adopted, unchanged and preserved files are rechecked around the manifest-last transaction; rollback covers partial apply. README prose and source-CI project policy remain site-owned. |
|
|
135
199
|
| `profile_check` | Check current profile and expected content/config paths. |
|
|
136
200
|
| `prose_check` | Check a selected content target or all supported reader-facing sources and public metadata using shared profile/genre rules; no writes or model calls. |
|
|
137
201
|
| `editorial_policy` | Inspect common guidance, profile defaults, genre overrides, local writing preferences and optional publication requirements. |
|
|
@@ -153,6 +217,7 @@ baseline format nor runtime cleanup changes.
|
|
|
153
217
|
| `web_capture_render` | Start Jekyll and Chromium on an ephemeral internal Docker network, then publish original PNG plus editable annotated SVG from declared CSS selectors. |
|
|
154
218
|
| `manual_pdf_status` | Inspect PDF configuration, sources, generated artefacts, published paths, selector, and freshness without Docker, network, or writes. |
|
|
155
219
|
| `manual_pdf_build` | Build one or all configured language PDFs and first-page cover previews under `tmp/`; `release_selector` defaults to `latest` and is part of the PDF fingerprint. |
|
|
220
|
+
| `manual_practice_pdf_build` | Build one private A4-landscape reading from `practiques/<slug>/<lang>/<audience>/` into an ignored, retained sandbox job. Reuse manual metadata/logos; require a prepared PDF toolchain; never publish or package course data. `dry_run` plans without writes and `run` names an explicit retained attempt. |
|
|
156
221
|
| `manual_pdf_preview_prepare` | Build only stale `latest` PDF languages, then atomically stage ignored, untracked PDF and cover copies for local Jekyll review under a cleanup receipt. Always reports `publishes: false`; disabled PDF configuration is a no-op unless receipt-owned preview files still require cleanup. |
|
|
157
222
|
| `manual_pdf_preview_clean` | Dry-run or remove only preview files whose path, Git state, content hash, and file identity still match the staging receipt. Real cleanup requires explicit confirmation plus the dry-run's exact `receipt_sha256` as `expected_receipt_sha256`, and never publishes. |
|
|
158
223
|
| `manual_pdf_publish` | Copy built PDFs and covers to configured public assets. Defaults to dry-run; real publication requires explicit confirmation, and the selector must match the build. |
|
|
@@ -189,6 +254,36 @@ Manual PDF publication is a local workspace operation: it copies reviewed artefa
|
|
|
189
254
|
|
|
190
255
|
## New Site Initialization
|
|
191
256
|
|
|
257
|
+
### Private Practice Readings
|
|
258
|
+
|
|
259
|
+
`manual_practice_pdf_build(source, version, run="", dry_run=false)` delegates to
|
|
260
|
+
the factory target `manual-practice-pdf-build`. Source paths are
|
|
261
|
+
`practiques/<slug>/<ca|es|en>/<alumnat|docent>/<localized-name>.md`, using
|
|
262
|
+
`LLEGIU-ME`, `LEEME` and `README`. The consumer must exclude `practiques/`,
|
|
263
|
+
`sandbox/` and `dist/` from Jekyll and ignore `sandbox/practiques/` in Git.
|
|
264
|
+
`profile_check` blocks a manual with practice sources and missing exclusions.
|
|
265
|
+
|
|
266
|
+
The controller reuses manual metadata normalization and its authoritative
|
|
267
|
+
typographic preamble, with a factory-owned A4-landscape article wrapper. It
|
|
268
|
+
snapshots only the selected Markdown, local PNG/JPEG/PDF images, logos, template
|
|
269
|
+
and filters. Its network-disabled, read-only worker receives that snapshot and
|
|
270
|
+
one writable output directory; it receives neither checkout nor Docker socket.
|
|
271
|
+
The already-prepared PDF toolchain is resolved to an exact image ID and never
|
|
272
|
+
pulled implicitly. Session/project/token worker labels retain the existing D0
|
|
273
|
+
ownership and timeout-cleanup contract.
|
|
274
|
+
|
|
275
|
+
Jobs under `sandbox/practiques/` are create-only and sealed last. Repeat calls
|
|
276
|
+
verify and reuse the exact job when its effective inputs match. Changed source,
|
|
277
|
+
assets, rendering controls or image identity select another job; a nominal MCP
|
|
278
|
+
version change alone does not. Edited, incomplete or conflicting jobs are
|
|
279
|
+
retained. The optional `run` name provides an explicit retry/review identity.
|
|
280
|
+
Every result reports `publishes: false`.
|
|
281
|
+
|
|
282
|
+
This API compiles a reading, not a GIS job, public chapter or Moodle ZIP. The
|
|
283
|
+
larger producer-handoff and package contract remains under issue #98. See
|
|
284
|
+
[private practice PDFs](../_documentation/en/47-private-practice-pdfs.md) for
|
|
285
|
+
supported syntax and adoption in an existing manual.
|
|
286
|
+
|
|
192
287
|
### Retained Letter Integration
|
|
193
288
|
|
|
194
289
|
The published 0.6.0 release adds package-only import/check commands and the
|
|
@@ -224,7 +319,17 @@ It sets `lang`, `default_lang`, and `languages` so a new site has an explicit so
|
|
|
224
319
|
|
|
225
320
|
Before writing, it validates every managed path, rejects destination symlinks, and compares existing files with the complete rendered scaffold through bounded regular-file reads. Identical files make repeated calls idempotent. Any differing file or file/directory collision detected during preflight aborts the whole operation before website files are written. Descriptor-relative, no-clobber writes and a final descriptor-relative content check prevent raced paths from being followed or overwritten; overwrite mode is not available. The baseline manifest is created after every other scaffold file.
|
|
226
321
|
|
|
227
|
-
The baseline records exactly `.gitignore`, `.unaltraweb/docker-mount.sh`, `.github/CONTRIBUTING.md`, `.github/dependabot.yml`, `Makefile`, `Gemfile`, `Gemfile.lock`, `.github/pull_request_template.md`, and `.github/workflows/
|
|
322
|
+
The baseline records exactly `.gitignore`, `.unaltraweb/docker-mount.sh`, `.github/CONTRIBUTING.md`, `.github/dependabot.yml`, `Makefile`, `Gemfile`, `Gemfile.lock`, `.github/pull_request_template.md`, `.github/workflows/deploy.yml`, and `.github/workflows/source-checks.yml`. `scaffold_sync` updates one of these while its bytes still match the recorded baseline, adopts it when its bytes already equal the current package payload, and creates a newly managed path only when absent. If the package payload still equals the baseline but the local file differs, it preserves the local file and the original baseline hash; a subsequent upstream edit will still conflict. Conflicting local/upstream edits, missing managed files, collisions, unsafe paths and known newer consumer versions block the whole apply. It removes retired paths only from the baseline and never deletes their project files; it also never changes site-owned README/agent guidance, config, seed content, bibliography, data, assets, or `.unaltraweb/source-checks.json`. A real synchronization requires `dry_run=false` and `confirm_sync=true`; adopted, unchanged and preserved files are included in the final rechecks around the manifest-last commit.
|
|
323
|
+
|
|
324
|
+
Source CI is a separate host entrypoint, `unaltraweb-source-checks` (equivalently
|
|
325
|
+
`python -I -m unaltraweb_mcp.source_checks`), not another MCP server. One packaged
|
|
326
|
+
workflow control calls it for all profiles; only the bounded Git-versioned JSON
|
|
327
|
+
policy differs by project. It wraps the public `profile-check` and `prose-check`
|
|
328
|
+
commands and observes the existing approval inventory without granting approval.
|
|
329
|
+
Read-only clone mounts, no Docker socket, network-none checkers, explicit partial
|
|
330
|
+
coverage and base-to-head inventory checks preserve the distinction between
|
|
331
|
+
source conservation and retained-input/domain validation. See
|
|
332
|
+
[source-ci-98.md](source-ci-98.md) for activation and the public/private GitHub boundary.
|
|
228
333
|
|
|
229
334
|
At session start, `site_context.update_status` supplies an offline advisory against the active MCP package, including current literal version pins, target integration tuple, planned paths, preserved files, conflicts and `plan_sha256`. The agent explains available updates and asks for explicit acceptance before invoking `scaffold_sync` with that digest as `expected_plan_sha256`. The digest binds the consumer path, configuration, baseline, observed managed bytes and target package bytes; stale approval is rejected before writes. The parameter is optional for compatibility with existing explicit sync callers, but the guided flow always supplies it. An update can refresh scaffold controls without claiming a newer semver release. Unmanaged sites report an unavailable plan instead of being reinitialized. A declined update leaves normal content work available; there is no background network poll, self-upgrade, Git operation or automatic artefact regeneration. This flow requires a reviewed MCP/package release containing it and a reconnected client; updating the discovery checkout alone cannot replace the public digest-pinned runtime.
|
|
230
335
|
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# unaltraweb 0.7.1 delivery closeout
|
|
2
|
+
|
|
3
|
+
Published **2026-10-07 12:33:20 UTC**:
|
|
4
|
+
[v0.7.1](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.1).
|
|
5
|
+
Owner: [issue 93](https://github.com/dosquartsdedocs/unaltraweb/issues/93).
|
|
6
|
+
This report supersedes the chronological preparation states in
|
|
7
|
+
[deployment-integration-0.7.1.md](deployment-integration-0.7.1.md).
|
|
8
|
+
|
|
9
|
+
## Delivered behavior
|
|
10
|
+
|
|
11
|
+
The package owns independent immutable core/workflow pins and exact PDF
|
|
12
|
+
digest/producer records. The reusable workflow fetches bounded strict JSON from
|
|
13
|
+
its own defining provider revision, not the consumer checkout. Release readiness
|
|
14
|
+
checks that selected workflow and its records. CI generates a caller, executes
|
|
15
|
+
its actual selected provenance gates and compares retained-document verifier
|
|
16
|
+
bytes across the selected core, controller and PDF worker.
|
|
17
|
+
|
|
18
|
+
The exact issue-86 hotfix is recognized by the original baseline hash and current
|
|
19
|
+
file hash, listed in the update plan and bound to its SHA. Extra local edits
|
|
20
|
+
remain conflicts; existing confinement, staging, CAS and rollback are retained.
|
|
21
|
+
The new/upgrade/hotfix installed acceptance preserves author and generated-cache
|
|
22
|
+
hashes while building and probing actual web/PDF output.
|
|
23
|
+
|
|
24
|
+
The owner explicitly authorized the full 0.7.1 review, integration, gated
|
|
25
|
+
publication and post-release pin. Work used one authoritative checkout and serial
|
|
26
|
+
ordinary branches. Reviews are agent-attributed, not human approval. Published
|
|
27
|
+
earlier artifacts and real consumer selections remain intact.
|
|
28
|
+
|
|
29
|
+
## Source and receipt lineage
|
|
30
|
+
|
|
31
|
+
| Role | Revision / evidence |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| Implementation | `2133b8fa2f668e14d603a36d15584eed63e4386a`, [PR 94](https://github.com/dosquartsdedocs/unaltraweb/pull/94) |
|
|
34
|
+
| Initial implementation integration | `2ff27f27c274eb09b2c53ef8bd374f333702d8ee` |
|
|
35
|
+
| Initial candidate source, later rejected as a core tuple | `b7ec1d7a139c65b3b0b88699cdbeb19080f13be1`, [PR 95](https://github.com/dosquartsdedocs/unaltraweb/pull/95) |
|
|
36
|
+
| Worker-record/checker-closure correction | `1ce0e2039e3cb59ed57dbef7961193c7de9ea751`, [PR 96](https://github.com/dosquartsdedocs/unaltraweb/pull/96) |
|
|
37
|
+
| Selected reviewed core and workflow | `3332e0b93933f12317e05f1ce8d38ce80046feab` |
|
|
38
|
+
| Final tuple selection | `18d8d20ba92e397b8341f91207ae05cb6146473b`, [PR 97](https://github.com/dosquartsdedocs/unaltraweb/pull/97) |
|
|
39
|
+
| Final artifact-producing source | `ae5dab1d99804e7f73da82930199c1e2f3c08f61` |
|
|
40
|
+
| Receipt-only child | `24834dcc3e2e03f0bb76b5f18c2fbe346b143455` |
|
|
41
|
+
| Receipt integration / tag target | `1ff25c6956458c3a99436312466e9cc588ed34b9`, [PR 99](https://github.com/dosquartsdedocs/unaltraweb/pull/99) |
|
|
42
|
+
| Annotated tag object | `6e8d7f107a6bfa013a400db0e2a3cb6269d37e38` |
|
|
43
|
+
|
|
44
|
+
The tag target's first parent is exactly the final artifact source; its
|
|
45
|
+
first-parent diff contains only `release-candidates.json`. Native package-run
|
|
46
|
+
authorization/staging, strict distribution/ancestry/publication-ref checks and
|
|
47
|
+
annotated-tag verification passed before publication.
|
|
48
|
+
|
|
49
|
+
[Tagged receipt](https://github.com/dosquartsdedocs/unaltraweb/blob/v0.7.1/release-candidates.json)
|
|
50
|
+
SHA-256: `feda4f19b4133e60b4dae3cf88367ae8089c88077b4ac3fcfccc76d153411f2e`.
|
|
51
|
+
|
|
52
|
+
| Component | Artifact / repository | SHA-256 / OCI index digest |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| Gem | `unaltraweb-0.7.1.gem` | `6371e502601f970bc30711868b0eb2a29f429e1b78e21ac71ac09696b108baee` |
|
|
55
|
+
| Wheel | `unaltraweb_mcp-0.7.1-py3-none-any.whl` | `cd2a06a2d2e16758c916d640e71210b16285fe3848cc987651801ff324a50a8e` |
|
|
56
|
+
| Base runtime | `ghcr.io/dosquartsdedocs/unaltraweb` | `sha256:af776cfcd79f2778d36e179dccba63792d820d1939fd89187b7af7089e11247a` |
|
|
57
|
+
| MCP | `ghcr.io/dosquartsdedocs/unaltraweb-mcp` | `sha256:6aa20cff86c3891a876e37ba0548fa36f3c5633c9f22ba672e9f50123d677cf6` |
|
|
58
|
+
|
|
59
|
+
Linux/amd64 configuration IDs, distinct from registry index digests:
|
|
60
|
+
|
|
61
|
+
- Runtime: `sha256:7b58b0ad1e7fdfd00087b6702c7002b4a4d393072077def17ff5fb1e198c8cfb`.
|
|
62
|
+
- MCP: `sha256:f0e7915527fa68a67448287e131ec431aeae902b8269856e4e219e67faade146`.
|
|
63
|
+
|
|
64
|
+
Both revision labels identify the final artifact source. Both `0.7.1` and
|
|
65
|
+
`v0.7.1` aliases were inspected anonymously and match the receipt. Public registry
|
|
66
|
+
downloads and downloaded GitHub assets match their hashes. `SHA256SUMS` itself
|
|
67
|
+
has SHA-256 `10938774ef08dabd24cbd7853abd2d72957e75c750418ac8ebe7af7c1ce4553b`.
|
|
68
|
+
|
|
69
|
+
## The PDF compatibility failure was caught before release
|
|
70
|
+
|
|
71
|
+
The first core candidates reused PDF 0.6.0. Plain manuals passed, but retained
|
|
72
|
+
Carta freshness failed because the verifier closure includes the changed
|
|
73
|
+
`distribution.py` and component schema. The old worker's successful PDF output
|
|
74
|
+
was not accepted as fresh by the new controller. No manifest was edited and no
|
|
75
|
+
freshness check was disabled to force a pass.
|
|
76
|
+
|
|
77
|
+
The signed specialization from the initial image run has the correct 0.7.1
|
|
78
|
+
checker bytes and is now selected by immutable digest:
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:1bb3f2dafd741e96c28639ec1cc8ccaeb81cbaa73e649f787c0b4ef59997bd4b
|
|
82
|
+
producer: b7ec1d7a139c65b3b0b88699cdbeb19080f13be1
|
|
83
|
+
configuration ID: sha256:618163d3f924439792b2306617bd9612f566c5881166102fa544b4e782d569fa
|
|
84
|
+
native package version: 0.7.1
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The final four-component receipt reuses this separately verified digest. The
|
|
88
|
+
later image workflow also built verification PDF
|
|
89
|
+
`sha256:6bc7342a9ad6eb4edfff0d022d7157370e9c9bcba2b87bb80532389cfded62d4`;
|
|
90
|
+
it is not the selected worker and received no coordinated semver promotion.
|
|
91
|
+
The rejected initial core candidate tuple and local diagnostic overlay remain
|
|
92
|
+
clearly separated from final signed-byte acceptance.
|
|
93
|
+
|
|
94
|
+
## CI, signing and publication
|
|
95
|
+
|
|
96
|
+
| Gate | Successful run |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| Implementation PR CI / CodeQL | [37526811887](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37526811887) / [37526811747](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37526811747) |
|
|
99
|
+
| Initial signed images / packages | [37530306398](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37530306398) / [37530310332](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37530310332) |
|
|
100
|
+
| Worker-record PR CI / CodeQL | [37534571592](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37534571592) / [37534571578](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37534571578) |
|
|
101
|
+
| Corrected tuple PR CI / CodeQL | [37613153175](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37613153175) / [37613153240](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37613153240) |
|
|
102
|
+
| Final source CI / CodeQL | [37613808731](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37613808731) / [37613808758](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37613808758) |
|
|
103
|
+
| Final signed images / packages | [37614367552](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37614367552) / [37614371507](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37614371507) |
|
|
104
|
+
| Receipt PR CI / CodeQL | [37619948216](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37619948216) / [37619948348](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37619948348) |
|
|
105
|
+
| Receipt integration CI / CodeQL | [37620746600](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37620746600) / [37620746542](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37620746542) |
|
|
106
|
+
| Tag CI | [37620758376](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37620758376) |
|
|
107
|
+
| Image promotion | [37621482487](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37621482487) |
|
|
108
|
+
| PyPI/RubyGems Trusted Publishing | [37621486444](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37621486444) |
|
|
109
|
+
|
|
110
|
+
Final package artifact `11479132691` has archive digest
|
|
111
|
+
`sha256:648e84e49abc0af299f7caf1b1d50931da42439d0a58ceb0839ebfa99524893b`.
|
|
112
|
+
The signing/test/promotion jobs verified exact digest, source and signer bindings.
|
|
113
|
+
The package publisher authorized the run/source/inventory and published only the
|
|
114
|
+
staged recorded bytes. Promotion reused the tested image manifests.
|
|
115
|
+
|
|
116
|
+
## Installed final-byte proofs
|
|
117
|
+
|
|
118
|
+
The final downloaded wheel and exact signed MCP, without a derived controller,
|
|
119
|
+
passed all of these gates:
|
|
120
|
+
|
|
121
|
+
- `deployment_integration_smoke.py`: new manual, populated 0.5.0 upgrade and exact
|
|
122
|
+
reviewed hotfix. Author/cache hashes were preserved, plans applied, PDF/web/HTTP
|
|
123
|
+
passed and the actual generated workflow pin was exercised.
|
|
124
|
+
- `artifact_import_smoke.py`: authenticated Carta seal, original PDF, author prose,
|
|
125
|
+
copied-producer retirement, receiver relocation and forced rebuild. Both composed
|
|
126
|
+
PDFs have 11 pages and hash `1b942d003847126cfdbc14630059bb6ede5512751400b3701dab85a7d37b78a7`;
|
|
127
|
+
the unchanged original letter is on page 10. Integration record hash:
|
|
128
|
+
`e80d504b19677ace36c512f758161d3d5663d38d0979ef8c36bc87be765f9e40`.
|
|
129
|
+
- `d0_runtime_smoke.py`: live identity, reconnect/scope, disk drift, busy drain,
|
|
130
|
+
real worker crash recovery, offline/mapping/mismatch checks and actual
|
|
131
|
+
0.7.0 → 0.7.1 → 0.7.0 rollback with retained state.
|
|
132
|
+
- `bundler_transition_smoke.py`: all four populated 0.4.0 → 0.7.1 → 0.4.0 profiles,
|
|
133
|
+
two builds and a preview per point, unchanged author/cache files and separate
|
|
134
|
+
reproduction of the known unpatched 0.5.0 failure.
|
|
135
|
+
- Published Diavisuals 0.5.0 / Vega 0.5.1 rendering, receipts, tampering and relocation;
|
|
136
|
+
downloaded-gem isolated helper closure. Earlier exact 0.4.0 static receipts retain
|
|
137
|
+
their integrity-checked compatibility point.
|
|
138
|
+
|
|
139
|
+
Evidence root: `/tmp/opencode/unaltraweb-071-93/`.
|
|
140
|
+
|
|
141
|
+
| Result | SHA-256 |
|
|
142
|
+
| --- | --- |
|
|
143
|
+
| `final-integration/evidence.json` | `dcfce02ed10e7567a1030c1c93fc31fb7d75dfc73281fe8f1c4ee6b46038b6da` |
|
|
144
|
+
| `final-carta/evidence.json` | `c456b5e72d72bc224a7416589805c7d80c50d7fafe8747c86cd31ecb782cd308` |
|
|
145
|
+
| `final-d0/evidence.json` | `989603ed0a09fd6af9ca659ffbb824ab46907cb4538d094dcf32e34c8ea77c25` |
|
|
146
|
+
| `final-bundler/evidence.json` | `352fe35a81f36b2b44fbfe92f000d9179053d45f572b37f48485c82dd4c7c949` |
|
|
147
|
+
| `final-helpers/evidence.json` | `df994ccd8afaff45a7e3cfa9b6a29b650c9d01d63db2c9c36e59c31834273473` |
|
|
148
|
+
| `published-packages/verified.json` | `39b322784e5eef0ccde89ad8883e495c66ec9df23213fbe3301fb91862cb2c2c` |
|
|
149
|
+
| `public-images.json` | `6c2f54a877728dabbf39f2f2b0432beb5fe4c50c98769b22e06b6e1c562d7f77` |
|
|
150
|
+
| `post-pin-proof/evidence.json` | `f9168183e859e842b4bc236cca126edc2e9bd5464eb2527450302cc9342121c6` |
|
|
151
|
+
|
|
152
|
+
A fresh public-wheel venv passed default prepare/check/stdio smoke with the exact
|
|
153
|
+
expected configuration ID and rechecked the relocated Carta mapping. The public
|
|
154
|
+
gem installed in an isolated gem home and activated as 0.7.1 using the runtime's
|
|
155
|
+
existing dependency set; this is not a network-fresh dependency installation claim.
|
|
156
|
+
|
|
157
|
+
The actual checkout `MCP_CONSUMER_WORKSPACE=… make mcp-stdio` transport reported
|
|
158
|
+
instance `effcd7bce6cb477da6c49107a5582e02`, loaded 0.7.1 and the expected image.
|
|
159
|
+
Tool/resource identity agreed, the scaffold target selected the reviewed workflow,
|
|
160
|
+
and drain/close followed by exact session inspection proved resource release.
|
|
161
|
+
The post-release pin/report PR and clean-main CI result are recorded in issue 93.
|
|
162
|
+
|
|
163
|
+
The post-pin local suite passed 629 cases (599 passed, 30 optional skips),
|
|
164
|
+
distribution/workflow/fresh-wheel gates, prose/publication-copy checks and
|
|
165
|
+
whitespace checks. `make mcp-check mcp-smoke` used owned
|
|
166
|
+
`unaltraweb-071-93-*:post-pin` development images and the selected public PDF;
|
|
167
|
+
`make docs-build` used the exact published runtime digest. Both passed. These
|
|
168
|
+
development builds are separate from the signed-byte acceptance above.
|
|
169
|
+
|
|
170
|
+
## Consumer and hub boundaries
|
|
171
|
+
|
|
172
|
+
TIG independently adopted the earlier issue-86 hotfix in
|
|
173
|
+
[geourv/tig#24](https://github.com/geourv/tig/pull/24) and deployed reviewed main
|
|
174
|
+
`f5ddfabe650c95c10a99f3656a7cfc09e885dcbf` in successful run
|
|
175
|
+
[37523692990](https://github.com/geourv/tig/actions/runs/37523692990).
|
|
176
|
+
Its owner verified the public 311-page PDF byte-for-byte against the approved
|
|
177
|
+
copy, SHA-256 `3d58d63b7315099ac3518401415c35f0a0acf4a3f7f41ee6270716f394309bc4`.
|
|
178
|
+
That is hosted proof of its existing 0.5.0/hotfix combination, not a 0.7.1 migration.
|
|
179
|
+
|
|
180
|
+
This release's acceptance covers Linux/amd64 installed web/PDF work and selected
|
|
181
|
+
workflow preflights; real-manual hosted adoption remains per-consumer. The full
|
|
182
|
+
managed helper graph still needs composing-owner acceptance of the published
|
|
183
|
+
Diavisuals 0.6.0 correction; selected rendering compatibility remains 0.5.0.
|
|
184
|
+
gaContExt catalogue/advisory/activation work and deliberate client reconnection
|
|
185
|
+
remain separate. Earlier releases, author data and client registrations are preserved.
|