unaltraweb 0.7.0 → 0.7.2

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +27 -5
  3. data/docs/_documentation/en/33-reusable-workflows.md +28 -3
  4. data/docs/_documentation/en/40-distribution.md +57 -19
  5. data/docs/_documentation/en/43-workspace-path-policies.md +13 -0
  6. data/docs/_documentation/en/46-live-runtime.md +6 -3
  7. data/docs/_documentation/en/47-private-practice-pdfs.md +130 -0
  8. data/docs/agents/consolidation-0.7.2.md +97 -0
  9. data/docs/agents/d0-runtime-identity.md +22 -5
  10. data/docs/agents/deploy-provenance-86.md +86 -0
  11. data/docs/agents/deployment-integration-0.7.1.md +142 -0
  12. data/docs/agents/manual-authoring-components.md +23 -0
  13. data/docs/agents/mcp-contract.md +112 -6
  14. data/docs/agents/owner-closeout-85.md +269 -0
  15. data/docs/agents/owner-closeout-93.md +185 -0
  16. data/docs/agents/practice-editions-98.md +816 -0
  17. data/docs/agents/practice-pdf-installable-98.md +250 -0
  18. data/docs/agents/practice-runtime-archives-98.md +147 -0
  19. data/docs/agents/private-practice-verifier-98.md +296 -0
  20. data/docs/agents/source-ci-98.md +148 -0
  21. data/scripts/check_practice_verifier_runtime.py +69 -0
  22. data/scripts/export_practice_runtime_archives.py +138 -0
  23. data/scripts/manual/filters/practice-finish.lua +36 -0
  24. data/scripts/manual/filters/practice-layout.lua +84 -0
  25. data/scripts/manual/practice_pdf.py +31 -0
  26. data/scripts/manual/render_practice.py +125 -0
  27. data/scripts/manual/templates/practice.tex +95 -0
  28. data/scripts/prepare_practice_candidate.py +159 -0
  29. data/scripts/prepare_practice_editions_candidate.py +119 -0
  30. data/scripts/test_wheel_install.py +16 -1
  31. data/scripts/unaltraweb-mcp-bootstrap.sh +1 -1
  32. data/scripts/validate_distribution.py +51 -5
  33. data/scripts/validate_workflows.py +33 -4
  34. data/src/unaltraweb_mcp/component-contract.json +59 -22
  35. data/src/unaltraweb_mcp/component-contract.schema.json +35 -2
  36. data/src/unaltraweb_mcp/distribution.py +42 -2
  37. data/src/unaltraweb_mcp/editorial_sources.py +62 -4
  38. metadata +22 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ed24da568933de15be12350ea7b867a6aa7e14abac71ec303755f5b808e1837
4
- data.tar.gz: a4176d255c14de252144d7669db6479bc43ee033342332cd596870eea1ddf71b
3
+ metadata.gz: acaf4cf39c6e712f16e9815d41d137e94972a0224fb685d19fe36c3f82a7a195
4
+ data.tar.gz: fc287067a780f72c8d51ec287a889767cdce5420557733aff7a5e988fa17e45a
5
5
  SHA512:
6
- metadata.gz: 768943c9b012a7e165ab9136d364783203c35caaaae62c2715f95361107f63377dbac30e45252ebeff78b0707d71dd14eb0481cecca18f52b15688c82f4c8c10
7
- data.tar.gz: 49edeb75312f6d45e53db50a55a65f25ddb81f7ad8cc8438c9568ada3c9d699c9c00f0a329ea9b8cc2fb5812b5e48acd254e0e967b659d16650a0ea8612dad16
6
+ metadata.gz: 98a42d39c19df577bb5c69b08d2b20abdfa283d38e18dbbd45239cd7a887f0c43615b3d5a5d614f77f37f309b92aaaed666a5b90863a23595ff1e03f91e15de4
7
+ data.tar.gz: 765b280a1315f2be24e6bfc6894d5dc9f394ce201ccce86d7a994a6643e518bc45aceec473fea77d2e5cd3bf647031ca1a4943a72c9470b8d6607c53f0843bb9
data/Makefile CHANGED
@@ -1,9 +1,9 @@
1
1
  PYTHON ?= python3
2
2
  override PROJECT := $${MCP_CONSUMER_WORKSPACE:?MCP_CONSUMER_WORKSPACE is required}
3
3
  override PROJECT_ROOT := $(PROJECT)
4
- MCP_RUNTIME_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.0
5
- MCP_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.0
6
- MCP_RELEASE_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp@sha256:736c4ddd0a543454e3edaeac2e9cfd97a1279ce472923ac54e326c1281b2ba05
4
+ MCP_RUNTIME_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.2
5
+ MCP_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.2
6
+ MCP_RELEASE_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp@sha256:6aa20cff86c3891a876e37ba0548fa36f3c5633c9f22ba672e9f50123d677cf6
7
7
  MCP_DOCKER_BUILD_NETWORK ?= default
8
8
  INIT_SITE_PROFILE ?= unaltreselfie
9
9
  NEW_WEB_PROFILE ?= unaltreselfie
@@ -40,14 +40,26 @@ WEB_CAPTURE_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-web-capture@sha256:0bf1b
40
40
  WEB_CAPTURE_DEV_IMAGE ?= unaltraweb-web-capture:dev
41
41
  WEB_CAPTURE_DOCKER_BUILD_NETWORK ?= default
42
42
  VEGAVISUALS_CLI ?=
43
- DOCKER_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.0
44
- MANUAL_PDF_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:0ba267cb87f53ebaca4e31805fe00610cd61fdf97a8d2c3692f4655700dceaed
43
+ DOCKER_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.2
44
+ MANUAL_PDF_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:1bb3f2dafd741e96c28639ec1cc8ccaeb81cbaa73e649f787c0b4ef59997bd4b
45
45
  MANUAL_PDF_DEV_IMAGE ?= unaltraweb-manual-pdf:dev
46
46
  MCP_SMOKE_MANUAL_PDF_IMAGE ?= $(MANUAL_PDF_IMAGE)
47
47
  MCP_SMOKE_PROJECT ?=
48
48
  override MCP_SMOKE_PROJECT := $(value MCP_SMOKE_PROJECT)
49
49
  export MCP_SMOKE_PROJECT
50
50
  MANUAL_PDF_LANG ?=
51
+ PRACTICE_SOURCE ?=
52
+ PRACTICE_VERSION ?=
53
+ PRACTICE_RUN ?=
54
+ PRACTICE_DRY_RUN ?= 0
55
+ override PRACTICE_SOURCE := $(value PRACTICE_SOURCE)
56
+ override PRACTICE_VERSION := $(value PRACTICE_VERSION)
57
+ override PRACTICE_RUN := $(value PRACTICE_RUN)
58
+ override PRACTICE_DRY_RUN := $(value PRACTICE_DRY_RUN)
59
+ export PRACTICE_SOURCE PRACTICE_VERSION PRACTICE_RUN PRACTICE_DRY_RUN
60
+ PRACTICE_EDITION_CONFIG ?=
61
+ override PRACTICE_EDITION_CONFIG := $(value PRACTICE_EDITION_CONFIG)
62
+ export PRACTICE_EDITION_CONFIG
51
63
  MANUAL_PDF_PUBLISH_DRY_RUN ?= 1
52
64
  MANUAL_PDF_CONFIRM_PUBLISH ?= 0
53
65
  MANUAL_PDF_PUBLICATION_INTENT_SHA256 ?=
@@ -97,6 +109,8 @@ SCIMAGO_ARGS += --input "$(SCIMAGO_INPUT)"
97
109
  endif
98
110
 
99
111
  .PHONY: distribution-check distribution-release-check distribution-doctor workflow-check wheel-check gem-check reproducible-site-check docs-build docs-serve docs-publish docs-down metrics-scimago-fetch metrics-update metrics-update-all metrics-check manual-pdf-image manual-pdf-image-dev manual-pdf-preflight manual-pdf-status manual-pdf-check manual-pdf-build manual-pdf-publish manual-pdf-publish-worker manual-pdf-sync manual-release-status manual-release-check manual-release-prepare manual-compute-status manual-compute-check manual-compute-render manual-compute-render-figures manual-compute-image-python manual-compute-image-r manual-compute-images manual-compute-rstudio compute-base-image-python compute-base-image-r web-capture-status web-capture-check web-capture-render web-capture-image visualization-status visualization-check visualization-render
112
+ .PHONY: manual-practice-pdf-build
113
+ .PHONY: manual-practice-compose
100
114
  .PHONY: mcp-runtime-image mcp-image mcp-build mcp-check mcp-smoke mcp-smoke-prebuilt mcp-stdio mcp-down mcp-down-all mcp-list-tools mcp-starter-templates mcp-new-web mcp-initialize-site mcp-site-context mcp-profile-check mcp-manual-source-quality-check mcp-manual-editorial-quality-check mcp-manual-authoring-capabilities mcp-manual-computation-status mcp-manual-computation-check mcp-manual-computation-render mcp-manual-computation-render-figures mcp-web-capture-status mcp-web-capture-check mcp-web-capture-render mcp-manual-pdf-status mcp-manual-pdf-build mcp-manual-pdf-preview-prepare mcp-manual-pdf-preview-clean mcp-manual-pdf-publish mcp-manual-release-status mcp-manual-release-check mcp-manual-release-prepare mcp-profile-prune-plan mcp-profile-prune mcp-content-inventory mcp-language-policy mcp-content-approval-inventory mcp-translation-plan mcp-bibliography-inventory mcp-bibliometrics-check mcp-build-health
101
115
 
102
116
  REPOSITORY_CONTEXT_TARGETS := distribution-doctor manual-compute-status manual-compute-check manual-compute-render manual-compute-render-figures manual-compute-image-python manual-compute-image-r manual-compute-images manual-compute-rstudio web-capture-status web-capture-check web-capture-render visualization-status visualization-check visualization-render manual-pdf-preflight manual-pdf-status manual-pdf-check manual-pdf-build manual-pdf-publish manual-pdf-sync manual-release-status manual-release-check manual-release-prepare metrics-scimago-fetch metrics-update metrics-update-all metrics-check
@@ -230,6 +244,14 @@ mcp-manual-pdf-status: ## Inspect manual PDF state for PROJECT
230
244
  mcp-manual-pdf-build: ## Build the manual PDF for PROJECT
231
245
  @PYTHONPATH="$(CURDIR)/src" $(PYTHON) -m unaltraweb_mcp.cli --project "$(PROJECT)" mcp manual-pdf-build --language "$(MANUAL_PDF_LANG)"
232
246
 
247
+ manual-practice-compose: export MANUAL_PDF_IMAGE := $(value MANUAL_PDF_IMAGE)
248
+ manual-practice-compose: ## Compose private recipient ZIPs from a consumer edition configuration
249
+ @PYTHONPATH="$(CURDIR)/src" python3 -m unaltraweb_mcp.cli mcp manual-practice-compose --config "$${PRACTICE_EDITION_CONFIG}" $(if $(filter 1 true TRUE yes YES,$(PRACTICE_DRY_RUN)),--dry-run,)
250
+
251
+ manual-practice-pdf-build: export MANUAL_PDF_IMAGE := $(value MANUAL_PDF_IMAGE)
252
+ manual-practice-pdf-build: ## Build one private practice reading in a retained sandbox job
253
+ @PYTHONPATH="$(CURDIR)/src" $(PYTHON) "$(CURDIR)/scripts/manual/practice_pdf.py" --project "$(PROJECT)"
254
+
233
255
  mcp-manual-pdf-preview-prepare: ## Stage ignored PDF and cover copies for local Jekyll review
234
256
  @PYTHONPATH="$(CURDIR)/src" $(PYTHON) -m unaltraweb_mcp.cli --project "$(PROJECT)" mcp manual-pdf-preview-prepare
235
257
 
@@ -45,9 +45,34 @@ For `unaltremanual`, the `latest` channel is a manual-only deployment from the r
45
45
 
46
46
  Clean package scaffolds include a manual GitHub Pages wrapper pinned to a reviewed workflow revision. It has no push deployment trigger: a maintainer runs it only after local checks/renders and human review. The optional integration template retains additional local publishing experiments, but generated sites do not publish from local validation targets.
47
47
 
48
- The `consumer_integration` object in `src/unaltraweb_mcp/component-contract.json` is the single source for the reviewed core revision, workflow path, attested manual PDF image digest, and Vega renderer revision. The scaffold renders that tuple atomically into `Gemfile`, `Gemfile.lock`, and the packaged caller. The caller passes the existing `reviewed_sha` input through to the provider, so the reviewed `main` source is checked independently at both caller and provider boundaries.
49
-
50
- This pin-only integration follows the required M -> D -> B order: D was built from M's permanent identity before the caller recorded either value. Repeat that order for future provider updates; never use `@main` or substitute a mutable/version-tagged image for D.
48
+ The `consumer_integration` object in `src/unaltraweb_mcp/component-contract.json` is the single source for the reviewed core revision, workflow path and revision, attested manual PDF image digest, and Vega renderer revision. The scaffold renders that tuple atomically into `Gemfile`, `Gemfile.lock`, and the packaged caller. From 0.7.1, `site_deploy_workflow_sha` is independent of `core_sha`; older records default to their core pin. The caller passes the existing `reviewed_sha` input through to the provider, so the reviewed `main` source is checked independently at both caller and provider boundaries.
49
+
50
+ The 0.7.1 deployment workflow reads the exact accepted PDF digest and its producer
51
+ commit from the defining provider revision's `deployment_contract` in the BOM.
52
+ It fetches bounded JSON from that immutable provider commit, independently of
53
+ the consumer checkout. It checks the pulled image's revision label against that record, rather
54
+ than assuming the worker and a later workflow revision share a commit. Unknown
55
+ digests fail before Docker access. The reviewed records cover PDF workers 0.5.0
56
+ and 0.6.0; extending them requires a provider review and published-worker tests.
57
+ The records are data in the contract, rather than a release list embedded in the
58
+ workflow program. Release readiness checks the selected workflow's code and own
59
+ records; CI generates a caller and executes the workflow it actually references.
60
+
61
+ A reviewed deployment-only workflow fix can therefore be pinned independently
62
+ of the site's Gem/core revision while retaining an already-accepted PDF worker.
63
+ Update the caller's `uses:` to the immutable corrected workflow commit, review
64
+ that consumer change, and dispatch with the resulting reviewed `main` SHA. The
65
+ existing Gem, PDF and Vega selections need not change for this workflow repair.
66
+ Such a local caller override remains subject to normal scaffold-update conflict
67
+ review. A later package release can incorporate its own reviewed integration tuple.
68
+ Never use `@main` or a mutable/version-tagged image as a substitute for these pins.
69
+
70
+ The 0.7.1 update plan recognizes the exact reviewed one-line issue-86 caller fix
71
+ by both its original baseline hash and current content hash. It lists this as a
72
+ `migrations` entry and requires the normal reviewed plan/atomic apply. Additional
73
+ local edits still produce a conflict; authored content and unrelated files are
74
+ preserved. This lets a known provider repair converge to the next managed tuple
75
+ without treating arbitrary custom workflow code as package-owned.
51
76
 
52
77
  ## Stable manual releases
53
78
 
@@ -25,18 +25,56 @@ The template is the better place to validate gem consumption, centralized styles
25
25
 
26
26
  ## Component Contract
27
27
 
28
- ### 0.7.0 D0 runtime increment
29
-
30
- The next containing runtime adds [live instance identity and session-scoped
28
+ ### Published 0.7.1 release
29
+
30
+ [**0.7.1**](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.1)
31
+ consolidates deployment compatibility into the package contract. Core and workflow
32
+ pins are independent; the workflow reads its own revision's approved PDF producer
33
+ records. CI exercises the caller generated by the package and checks that the
34
+ selected core, controller and PDF agree on retained-document verifier bytes.
35
+
36
+ The reviewed issue-86 one-line caller fix can migrate through the normal atomic
37
+ scaffold update plan when its exact baseline and current hashes match. Additional
38
+ author edits retain conflict review. Final installed-byte tests cover fresh and
39
+ upgraded manuals, Carta relocation/PDF, live lifecycle and populated Bundler state.
40
+
41
+ Artifact source: `ae5dab1d99804e7f73da82930199c1e2f3c08f61`.
42
+ Core/workflow selection: `3332e0b93933f12317e05f1ce8d38ce80046feab`.
43
+ Checkout MCP pin:
44
+ `sha256:6aa20cff86c3891a876e37ba0548fa36f3c5633c9f22ba672e9f50123d677cf6`.
45
+ The selected PDF 0.7.1 is
46
+ `sha256:1bb3f2dafd741e96c28639ec1cc8ccaeb81cbaa73e649f787c0b4ef59997bd4b`.
47
+ Public downloads match the receipt. The
48
+ [delivery report](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/owner-closeout-93.md)
49
+ records the source/signing/publication chain and consumer acceptance scope.
50
+
51
+ ### Previous 0.7.0 release
52
+
53
+ [**0.7.0**](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.0)
54
+ adds [live instance identity and session-scoped
31
55
  resource control]({{ '/live-runtime/' | relative_url }}). Preparation is explicit,
32
56
  launch is pull-never, and startup identity remains distinct from current disk
33
57
  metadata. The owner-tested rendering closure selects Diavisuals 0.5.0 and Vega
34
58
  0.5.1 with exact artifacts; old 0.4.0 static receipts remain integrity-checked.
35
- Diavisuals' separate live-process identity correction still gates the full
36
- managed coordinator closure. Publication and activation evidence belong to the
37
- [D0 owner record](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/d0-runtime-identity.md).
38
-
39
- ### Published 0.6.0 release
59
+ The selected Diavisuals 0.5.0 lacks full live-process identity. The provider's
60
+ [0.6.0 correction](https://github.com/dosquartsdedocs/diavisuals/releases/tag/v0.6.0)
61
+ is published, but remains outside this tested Web combination. Full managed
62
+ coordinator acceptance requires composing-owner validation and a new reviewed
63
+ helper selection.
64
+
65
+ Gem, wheel, base runtime and MCP were produced from
66
+ `b44818c67eecef159f7aa0f825b0416cd511bc43`; receipt integration and tag target
67
+ `9fc84ac7fd01c78c6fe15fe862beb6a5d1633a9e` bind the same-source candidates.
68
+ That release's post-release checkout launcher selected
69
+ `sha256:b84cdb404ba7bab5ff0b14fa8a7ee93d7293e829cf32e28ff0dacaa8afff4677`.
70
+ Signed-byte D0 acceptance, the retained-letter relocation/rebuild and all four
71
+ populated Bundler roundtrips passed. Public downloads match the receipt.
72
+ The [delivery report](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/owner-closeout-85.md)
73
+ records exact identities and the remaining gates; the
74
+ [D0 owner contract](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/d0-runtime-identity.md)
75
+ defines the native API and lifecycle scopes.
76
+
77
+ ### Previous 0.6.0 release
40
78
 
41
79
  [**0.6.0**](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.6.0)
42
80
  delivers native [retained-letter import]({{ '/retained-documents/' | relative_url }}).
@@ -51,7 +89,7 @@ The PDF worker changes to include complete retained documents and the same
51
89
  integrity checkers used by its controller. Computation, capture and visual
52
90
  companions retain their tested 0.4.0 selections.
53
91
 
54
- The post-release checkout launcher selects published MCP digest
92
+ That release's post-release checkout launcher selected MCP digest
55
93
  `sha256:736c4ddd0a543454e3edaeac2e9cfd97a1279ce472923ac54e326c1281b2ba05`.
56
94
  Signed candidates, protected CI, strict receipt/ancestry gates, registry promotion
57
95
  and Trusted Publishing passed. Anonymous downloads match the receipt. The
@@ -106,25 +144,25 @@ candidate, receipt, tag and package evidence.
106
144
 
107
145
  The BOM is an interoperability contract, not a bundle. The wheel contains its Python control/inspection modules, schema/BOM, clean package-owned scaffolds and a small host Docker launcher, described below. It does not include Ruby theme assets, Docker image layers, the factory's build/worker implementations, TeX, Chromium, computation environments, `diavisuals`, or `vegavisuals`.
108
146
 
109
- The selected public core release is `0.6.0`; earlier distributions remain immutable. Its BOM reuses immutable PDF, compute and web-capture worker digests and selects published `diavisuals v0.4.0` and `vegavisuals v0.4.0` through SHA-256-pinned wheel URLs. Companion references can describe either a provider/release-matching Git reference or a provider/release/version-matching wheel with its content hash. The wheel boundary remains external. The scaffold's Vega revision is the published `68c0b231402ae9485cc34ce530dc5239cb0ec194` commit. `distribution-check` validates structural integrity for normal CI. `distribution-release-check` blocks coordinated publication while any component is `pending` or `unavailable`; reviewed source authorized to produce final same-commit candidates is `ready`, while an already-published component is `released`. Final receipt values remain immutable after publication.
147
+ The selected public core release is `0.7.1`; earlier distributions remain immutable. Its BOM selects the verified PDF 0.7.1 specialization, reuses immutable compute and web-capture worker digests and selects published `diavisuals v0.5.0` and `vegavisuals v0.5.1` through SHA-256-pinned wheel URLs. Companion references can describe either a provider/release-matching Git reference or a provider/release/version-matching wheel with its content hash. The wheel boundary remains external. The scaffold's Vega revision is the published `a448cc50a5f511743a6fcfc213baeb9be80f4a27` commit. `distribution-check` validates structural integrity for normal CI. `distribution-release-check` blocks coordinated publication while any component is `pending` or `unavailable`; reviewed source authorized to produce final same-commit candidates is `ready`, while an already-published component is `released`. Final receipt values remain immutable after publication.
110
148
 
111
149
  ## Docker-First Hybrid Policy
112
150
 
113
- ### 0.6.0 component selection
151
+ ### 0.7.1 component selection
114
152
 
115
- The coordinated core identity is **0.6.0**: gem, wheel, base runtime and MCP
153
+ The coordinated core identity is **0.7.1**: gem, wheel, base runtime and MCP
116
154
  images were published together. The installed host launcher and runtime-aware
117
155
  generated Bundler state are included. The PDF worker uses its reviewed, signed
118
- 0.6.0 digest, alongside the 0.4.0 computation/capture workers and visual
119
- companions. A released PDF can be reused only by full digest; new/pending workers
120
- still require the coordinated version. The historical 0.5.0 receipt remains
121
- unchanged. Signed image/package evidence is recorded in the 0.6.0 receipt;
156
+ 0.7.1 digest, alongside the 0.4.0 computation/capture workers and the accepted
157
+ Diavisuals 0.5.0 / Vega 0.5.1 rendering combination. A released PDF can be reused
158
+ only by full digest; new/pending workers still require the coordinated version.
159
+ Earlier receipts remain unchanged. Signed image/package evidence is recorded in the 0.7.1 receipt;
122
160
  promotion and anonymous-download checks passed before the post-release launcher
123
161
  pin was advanced.
124
162
 
125
163
  ### Local delivery
126
164
 
127
- GHCR is the canonical delivery channel for normal local use. The released package scaffold selects `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.6.0`; existing sites can remain on their immutable previous release until deliberately updated. Its `make build`, `make serve` and `make test` targets mount the thin child site and run inside that image. The image contains both the installed Python control plane and the reviewed factory source at `/opt/unaltraweb`, so those targets load the theme as a path gem without downloading PyPI or RubyGems packages.
165
+ GHCR is the canonical delivery channel for normal local use. The released package scaffold selects `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.1`; existing sites can remain on their immutable previous release until deliberately updated. Its `make build`, `make serve` and `make test` targets mount the thin child site and run inside that image. The image contains both the installed Python control plane and the reviewed factory source at `/opt/unaltraweb`, so those targets load the theme as a path gem without downloading PyPI or RubyGems packages.
128
166
 
129
167
  Factory registration uses a stricter pin. gContExt runs `mcp-build`, which inspects or pulls the full `MCP_RELEASE_IMAGE` digest, and `mcp-stdio` launches that exact image. Checkout builds use local `:dev` names by default through `mcp-image`, `mcp-check` and `mcp-smoke`, so they do not shadow public semver references unless a maintainer explicitly overrides them. The digest is advanced in a separate post-release change after each new receipt exists; candidate source continues to select the last completed release instead of attempting to embed an unknown self-digest.
130
168
 
@@ -154,7 +192,7 @@ unaltraweb-mcp-docker serve --project /absolute/consumer
154
192
  ```
155
193
 
156
194
  The installed default selects its package's full MCP release image, currently
157
- `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.6.0`. It resolves that selection to the
195
+ `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.1`. It resolves that selection to the
158
196
  local immutable image ID before executing. The checkout's `MCP_RELEASE_IMAGE`
159
197
  is a separate digest pin advanced only after publication; it is not the installed
160
198
  wheel's default. This avoids sending a new package back to an older MCP while
@@ -299,7 +337,7 @@ For that reason:
299
337
 
300
338
  ## Docker Runtime
301
339
 
302
- Release `0.6.0` publishes the selected base/MCP runtime and packages while pinning the verified PDF worker and reusing unchanged specialized workers. Local maintainers continue to use explicit development names such as `unaltraweb:dev`; generated sites select the reviewed semver MCP image rather than `main` or `latest`.
340
+ Release `0.7.1` publishes the selected base/MCP runtime and packages while pinning the verified PDF worker and reusing unchanged specialized workers. Local maintainers continue to use explicit development names such as `unaltraweb:dev`; generated sites select the reviewed semver MCP image rather than `main` or `latest`.
303
341
 
304
342
  The base runtime owns Ruby, Jekyll and system dependencies. The MCP image builds on its exact candidate digest and adds the full reviewed factory plus the Python package. Specialized workers remain separate. This keeps each layer focused without adding Chromium, TeX or computation stacks to every site; the coordinated core-image workflow still rebuilds and verifies runtime, MCP and manual PDF candidates together.
305
343
 
@@ -43,6 +43,9 @@ which is not evidence that a future Git repository is compliant.
43
43
  | --- | --- | --- | --- | --- |
44
44
  | `_site` | directory | jekyll-build-output | ignored | disposable |
45
45
  | `tmp` | directory | build-staging-and-local-release-evidence | ignored | explicit |
46
+ | `practiques` | directory | private-practice-sources | versioned | never |
47
+ | `sandbox/practiques` | directory | retained-private-practice-jobs | ignored | explicit |
48
+ | `dist/practiques` | directory | private-practice-deliveries | ignored | explicit |
46
49
  | `.cache/scimago` | directory | external-bibliometrics-input-cache | ignored | explicit |
47
50
  | `.cache/unaltraweb/manual-pdf-publication-intent.json` | file | pdf-publication-recovery-intent | ignored | explicit |
48
51
  | `.cache/unaltraweb/manual-pdf-publication.json` | file | pdf-publication-provenance | ignored | explicit |
@@ -84,6 +87,16 @@ identity; it is generated metadata, not a disposable execution lock. Consumers
84
87
  usually version it with generated Markdown/figures, but this rollout does not
85
88
  force that choice.
86
89
 
90
+ Practice source control and web exclusion are separate checks. A manual using
91
+ `practiques/` must exclude `practiques/`, `sandbox/` and `dist/` from Jekyll;
92
+ `profile_check` rejects missing exclusions and conflicting explicit includes.
93
+ New manual scaffolds provide these exclusions. Existing sites retain their
94
+ configuration during scaffold synchronization, so review this small configuration
95
+ addition in the consumer workspace. The shared ignore template covers
96
+ `sandbox/` and `dist/practiques/`; local conflicts still stop synchronization.
97
+ Retained practice jobs and deliveries require explicit preservation decisions,
98
+ even when they can be regenerated.
99
+
87
100
  ## PDF Recovery Is Not Disposable Cache
88
101
 
89
102
  `src/unaltraweb_mcp/manual_pdf_preview.py` owns the five fixed PDF-state paths:
@@ -14,7 +14,8 @@ permalink: /live-runtime/
14
14
  nav_title: Live Runtime
15
15
  ---
16
16
 
17
- The 0.7.0 runtime increment distinguishes the process serving a connection from
17
+ The [published 0.7.0 runtime](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.0)
18
+ distinguishes the process serving a connection from
18
19
  the installed package, source checkout and rendering workers. Call
19
20
  `runtime_identity` or read `web://runtime-identity` through that live MCP
20
21
  connection. Both report the same backend instance and startup information.
@@ -83,7 +84,9 @@ observations without running a renderer.
83
84
  Visual helpers are separate MCP processes. Their versions and immutable package
84
85
  selections describe the accepted rendering closure, not their current live
85
86
  instances. The composing controller must obtain each helper's own live identity.
86
- The selected Diavisuals 0.5.0 still requires its separately tracked D0 identity
87
- correction before the entire coordinator closure can be marked managed-ready.
87
+ The selected Diavisuals 0.5.0 lacks full live-process identity. Diavisuals 0.6.0
88
+ publishes the provider correction, but is outside unaltraweb 0.7.0's tested helper
89
+ combination. Composing-owner compatibility validation and a new reviewed selection
90
+ are required before accepting that corrected helper in the managed closure.
88
91
  Existing 0.4.0 static provider receipts remain subject to full integrity checks
89
92
  and do not force regeneration of authored figures during an upgrade.
@@ -0,0 +1,130 @@
1
+ ---
2
+ title: Private Practice PDFs
3
+ description: Build landscape practice readings with shared manual typography, course metadata and retained private outputs.
4
+ lang: en
5
+ ref: private_practice_pdfs
6
+ profiles:
7
+ - unaltredocs
8
+ documentation_profiles:
9
+ - core-developers
10
+ section: Core Development
11
+ weight: 665
12
+ permalink: "/private-practice-pdfs/"
13
+ nav_title: Practice PDFs
14
+ ---
15
+
16
+ The `manual_practice_pdf_build` tool creates a private A4-landscape reading from
17
+ one Markdown source. It uses the manual's typography and site metadata, including
18
+ the course name, degree, instructors and configured logos. The first page includes
19
+ the course codes in parentheses beside the subject and the practice version.
20
+ The academic year is omitted. Logos appear only on the first page.
21
+
22
+ ## Prepare a reading
23
+
24
+ Keep editable sources in the manual repository:
25
+
26
+ ```text
27
+ practiques/accessibility/ca/alumnat/LLEGIU-ME.md
28
+ practiques/accessibility/ca/docent/LLEGIU-ME.md
29
+ ```
30
+
31
+ Use `LEEME.md` for Spanish and `README.md` for English. The language must be
32
+ enabled in the site configuration. `alumnat` and `docent` identify separate
33
+ readings; the tool does not infer or produce a teacher solution.
34
+
35
+ ```markdown
36
+ ---
37
+ title: Compare two routes
38
+ lang: en
39
+ content_status: draft
40
+ ---
41
+
42
+ # Open the project
43
+
44
+ 1. Open the prepared project.
45
+ 2. Compare the routes between the same origin and destination.
46
+
47
+ ![The two routes on the same map](assets/img/routes.png "Open and closed crossing scenarios")
48
+
49
+ | Scenario | Crossing |
50
+ | --- | --- |
51
+ | Open | Available |
52
+ | Closed | Unavailable |
53
+
54
+ Table: Conditions used in each scenario.
55
+ ```
56
+
57
+ The initial reading format supports ordinary Pandoc Markdown, links, maths,
58
+ fenced code, captioned tables and standalone PNG, JPEG or PDF images. Image paths
59
+ are project-relative, with a fallback to the source directory. Absolute paths,
60
+ parent traversal, symlinks and remote images are rejected. Render other visual
61
+ formats through their owning provider and select a printable output first.
62
+ Liquid, manual-only component wrappers and automatic bibliography assembly are
63
+ not part of this standalone reading format.
64
+
65
+ Figures keep their original proportions and fit the usable page automatically.
66
+ Their captions are measured before allocating image height. A complete figure
67
+ moves to the next page when it cannot fit; it is not reduced to fill a small
68
+ space at the bottom. Tables are centred, with repeated headers and captions on
69
+ continued pages. Review long tables and dense screenshots at the intended size.
70
+
71
+ ## Keep the material private
72
+
73
+ Merge these entries into the existing `exclude` list in `_config.yml`:
74
+
75
+ ```yaml
76
+ exclude:
77
+ - practiques/
78
+ - sandbox/
79
+ - dist/
80
+ ```
81
+
82
+ Keep the existing exclusions. Add `sandbox/practiques/` and `dist/practiques/`
83
+ to `.gitignore` if broader rules do not already cover them. Version the editable
84
+ practice sources. Git ignore rules do not exclude files from Jekyll by themselves.
85
+ The profile check rejects missing web exclusions when practice sources exist.
86
+
87
+ ## Build with MCP or the CLI
88
+
89
+ Use a runtime whose tool inventory advertises `manual_practice_pdf_build`.
90
+ Existing connections keep their loaded code until the client reconnects to an
91
+ updated runtime. Prepare the selected PDF image explicitly before the first run.
92
+
93
+ ```text
94
+ manual_practice_pdf_build(
95
+ source="practiques/accessibility/en/alumnat/README.md",
96
+ version="2026-10-r1"
97
+ )
98
+ ```
99
+
100
+ The equivalent factory-backed CLI command is:
101
+
102
+ ```bash
103
+ unaltraweb-mcp --project "$PWD" mcp manual-practice-pdf-build \
104
+ --source practiques/accessibility/en/alumnat/README.md \
105
+ --version 2026-10-r1
106
+ ```
107
+
108
+ Use `--dry-run` for a read-only plan. `--run review-2` selects a named review or
109
+ retry while retaining an earlier attempt. The result gives the PDF, first-page
110
+ preview, receipt and job paths under `sandbox/practiques/<slug>/`.
111
+
112
+ For a maintainer testing a core checkout, the corresponding factory target is:
113
+
114
+ ```bash
115
+ MCP_CONSUMER_WORKSPACE="$PWD" make -C /path/to/unaltraweb \
116
+ manual-practice-pdf-build \
117
+ PRACTICE_SOURCE=practiques/accessibility/en/alumnat/README.md \
118
+ PRACTICE_VERSION=2026-10-r1
119
+ ```
120
+
121
+ The worker runs without network access, with a read-only input snapshot and one
122
+ writable output directory. A repeated request verifies and reuses an unchanged
123
+ sealed job. Changed inputs produce another job; edited or incomplete attempts
124
+ are retained. Updating only the MCP package version does not invalidate a reading
125
+ whose effective inputs and rendering controls are unchanged.
126
+
127
+ The command returns `publishes: false`. Review the PDF before distributing it.
128
+ Practice versions are independent of the manual's `latest` or stable release
129
+ selectors. Compiling a reading does not analyse GIS data, assemble Moodle ZIPs,
130
+ upload files or publish material on the website.
@@ -0,0 +1,97 @@
1
+ # Web #98 / gaContExt #32 — 0.7.2 source checkpoint
2
+
3
+ This is a draft consolidation, not a published release or an installed 0.7.2
4
+ cohort. It includes private reading/PDF composition, portable bindings and author
5
+ resources, independent PDF/ZIP delivery, the host reaper correction, the shared
6
+ source-CI control, and preparation of runtime archives for the existing hub loader.
7
+ Earlier candidate reports describe their historical checkpoints; their source
8
+ snapshots, images, wheels, receipts and retained evidence remain unchanged.
9
+
10
+ **Current private-runtime decision:** QGIS 0.6.0 is released but private. The earlier
11
+ wheel-install plan below is superseded by [native private-runtime delegation](private-practice-verifier-98.md).
12
+ Public Web builds now contain only the Web bridge/metadata; the hub prepares the
13
+ private QGIS controller. No published/private wheel is downloaded into Web.
14
+ The three independent review P2 findings are reproduced and corrected in this
15
+ source delta; a new source review and independent runtime check are still required
16
+ on its committed HEAD. The H2 contract declares the private producer's hash-bound
17
+ `release.json` externally; public runtime archives contain only Web-only and PDF
18
+ images. Local acceptance and the external receipt are documented in the linked
19
+ bridge and archive contracts.
20
+
21
+ ## Blockers recorded at the original draft checkpoint
22
+
23
+ The first two entries describe the superseded installer plan at `88dd2518`, not
24
+ current requirements to make QGIS public or embed its wheel:
25
+
26
+ - The final **published QGIS wheel URL and SHA-256 are still missing**. The owner
27
+ reports prepared source `a660dfa54ea6bc6cf5d3d3fbeb12593f62c726e1` and wheel
28
+ `dde653f7a719d8dbb20b4471e3cdb7f9c99cbdfcb116647caba5a08e710c7b76`
29
+ pending re-review. This is not an accepted published pin and is not installed
30
+ or inserted into the BOM by this checkpoint.
31
+ - `Dockerfile.mcp` deliberately refuses its verifier installation until that
32
+ released owner component is declared. Docker CI may stop at this gate; no
33
+ check, job or refusal is disabled to manufacture a green result.
34
+ - Select the new permanent reviewed core commit after integration. The current
35
+ `consumer_integration.core_sha` remains the previous reviewed `3332e0b…`
36
+ point during this draft, not a claim that it already contains the new tools.
37
+ - Final same-source package/image candidates, their acceptance and a new
38
+ receipt-only release checkpoint remain pending. `release-candidates.json`
39
+ still belongs to published 0.7.1 and is not a 0.7.2 authorization.
40
+
41
+ The coordinated gem/wheel/runtime/MCP declarations now name **0.7.2**. Nothing
42
+ re-emits 0.7.1 with new bytes. The checkout launcher and source-checker lane keep
43
+ their previously published MCP digest until a new published digest is reviewed.
44
+
45
+ ## Preserved tuple
46
+
47
+ - Workflow: `3332e0b93933f12317e05f1ce8d38ce80046feab`.
48
+ - PDF 0.7.1:
49
+ `ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:1bb3f2dafd741e96c28639ec1cc8ccaeb81cbaa73e649f787c0b4ef59997bd4b`.
50
+ - Actual PDF producer: `b7ec1d7a139c65b3b0b88699cdbeb19080f13be1`.
51
+ - PDF configuration ID:
52
+ `sha256:618163d3f924439792b2306617bd9612f566c5881166102fa544b4e782d569fa`.
53
+ - All nine retained-document checkers remain byte-identical to the reviewed
54
+ core/PDF point. Diavisuals/Vega compatibility is not widened.
55
+
56
+ ## Reproducibility and retained evidence
57
+
58
+ The publishable wheel carries the source-CI runner, policy schema, common workflow
59
+ template and native private-runtime bridge/descriptor. The normal MCP image runs
60
+ the factory-owned compositor/scripts and delegates verification to the prepared
61
+ private QGIS controller. Neither public entrypoint requires consumers to copy
62
+ generic code or inspect a mutable provider checkout.
63
+
64
+ `prepare_practice_candidate.py`, `prepare_practice_editions_candidate.py` and
65
+ their pinned rc fixture defaults are historical acceptance/preparation tools.
66
+ They do not replace the normal release pipeline, and their old local candidates
67
+ must not be regenerated or relabelled as the final release. Archived source and
68
+ image hashes identify those exact historical bytes.
69
+
70
+ Source-CI/composition tests and synthetic fixture recipes are versioned here.
71
+ Datasets, rendered PDFs/ZIPs, Docker-save archives and retained job outputs stay
72
+ outside Git. Detailed evidence and transfer hashes are recorded in:
73
+
74
+ - [Practice editions and bindings](practice-editions-98.md).
75
+ - [Runtime archives and independent PDF producer identity](practice-runtime-archives-98.md).
76
+ - [Shared public-source CI](source-ci-98.md).
77
+ - [Installable practice-PDF acceptance](practice-pdf-installable-98.md).
78
+
79
+ The source validation before this version declaration passed 706 tests
80
+ (679 passed / 27 optional skips), fresh-wheel installation, source/workflow
81
+ checks and native bounded source-checker execution. After declaring 0.7.2,
82
+ the suite passes 706 cases (678 passed / 28 skips): the additional skipped
83
+ Docker mount-parser test requires the not-yet-prepared 0.7.2 MCP image. It was
84
+ not redirected to an older image to claim a new-runtime pass. A fresh 0.7.2 wheel
85
+ build/install and distribution/workflow/whitespace checks passed at that original
86
+ checkpoint; its publication readiness was false because the QGIS pin was absent.
87
+
88
+ The later private-runtime/P2 checkpoint passes **720 tests (692 passed / 28
89
+ skips)** and fresh-wheel installation. Native local evidence verifies Web package
90
+ absence, v1/v2 delegation, sealed PDF/ZIP pairs, selected-resource-only engine
91
+ mounts and exact teardown. Distribution metadata is now structurally ready while
92
+ private checks remain explicitly `not_run` in public CI. The final source's hosted
93
+ CI and independent re-review are tracked on PR #104; local evidence is not
94
+ relabeled as those gates. The receipt-only H2 addition leaves executable bytes and
95
+ selected image/schema identities unchanged, so retained native renders are reused.
96
+ None of this publishes or approves the manuals' draft teaching content. W1 draft
97
+ PR #103 is outside this consolidation.
@@ -6,6 +6,11 @@ Requirements: gaContExt
6
6
  Owner issue: [85](https://github.com/dosquartsdedocs/unaltraweb/issues/85).
7
7
  Coordination: [gaContExt 15](https://github.com/dosquartsdedocs/gacontext/issues/15).
8
8
 
9
+ Delivery: [0.7.0 is published](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.0).
10
+ The [signed-byte delivery report](owner-closeout-85.md) supersedes the chronological
11
+ development/candidate state below. It retains the full managed-closure blocker and
12
+ the partial legacy identity gate; publication alone does not close them.
13
+
9
14
  ## Native API mapping
10
15
 
11
16
  The containing 0.7.0 increment adds `runtime_identity` and
@@ -82,6 +87,14 @@ does not authorize removal. `reap-session` preserves a live backend or running
82
87
  job, and recovers only that retired session's idle resources. Occupied or foreign
83
88
  networks fail closed. No fresh-helper PID is presented as the backend's PID.
84
89
 
90
+ Exited-resource recovery compares complete Docker observations while canonicalizing
91
+ only the order of mount records. Every mount field, field type and duplicate record
92
+ remains significant; a real identity/state/mount change still refuses removal.
93
+ Removal failure or timeout is reported separately from observation drift, and
94
+ the exact container ID must be absent before release is confirmed. This recovery
95
+ code runs in the installed host adapter: selecting a controller image does not
96
+ update an already installed adapter.
97
+
85
98
  The legacy `down` / `make mcp-down` is an explicit **workspace-wide** shutdown;
86
99
  `mcp-down-all` is maintainer/factory-wide. Neither is the hub's per-client toggle
87
100
  operation. The managed sequence is live drain, close this transport, inspect its
@@ -96,7 +109,7 @@ release while a job continues.
96
109
 
97
110
  ## Accepted visual-helper points and remaining closure blocker
98
111
 
99
- The candidate selects the published Diavisuals 0.5.0 and Vega 0.5.1 packages:
112
+ Release 0.7.0 selects the published Diavisuals 0.5.0 and Vega 0.5.1 packages:
100
113
 
101
114
  | Helper | Wheel SHA-256 | Renderer configuration ID |
102
115
  | --- | --- | --- |
@@ -118,10 +131,14 @@ by this source change.
118
131
 
119
132
  The coordinator does not claim to observe another MCP's serving process. Its live
120
133
  identity returns the helper selections and requires their independent connection
121
- observations. **Diavisuals 0.5.0 still lacks the full live-instance identity**;
122
- [Diavisuals 14](https://github.com/dosquartsdedocs/diavisuals/issues/14) is therefore
123
- an external D0 managed-closure blocker. Rendering compatibility alone does not
124
- close that gate or make the whole coordinator dependency graph managed-ready.
134
+ observations. **Selected Diavisuals 0.5.0 lacks the full live-instance identity**.
135
+ [Diavisuals 14](https://github.com/dosquartsdedocs/diavisuals/issues/14#issuecomment-5987114002)
136
+ already records the provider correction in published **0.6.0**; the issue remains
137
+ open for intake. That newer provider is outside unaltraweb 0.7.0's tested helper
138
+ point. The remaining gate is composing-owner compatibility acceptance and a new
139
+ reviewed selection of the corrected helper, followed by independent live
140
+ observations. It is not an unpublished provider implementation. Rendering
141
+ compatibility alone does not make the coordinator dependency graph managed-ready.
125
142
 
126
143
  ## Acceptance and delivery state
127
144