unaltraweb 0.6.0 → 0.7.1
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 +12 -10
- data/docs/_documentation/en/33-reusable-workflows.md +28 -3
- data/docs/_documentation/en/40-distribution.md +54 -24
- data/docs/_documentation/en/45-retained-documents.md +1 -1
- data/docs/_documentation/en/46-live-runtime.md +92 -0
- data/docs/agents/d0-runtime-identity.md +209 -0
- data/docs/agents/deploy-provenance-86.md +86 -0
- data/docs/agents/deployment-integration-0.7.1.md +138 -0
- data/docs/agents/mcp-contract.md +13 -4
- data/docs/agents/owner-closeout-80.md +185 -0
- data/docs/agents/owner-closeout-85.md +269 -0
- data/docs/agents/retained-letter-import.md +4 -0
- data/scripts/test_wheel_install.py +3 -3
- data/scripts/unaltraweb-mcp-bootstrap.sh +90 -9
- data/scripts/unaltraweb-mcp-cleanup.sh +41 -9
- data/scripts/validate_distribution.py +33 -4
- data/scripts/validate_workflows.py +33 -4
- data/scripts/web_captures/render.py +8 -1
- data/src/unaltraweb_mcp/component-contract.json +52 -26
- data/src/unaltraweb_mcp/component-contract.schema.json +35 -2
- data/src/unaltraweb_mcp/distribution.py +42 -2
- metadata +8 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5697f730a670b00edc9d6cda6bb653552470c6c58667d27557e33309203f552c
|
|
4
|
+
data.tar.gz: 1fb32fa043262eca9724aed6dc0184246bc6012f2a6261037f03203ef1265945
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d43c24786b83d17e9cf8cc238eb12227a3d46581fbc550468c95549f9061cd60b6eb4681021855e646929ca41f6b51de850e2db183d956dfd72876b6e48a8a2e
|
|
7
|
+
data.tar.gz: 15c574473f3c71b81b624b08bf4767902deebfc5f0164abc668f43dae6f33f9a0eb8c4a45e1d734a03bd4540b42b81d4e0a77aa8f42ae46566e7cd81cf7af19f
|
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.
|
|
5
|
-
MCP_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.
|
|
6
|
-
MCP_RELEASE_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp@sha256:
|
|
4
|
+
MCP_RUNTIME_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.1
|
|
5
|
+
MCP_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.1
|
|
6
|
+
MCP_RELEASE_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-mcp@sha256:b84cdb404ba7bab5ff0b14fa8a7ee93d7293e829cf32e28ff0dacaa8afff4677
|
|
7
7
|
MCP_DOCKER_BUILD_NETWORK ?= default
|
|
8
8
|
INIT_SITE_PROFILE ?= unaltreselfie
|
|
9
9
|
NEW_WEB_PROFILE ?= unaltreselfie
|
|
@@ -40,8 +40,8 @@ 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.
|
|
44
|
-
MANUAL_PDF_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:
|
|
43
|
+
DOCKER_IMAGE ?= ghcr.io/dosquartsdedocs/unaltraweb:0.7.1
|
|
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 ?=
|
|
@@ -71,7 +71,7 @@ export MANUAL_RELEASE_SELECTOR MANUAL_PDF_LANG MANUAL_PDF_PUBLISH_DRY_RUN MANUAL
|
|
|
71
71
|
UNALTRAWEB_WORKER_ROLE ?=
|
|
72
72
|
UNALTRAWEB_WORKER_PROJECT ?=
|
|
73
73
|
UNALTRAWEB_WORKER_TOKEN ?=
|
|
74
|
-
WORKER_LABEL_ARGS = $(if $(strip $(UNALTRAWEB_WORKER_TOKEN)),--label "io.context.mcp-factory=unaltraweb" --label "io.context.mcp-role=$(UNALTRAWEB_WORKER_ROLE)" --label "io.context.mcp-project=$(UNALTRAWEB_WORKER_PROJECT)" --label "io.context.mcp-worker-token=$(UNALTRAWEB_WORKER_TOKEN)",)
|
|
74
|
+
WORKER_LABEL_ARGS = $(if $(strip $(UNALTRAWEB_WORKER_TOKEN)),--label "io.context.mcp-factory=unaltraweb" --label "io.context.mcp-role=$(UNALTRAWEB_WORKER_ROLE)" --label "io.context.mcp-project=$(UNALTRAWEB_WORKER_PROJECT)" --label "io.context.mcp-worker-token=$(UNALTRAWEB_WORKER_TOKEN)",) $(if $(strip $(UNALTRAWEB_RUNTIME_SESSION)),--label "io.context.mcp-session=$(UNALTRAWEB_RUNTIME_SESSION)",)
|
|
75
75
|
DOCS_CONTAINER ?= unaltraweb-docs-local
|
|
76
76
|
DOCS_HOST ?= 0.0.0.0
|
|
77
77
|
DOCS_PORT ?= 4000
|
|
@@ -295,17 +295,18 @@ manual-compute-render: ## Execute sources and atomically publish Markdown and fi
|
|
|
295
295
|
python_image="$(COMPUTE_PYTHON_IMAGE)"; r_image="$(COMPUTE_R_IMAGE)"; \
|
|
296
296
|
if test "$$engine" = "r"; then r_image="$$image"; else python_image="$$image"; fi; \
|
|
297
297
|
if ! docker image inspect "$$image" >/dev/null 2>&1; then \
|
|
298
|
+
if test "$${UNALTRAWEB_MANAGED_RUNTIME:-0}" = 1; then printf '%s\n' 'Selected computation image is not prepared; managed execution never builds or pulls' >&2; exit 1; fi; \
|
|
298
299
|
COMPUTE_PYTHON_IMAGE="$(COMPUTE_PYTHON_IMAGE)" COMPUTE_R_IMAGE="$(COMPUTE_R_IMAGE)" COMPUTE_DOCKER_BUILD_NETWORK="$(COMPUTE_DOCKER_BUILD_NETWORK)" $(PYTHON) "$(COMPUTE_SCRIPT)" image --project "$(PROJECT_ROOT)" --engine "$$engine" >/dev/null; \
|
|
299
300
|
fi; \
|
|
300
301
|
identity=$$(docker image inspect "$$image" --format '{{.Id}}'); \
|
|
301
302
|
digest=$$(docker image inspect "$$image" --format '{{join .RepoDigests ","}}'); \
|
|
302
303
|
set --; if test -n "$(UNALTRAWEB_WORKER_TOKEN)"; then cidfile="$$runtime_dir/worker-$(UNALTRAWEB_WORKER_TOKEN)-$$engine.cid"; rm -f "$$cidfile"; cidfiles="$$cidfiles $$cidfile"; set -- --cidfile "$$cidfile"; fi; \
|
|
303
|
-
docker run --rm "$$@" $(WORKER_LABEL_ARGS) --user "$(LOCAL_UID):$(LOCAL_GID)" --network none --read-only --cap-drop ALL --security-opt no-new-privileges --pids-limit "$(COMPUTE_PIDS_LIMIT)" --cpus "$(COMPUTE_CPUS)" --memory "$(COMPUTE_MEMORY)" --tmpfs /tmp:rw,noexec,nosuid,size=1g \
|
|
304
|
+
docker run --rm --pull never "$$@" $(WORKER_LABEL_ARGS) --user "$(LOCAL_UID):$(LOCAL_GID)" --network none --read-only --cap-drop ALL --security-opt no-new-privileges --pids-limit "$(COMPUTE_PIDS_LIMIT)" --cpus "$(COMPUTE_CPUS)" --memory "$(COMPUTE_MEMORY)" --tmpfs /tmp:rw,noexec,nosuid,size=1g \
|
|
304
305
|
-e HOME=/tmp -e COMPUTE_PYTHON_IMAGE="$$python_image" -e COMPUTE_R_IMAGE="$$r_image" \
|
|
305
306
|
-e UNALTRAWEB_COMPUTE_IMAGE_ID="$$identity" -e UNALTRAWEB_COMPUTE_IMAGE_DIGEST="$$digest" \
|
|
306
307
|
--mount "$$project_mount" \
|
|
307
308
|
--mount "$$runtime_mount" \
|
|
308
|
-
-w /project --entrypoint python3 "$$
|
|
309
|
+
-w /project --entrypoint python3 "$$identity" \
|
|
309
310
|
/opt/unaltraweb/computations/render.py render --project /project --engine "$$engine" $(if $(strip $(COMPUTE_SOURCE)),--source "$(COMPUTE_SOURCE)",) $(if $(filter 1 true TRUE yes YES y Y,$(COMPUTE_CONFIRM_OVERWRITE)),--confirm-overwrite,) $(if $(filter 1 true TRUE yes YES y Y,$(COMPUTE_STALE_ONLY)),--stale-only,) $(if $(strip $(COMPUTE_MODE)),--mode "$(COMPUTE_MODE)",) >> "$$results"; \
|
|
310
311
|
done; \
|
|
311
312
|
if test -z "$(strip $(COMPUTE_SOURCE))"; then $(PYTHON) "$(COMPUTE_SCRIPT)" prune --project "$(PROJECT_ROOT)" >/dev/null; fi; \
|
|
@@ -382,13 +383,14 @@ define run_manual_pdf_worker
|
|
|
382
383
|
if test -n "$(UNALTRAWEB_WORKER_TOKEN)"; then runtime_dir="$(PROJECT_ROOT)/tmp/.unaltraweb/manual-pdf"; mkdir -p "$$runtime_dir"; cidfile="$$runtime_dir/worker-$(UNALTRAWEB_WORKER_TOKEN).cid"; rm -f "$$cidfile"; set -- --cidfile "$$cidfile"; fi; \
|
|
383
384
|
mount=$$(/bin/sh "$(DOCKER_MOUNT_SCRIPT)" "$(PROJECT_ROOT)" /project); \
|
|
384
385
|
trap 'test -z "$$cidfile" || rm -f "$$cidfile"' EXIT; \
|
|
385
|
-
docker
|
|
386
|
+
identity=$$(docker image inspect "$(MANUAL_PDF_IMAGE)" --format '{{.Id}}'); \
|
|
387
|
+
docker run --rm --pull never --network none --cpus 2 --memory 2g --pids-limit 256 "$$@" $(WORKER_LABEL_ARGS) --user "$(LOCAL_UID):$(LOCAL_GID)" -e HOME=/tmp -e "UNALTRAWEB_MANUAL_RELEASE_SELECTOR=$${MANUAL_RELEASE_SELECTOR}" --mount "$$mount" -w /project "$$identity" $(1) --project /project $(if $(strip $(MANUAL_PDF_LANG)),--language "$(MANUAL_PDF_LANG)",) $(2)
|
|
386
388
|
endef
|
|
387
389
|
|
|
388
390
|
manual-pdf-preflight: ## Run required PDF gates without contaminating the worker JSON stream
|
|
389
391
|
@$(MAKE) --silent --no-print-directory manual-compute-check >/dev/null
|
|
390
392
|
@$(MAKE) --silent --no-print-directory web-capture-check >/dev/null
|
|
391
|
-
@docker image inspect "$(MANUAL_PDF_IMAGE)" >/dev/null 2>&1 || docker pull "$(MANUAL_PDF_IMAGE)" >/dev/null
|
|
393
|
+
@docker image inspect "$(MANUAL_PDF_IMAGE)" >/dev/null 2>&1 || { if test "$${UNALTRAWEB_MANAGED_RUNTIME:-0}" = 1; then printf '%s\n' 'Selected PDF image is not prepared; managed execution never pulls' >&2; exit 1; fi; docker pull "$(MANUAL_PDF_IMAGE)" >/dev/null; }
|
|
392
394
|
|
|
393
395
|
manual-pdf-status: ## Inspect manual PDF configuration and artefacts without Docker, network, or writes
|
|
394
396
|
@UNALTRAWEB_MANUAL_RELEASE_SELECTOR="$${MANUAL_RELEASE_SELECTOR}" $(PYTHON) "$(CURDIR)/scripts/manual/build_pdf.py" status --project "$(PROJECT_ROOT)" $(if $(strip $(MANUAL_PDF_LANG)),--language "$(MANUAL_PDF_LANG)",)
|
|
@@ -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
|
-
|
|
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,12 +25,40 @@ The template is the better place to validate gem consumption, centralized styles
|
|
|
25
25
|
|
|
26
26
|
## Component Contract
|
|
27
27
|
|
|
28
|
-
###
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
[
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
### Published 0.7.0 release
|
|
29
|
+
|
|
30
|
+
[**0.7.0**](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.7.0)
|
|
31
|
+
adds [live instance identity and session-scoped
|
|
32
|
+
resource control]({{ '/live-runtime/' | relative_url }}). Preparation is explicit,
|
|
33
|
+
launch is pull-never, and startup identity remains distinct from current disk
|
|
34
|
+
metadata. The owner-tested rendering closure selects Diavisuals 0.5.0 and Vega
|
|
35
|
+
0.5.1 with exact artifacts; old 0.4.0 static receipts remain integrity-checked.
|
|
36
|
+
The selected Diavisuals 0.5.0 lacks full live-process identity. The provider's
|
|
37
|
+
[0.6.0 correction](https://github.com/dosquartsdedocs/diavisuals/releases/tag/v0.6.0)
|
|
38
|
+
is published, but remains outside this tested Web combination. Full managed
|
|
39
|
+
coordinator acceptance requires composing-owner validation and a new reviewed
|
|
40
|
+
helper selection.
|
|
41
|
+
|
|
42
|
+
Gem, wheel, base runtime and MCP were produced from
|
|
43
|
+
`b44818c67eecef159f7aa0f825b0416cd511bc43`; receipt integration and tag target
|
|
44
|
+
`9fc84ac7fd01c78c6fe15fe862beb6a5d1633a9e` bind the same-source candidates.
|
|
45
|
+
The post-release checkout launcher selects
|
|
46
|
+
`sha256:b84cdb404ba7bab5ff0b14fa8a7ee93d7293e829cf32e28ff0dacaa8afff4677`.
|
|
47
|
+
Signed-byte D0 acceptance, the retained-letter relocation/rebuild and all four
|
|
48
|
+
populated Bundler roundtrips passed. Public downloads match the receipt.
|
|
49
|
+
The [delivery report](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/owner-closeout-85.md)
|
|
50
|
+
records exact identities and the remaining gates; the
|
|
51
|
+
[D0 owner contract](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/d0-runtime-identity.md)
|
|
52
|
+
defines the native API and lifecycle scopes.
|
|
53
|
+
|
|
54
|
+
### Previous 0.6.0 release
|
|
55
|
+
|
|
56
|
+
[**0.6.0**](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.6.0)
|
|
57
|
+
delivers native [retained-letter import]({{ '/retained-documents/' | relative_url }}).
|
|
58
|
+
Gem, wheel, base runtime and MCP were published from
|
|
59
|
+
`de52db351490e94939aac20c6af264f22a6a1678`; receipt-only integration and tag target
|
|
60
|
+
`ec6dcb28e890d32718aa173934527a7b4213a042` bind their verified bytes.
|
|
61
|
+
The consumer core selects reviewed integration
|
|
34
62
|
`5cf9817489c8dc47cee726bfe42fe3071cd32b85`; the PDF 0.6.0 worker is already
|
|
35
63
|
published, signed and tested at immutable digest
|
|
36
64
|
`sha256:0ba267cb87f53ebaca4e31805fe00610cd61fdf97a8d2c3692f4655700dceaed`.
|
|
@@ -38,12 +66,14 @@ The PDF worker changes to include complete retained documents and the same
|
|
|
38
66
|
integrity checkers used by its controller. Computation, capture and visual
|
|
39
67
|
companions retain their tested 0.4.0 selections.
|
|
40
68
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
[
|
|
46
|
-
records the
|
|
69
|
+
That release's post-release checkout launcher selected MCP digest
|
|
70
|
+
`sha256:736c4ddd0a543454e3edaeac2e9cfd97a1279ce472923ac54e326c1281b2ba05`.
|
|
71
|
+
Signed candidates, protected CI, strict receipt/ancestry gates, registry promotion
|
|
72
|
+
and Trusted Publishing passed. Anonymous downloads match the receipt. The
|
|
73
|
+
[delivery report](https://github.com/dosquartsdedocs/unaltraweb/blob/main/docs/agents/owner-closeout-80.md)
|
|
74
|
+
records the installed Carta relocation proof and four-profile populated-cache
|
|
75
|
+
roundtrip against those exact bytes. Existing clients keep their loaded image
|
|
76
|
+
until reconnecting; real consumer adoption remains explicit.
|
|
47
77
|
|
|
48
78
|
### Published 0.5.1 release
|
|
49
79
|
|
|
@@ -53,7 +83,7 @@ state. Source `aab5a7b030cd711b40770a3f44ad3a356eab90da` produced the signed
|
|
|
53
83
|
images and verified gem/wheel. Receipt/tag commit
|
|
54
84
|
`e842c733c8a274279dd5efdc3618e20669f29037` changes only the receipt from that
|
|
55
85
|
first parent. Strict release/publication gates passed before promotion, and
|
|
56
|
-
anonymous registry downloads match the receipt.
|
|
86
|
+
anonymous registry downloads match the receipt. That release's launcher selected
|
|
57
87
|
`ghcr.io/dosquartsdedocs/unaltraweb-mcp@sha256:908b4ce54c7bdf355e14ed55b31ed4b9baae319e211af90004a680d1d1cb8692`.
|
|
58
88
|
|
|
59
89
|
The four-profile populated-cache roundtrip also passed against the actual signed
|
|
@@ -91,25 +121,25 @@ candidate, receipt, tag and package evidence.
|
|
|
91
121
|
|
|
92
122
|
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`.
|
|
93
123
|
|
|
94
|
-
The selected public core release is `0.
|
|
124
|
+
The selected public core release is `0.7.0`; earlier distributions remain immutable. Its BOM reuses immutable PDF, 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.
|
|
95
125
|
|
|
96
126
|
## Docker-First Hybrid Policy
|
|
97
127
|
|
|
98
|
-
### 0.
|
|
128
|
+
### 0.7.0 component selection
|
|
99
129
|
|
|
100
|
-
The coordinated core identity is **0.
|
|
130
|
+
The coordinated core identity is **0.7.0**: gem, wheel, base runtime and MCP
|
|
101
131
|
images were published together. The installed host launcher and runtime-aware
|
|
102
|
-
generated Bundler state are included. The
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
still require the coordinated version.
|
|
106
|
-
unchanged. Signed image/package evidence is recorded in the 0.
|
|
132
|
+
generated Bundler state are included. The PDF worker uses its reviewed, signed
|
|
133
|
+
0.6.0 digest, alongside the 0.4.0 computation/capture workers and the accepted
|
|
134
|
+
Diavisuals 0.5.0 / Vega 0.5.1 rendering combination. A released PDF can be reused
|
|
135
|
+
only by full digest; new/pending workers still require the coordinated version.
|
|
136
|
+
Earlier receipts remain unchanged. Signed image/package evidence is recorded in the 0.7.0 receipt;
|
|
107
137
|
promotion and anonymous-download checks passed before the post-release launcher
|
|
108
138
|
pin was advanced.
|
|
109
139
|
|
|
110
140
|
### Local delivery
|
|
111
141
|
|
|
112
|
-
GHCR is the canonical delivery channel for normal local use. The released package scaffold selects `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.
|
|
142
|
+
GHCR is the canonical delivery channel for normal local use. The released package scaffold selects `ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.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.
|
|
113
143
|
|
|
114
144
|
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.
|
|
115
145
|
|
|
@@ -139,7 +169,7 @@ unaltraweb-mcp-docker serve --project /absolute/consumer
|
|
|
139
169
|
```
|
|
140
170
|
|
|
141
171
|
The installed default selects its package's full MCP release image, currently
|
|
142
|
-
`ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.
|
|
172
|
+
`ghcr.io/dosquartsdedocs/unaltraweb-mcp:0.7.0`. It resolves that selection to the
|
|
143
173
|
local immutable image ID before executing. The checkout's `MCP_RELEASE_IMAGE`
|
|
144
174
|
is a separate digest pin advanced only after publication; it is not the installed
|
|
145
175
|
wheel's default. This avoids sending a new package back to an older MCP while
|
|
@@ -284,7 +314,7 @@ For that reason:
|
|
|
284
314
|
|
|
285
315
|
## Docker Runtime
|
|
286
316
|
|
|
287
|
-
Release `0.
|
|
317
|
+
Release `0.7.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`.
|
|
288
318
|
|
|
289
319
|
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.
|
|
290
320
|
|
|
@@ -19,7 +19,7 @@ provenance needed to inspect its origin. The importer keeps that complete unit i
|
|
|
19
19
|
the receiving repository and creates a native page or chapter referencing the PDF.
|
|
20
20
|
The website displays the original; a manual PDF includes all its pages.
|
|
21
21
|
|
|
22
|
-
This capability
|
|
22
|
+
This capability ships in **0.6.0**. It requires a
|
|
23
23
|
containing Python package and Jekyll core, plus the matching PDF worker for manual
|
|
24
24
|
output. The published 0.5.1 runtime predates it. Changing the global MCP selection
|
|
25
25
|
does not update a site's Gemfile, Makefile or PDF-worker selection.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Inspect And Close A Live MCP Session
|
|
3
|
+
description: Startup identity, exact prepared images and session-scoped resource release.
|
|
4
|
+
lang: en
|
|
5
|
+
ref: live_runtime_identity
|
|
6
|
+
profiles:
|
|
7
|
+
- unaltredocs
|
|
8
|
+
documentation_profiles:
|
|
9
|
+
- local-authors
|
|
10
|
+
- core-developers
|
|
11
|
+
section: Core Development
|
|
12
|
+
weight: 635
|
|
13
|
+
permalink: /live-runtime/
|
|
14
|
+
nav_title: Live Runtime
|
|
15
|
+
---
|
|
16
|
+
|
|
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
|
|
19
|
+
the installed package, source checkout and rendering workers. Call
|
|
20
|
+
`runtime_identity` or read `web://runtime-identity` through that live MCP
|
|
21
|
+
connection. Both report the same backend instance and startup information.
|
|
22
|
+
|
|
23
|
+
The observation includes the loaded package version, startup code fingerprint,
|
|
24
|
+
current disk fingerprint, interpreter, PID/start information, workspace mapping
|
|
25
|
+
and selected versus observed image identities. A disk edit is reported as drift;
|
|
26
|
+
it does not upgrade an already-running process. Docker-host and container PID
|
|
27
|
+
namespaces are reported separately. Identity checks read engine/runtime metadata,
|
|
28
|
+
not website prose, private records or arbitrary environment variables.
|
|
29
|
+
|
|
30
|
+
## Prepare Explicitly, Then Launch
|
|
31
|
+
|
|
32
|
+
Use `unaltraweb-mcp-docker prepare --image REF` to acquire a selected release.
|
|
33
|
+
Launch, check, smoke and identity observations do not build or pull missing images.
|
|
34
|
+
For a managed launch, supply a full image ID or repository digest, or bind a local
|
|
35
|
+
reference to its independently verified configuration ID:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
unaltraweb-mcp-docker serve --project /absolute/site \
|
|
39
|
+
--image "$PREPARED_REFERENCE" --expected-image-id "$EXPECTED_IMAGE_ID" --managed
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The expected value is Docker's full `sha256:` configuration ID, not the archive
|
|
43
|
+
checksum or OCI index digest. A missing or mismatched selection is an error.
|
|
44
|
+
Execution uses that inspected ID with `--pull never`; existing aliases are not
|
|
45
|
+
rewritten. Add `--offline` for a controller without networking. The declared
|
|
46
|
+
Docker socket remains available for local inspection and prepared workers.
|
|
47
|
+
|
|
48
|
+
The normal host launcher mounts the canonical site path and a `/workspace` alias.
|
|
49
|
+
A launcher itself running in a container must supply its explicit daemon-host
|
|
50
|
+
mapping using `--host-project`. Unsupported direct controller mappings require
|
|
51
|
+
inspection rather than guessing a host path from `/workspace`.
|
|
52
|
+
|
|
53
|
+
## Close One Connection Safely
|
|
54
|
+
|
|
55
|
+
1. Retain the identity's consumer binding, session ID and exact container ID.
|
|
56
|
+
2. Call `runtime_drain(confirm=true)`. The backend stops admitting new operations.
|
|
57
|
+
3. Close that stdio connection. Bounded active work finishes before its idle
|
|
58
|
+
session resources are released.
|
|
59
|
+
4. Use the installed `session-status` command to confirm resource termination.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
unaltraweb-mcp-docker session-status --project /absolute/site \
|
|
63
|
+
--session-id "$SESSION_ID" --container-id "$CONTAINER_ID"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`connected`, `busy`, `orphaned` and `unknown` do not mean resources are free.
|
|
67
|
+
Only `stopped` with `resources_released=true` establishes observed absence.
|
|
68
|
+
After a crash, `reap-session` with the same retained tuple can recover eligible
|
|
69
|
+
idle leftovers. It preserves live backends, active jobs, other sessions, prepared
|
|
70
|
+
images, volumes and authored files. Disk cleanup remains explicit and separate.
|
|
71
|
+
|
|
72
|
+
The older `down` command is workspace-wide, and `mcp-down-all` is factory-wide.
|
|
73
|
+
Use them only for those intended scopes, not as a substitute for closing one
|
|
74
|
+
client. The managed stdio profile has one connection per backend; it does not
|
|
75
|
+
claim shared-HTTP backend reattachment semantics.
|
|
76
|
+
|
|
77
|
+
## Workers And Helpers
|
|
78
|
+
|
|
79
|
+
Worker references are fixed at startup. Managed rendering requires those exact
|
|
80
|
+
images to be prepared; it refuses a fallback pull/build or a conflicting authored
|
|
81
|
+
computation-image choice. The identity reports resource bounds and image
|
|
82
|
+
observations without running a renderer.
|
|
83
|
+
|
|
84
|
+
Visual helpers are separate MCP processes. Their versions and immutable package
|
|
85
|
+
selections describe the accepted rendering closure, not their current live
|
|
86
|
+
instances. The composing controller must obtain each helper's own live identity.
|
|
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.
|
|
91
|
+
Existing 0.4.0 static provider receipts remain subject to full integrity checks
|
|
92
|
+
and do not force regeneration of authored figures during an upgrade.
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# D0 native runtime identity and lifecycle — issue 85
|
|
2
|
+
|
|
3
|
+
Requirements: gaContExt
|
|
4
|
+
`5634ea2e3e42122bb365992dfca9f248feb89dec`,
|
|
5
|
+
[NATIVE_RUNTIME_REQUIREMENTS.md](https://github.com/dosquartsdedocs/gacontext/blob/5634ea2e3e42122bb365992dfca9f248feb89dec/src/bash/mcp_factories/NATIVE_RUNTIME_REQUIREMENTS.md).
|
|
6
|
+
Owner issue: [85](https://github.com/dosquartsdedocs/unaltraweb/issues/85).
|
|
7
|
+
Coordination: [gaContExt 15](https://github.com/dosquartsdedocs/gacontext/issues/15).
|
|
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
|
+
|
|
14
|
+
## Native API mapping
|
|
15
|
+
|
|
16
|
+
The containing 0.7.0 increment adds `runtime_identity` and
|
|
17
|
+
`web://runtime-identity` on the actual serving MCP instance. Both use one
|
|
18
|
+
startup-created object, not a helper CLI. It records a random backend instance,
|
|
19
|
+
process PID/start ticks/PID namespace, start time, interpreter, loaded package
|
|
20
|
+
version and startup package fingerprint. Current bounded package bytes and
|
|
21
|
+
metadata are separate observations; changing metadata cannot rename the loaded
|
|
22
|
+
version. Only engine code/contracts and allowlisted runtime selections are read,
|
|
23
|
+
not site content or arbitrary environment values.
|
|
24
|
+
|
|
25
|
+
The identity's component/profile/selection hashes bind the fixed requirements,
|
|
26
|
+
startup BOM, behavioral profile, worker selections and consumer mapping. The
|
|
27
|
+
package fingerprint is a startup code-content observation, not a wheel checksum
|
|
28
|
+
or a permanent process attestation. The live container's image ID, source label,
|
|
29
|
+
limits and mount mapping are inspected separately. Its daemon-host init PID is
|
|
30
|
+
not compared numerically with the inner serving PID. Session ID, exact container
|
|
31
|
+
ID, factory/role/project labels and mapping correlate those namespaces.
|
|
32
|
+
|
|
33
|
+
`runtime_drain(confirm=true)` freezes admission on that connection. Ordinary
|
|
34
|
+
tools execute in a bounded one-operation lane, leaving identity/drain responsive
|
|
35
|
+
while a worker runs. Closing stdio waits for active work and releases that
|
|
36
|
+
session's idle preview/capture resources. A new connection creates a new backend
|
|
37
|
+
instance. This profile is **one stdio connection per backend**, not a shared HTTP
|
|
38
|
+
service: shared-backend reattachment/idle leases are not claimed.
|
|
39
|
+
|
|
40
|
+
Host-side installed API:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
unaltraweb-mcp-docker prepare --image REF [--expected-image-id SHA256_ID]
|
|
44
|
+
unaltraweb-mcp-docker serve --project ROOT --image REF --expected-image-id SHA256_ID --managed
|
|
45
|
+
unaltraweb-mcp-docker session-status --project ROOT --session-id SESSION --container-id CONTAINER
|
|
46
|
+
unaltraweb-mcp-docker reap-session --project ROOT --session-id SESSION --container-id CONTAINER
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Preparation may acquire the explicitly selected image. Launch/check/smoke never
|
|
50
|
+
build or pull; execution uses its inspected exact configuration ID with
|
|
51
|
+
`--pull never`. Managed mutable aliases require the expected full image ID.
|
|
52
|
+
Full local IDs and repository digests are immutable selections. Ordinary mutable
|
|
53
|
+
local selections without an expected ID remain an explicitly weaker mode.
|
|
54
|
+
Archive hashes, repository/index digests and Docker configuration IDs are distinct.
|
|
55
|
+
|
|
56
|
+
`--offline` disables controller networking; the explicitly mounted local Docker
|
|
57
|
+
socket still permits image/owned-container inspection. Preview HTTP probing and
|
|
58
|
+
intentional external metrics calls need their documented network access.
|
|
59
|
+
`--worker-images` accepts bounded JSON mapping supported worker names to exact
|
|
60
|
+
`reference` / `expected_image_id` pairs. Otherwise startup BOM/dedicated image
|
|
61
|
+
environment selections apply. Managed execution refuses missing/mismatched
|
|
62
|
+
workers and never substitutes a preparation build/pull. Authored computation
|
|
63
|
+
image choices must match the approved startup identity before execution.
|
|
64
|
+
|
|
65
|
+
The normal host launcher canonicalizes the consumer and binds it at its canonical
|
|
66
|
+
path and `/workspace`. A containerized launcher must supply `--host-project` (or
|
|
67
|
+
its explicit inherited daemon mapping); the child uses that verified canonical
|
|
68
|
+
mirror. Identity reports launcher-visible, daemon-host and effective paths.
|
|
69
|
+
Other direct controller layouts are not silently inferred. In particular,
|
|
70
|
+
[issue 31](https://github.com/dosquartsdedocs/unaltraweb/issues/31) remains a separate
|
|
71
|
+
boundary for arbitrary direct `/workspace` controllers and is not automatically
|
|
72
|
+
closed by this profile.
|
|
73
|
+
|
|
74
|
+
## Resource ownership
|
|
75
|
+
|
|
76
|
+
Each launch has a 32-hex session ID and a uniquely named owned stdio container.
|
|
77
|
+
Previews are per-session for these backends. Worker invocation tokens are retained
|
|
78
|
+
and augmented with session labels. Cleanup validates full IDs and ownership and
|
|
79
|
+
confirms absence before claiming release. Image and volume removal is outside
|
|
80
|
+
these APIs.
|
|
81
|
+
|
|
82
|
+
After EOF or a crash, the caller uses the **retained** binding/session/container
|
|
83
|
+
tuple with `session-status`. A live backend is `connected`; a running one-shot
|
|
84
|
+
worker is `busy`; idle leftovers are `orphaned`; only proven absence is `stopped`
|
|
85
|
+
with `resources_released=true`. Unavailable/changed ownership is `unknown` and
|
|
86
|
+
does not authorize removal. `reap-session` preserves a live backend or running
|
|
87
|
+
job, and recovers only that retired session's idle resources. Occupied or foreign
|
|
88
|
+
networks fail closed. No fresh-helper PID is presented as the backend's PID.
|
|
89
|
+
|
|
90
|
+
The legacy `down` / `make mcp-down` is an explicit **workspace-wide** shutdown;
|
|
91
|
+
`mcp-down-all` is maintainer/factory-wide. Neither is the hub's per-client toggle
|
|
92
|
+
operation. The managed sequence is live drain, close this transport, inspect its
|
|
93
|
+
exact retained identity, and recover eligible orphans when necessary.
|
|
94
|
+
|
|
95
|
+
The profile reports controller limits (2 CPUs, 4 GiB, 512 PIDs), preview/PDF/capture
|
|
96
|
+
limits (2 CPUs, 2 GiB, 256 PIDs), and managed computation limits (4 CPUs, 8 GiB,
|
|
97
|
+
512 PIDs). Existing per-invocation time bounds remain 1800 seconds for PDF/compute
|
|
98
|
+
and 900 for captures; requests may compose several bounded jobs. Per-backend
|
|
99
|
+
operation concurrency is one. A drain does not falsely claim immediate RAM/CPU
|
|
100
|
+
release while a job continues.
|
|
101
|
+
|
|
102
|
+
## Accepted visual-helper points and remaining closure blocker
|
|
103
|
+
|
|
104
|
+
Release 0.7.0 selects the published Diavisuals 0.5.0 and Vega 0.5.1 packages:
|
|
105
|
+
|
|
106
|
+
| Helper | Wheel SHA-256 | Renderer configuration ID |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| Diavisuals 0.5.0 | `f52e20f20f1fb3a2418f07adb8d6a68a5567d0c321fb7c0ccc0f4db04917b96b` | `sha256:5a6887b372a0e1c386a7b54981d11ae1910215baeb6a12dfd0706b3e85ef0846` |
|
|
109
|
+
| Vega 0.5.1 | `5aba4f267a37179c520b3cd164e1cec62ac5561872aa33b069cce73442dc52b1` | `sha256:695125943d0fbc3aa7c877babb9a11a6501bbc7ac265b0975bb5657c60439d98` |
|
|
110
|
+
|
|
111
|
+
Native selector mapping is Diavisuals `--runtime-image` plus
|
|
112
|
+
`--runtime-expected-id`, and Vega `--renderer-image-id`. Published metadata,
|
|
113
|
+
wheel/acceptance hashes and locally prepared renderer IDs were verified. Actual
|
|
114
|
+
Mermaid, PlantUML, Vega-Lite/CSV and Vega rendering passed native receipt checks,
|
|
115
|
+
tamper refusal and consumer relocation without rewriting renderer aliases.
|
|
116
|
+
Retained evidence: `/tmp/opencode/unaltraweb-d0-85/helpers-proof/evidence.json`.
|
|
117
|
+
|
|
118
|
+
Previously accepted **0.4.0 static receipts remain valid** under the unchanged
|
|
119
|
+
input/output/request integrity rules. This is an exact legacy point, not a
|
|
120
|
+
continuous version interval or permission to overwrite edited outputs. New work
|
|
121
|
+
uses the selected helper points. No existing client or real consumer is migrated
|
|
122
|
+
by this source change.
|
|
123
|
+
|
|
124
|
+
The coordinator does not claim to observe another MCP's serving process. Its live
|
|
125
|
+
identity returns the helper selections and requires their independent connection
|
|
126
|
+
observations. **Selected Diavisuals 0.5.0 lacks the full live-instance identity**.
|
|
127
|
+
[Diavisuals 14](https://github.com/dosquartsdedocs/diavisuals/issues/14#issuecomment-5987114002)
|
|
128
|
+
already records the provider correction in published **0.6.0**; the issue remains
|
|
129
|
+
open for intake. That newer provider is outside unaltraweb 0.7.0's tested helper
|
|
130
|
+
point. The remaining gate is composing-owner compatibility acceptance and a new
|
|
131
|
+
reviewed selection of the corrected helper, followed by independent live
|
|
132
|
+
observations. It is not an unpublished provider implementation. Rendering
|
|
133
|
+
compatibility alone does not make the coordinator dependency graph managed-ready.
|
|
134
|
+
|
|
135
|
+
## Acceptance and delivery state
|
|
136
|
+
|
|
137
|
+
`test/d0_runtime_smoke.py` exercises installed launchers, actual images, tool/resource
|
|
138
|
+
agreement, independent consumers, reconnect, running-container metadata drift,
|
|
139
|
+
busy drain, offline launch, wrong/missing image refusal, manual/web work and
|
|
140
|
+
0.6.0 → containing 0.7.0 → 0.6.0 activation with retained authored/generated state.
|
|
141
|
+
The published 0.6.0 point accurately remains **partial** for live identity; no
|
|
142
|
+
fixture or relabelled package is counted as a second D0-capable release.
|
|
143
|
+
Backend-crash/orphan recovery is exercised separately from graceful disconnect.
|
|
144
|
+
The existing Carta and populated Bundler acceptance drivers remain release gates.
|
|
145
|
+
|
|
146
|
+
This is owner development evidence until reviewed source, containing release
|
|
147
|
+
receipts, installed signed-byte acceptance and remaining blockers are returned to
|
|
148
|
+
the central issue. Published 0.6.0 and its active checkout launcher pin remain
|
|
149
|
+
unchanged during candidate development. The worker/data choices and external
|
|
150
|
+
Diavisuals identity blocker must remain visible in the hub's adapter decision.
|
|
151
|
+
|
|
152
|
+
## Retained local acceptance — 2026-10-05
|
|
153
|
+
|
|
154
|
+
The owner explicitly authorized the full 0.7.0 review/PR/integration, gated
|
|
155
|
+
publication and post-release pin flow. No other checkout is a write workspace.
|
|
156
|
+
|
|
157
|
+
The installed local wheel
|
|
158
|
+
`67689b76225511439175c82b6df033005d84e990b147b8fa4875f3adbd7d684f` and owned MCP
|
|
159
|
+
image `sha256:d8eafba61a2e1f02bc22b244610d8174879e04d9ea36b47a71e8cd7f993a54b1`
|
|
160
|
+
passed eight stages: reconnect/scope, loaded-versus-disk, busy drain, backend
|
|
161
|
+
crash recovery, offline launch, explicit daemon mapping, wrong worker and missing
|
|
162
|
+
worker. The crash record observed a real PDF job still **busy** after backend
|
|
163
|
+
death, then confirmed eligible recovery and resource absence. The other live
|
|
164
|
+
instance was preserved. The published 0.6.0 A/B/A point remained explicitly
|
|
165
|
+
partial for live identity; authored files and its old cache entries kept their
|
|
166
|
+
hashes. This is prepared development evidence, not a signed release identity.
|
|
167
|
+
|
|
168
|
+
| Local retained evidence under `/tmp/opencode/unaltraweb-d0-85/` | SHA-256 |
|
|
169
|
+
| --- | --- |
|
|
170
|
+
| `acceptance-final/evidence.json` | `e35457153c5ffe98b4bd231f608735a2c4ad07e9db756699d7446e06e6b0b9c7` |
|
|
171
|
+
| `helpers-proof/evidence.json` | `df994ccd8afaff45a7e3cfa9b6a29b650c9d01d63db2c9c36e59c31834273473` |
|
|
172
|
+
| `carta-proof/evidence.json` | `ac305ad222a792291ebd27679a72a37a3ff29ab4746301ed9db7f64705ca4755` |
|
|
173
|
+
| `bundler-proof/evidence.json` | `b304c4c5abe45ae9295f6eba86eae36be92e348e6be33463fcb50e119550d341` |
|
|
174
|
+
|
|
175
|
+
The Carta proof retains the published sender seal and unchanged original PDF,
|
|
176
|
+
removes the copied producer, relocates the receiver and forces another PDF build.
|
|
177
|
+
Both 11-page manuals have SHA-256
|
|
178
|
+
`46e50f815c007a97ac59898194023de3fa4e916e77e7eac21b73f8792244713c`; the letter is
|
|
179
|
+
on page 10. The four-profile populated Bundler regression passed 0.4.0 → prepared
|
|
180
|
+
0.7.0 → 0.4.0, preserving all six tracked author/cache checksums and separately
|
|
181
|
+
reproducing the known unpatched 0.5.0 failure. No caches were cleared.
|
|
182
|
+
|
|
183
|
+
Review additionally tightened Docker absence classification: an unavailable
|
|
184
|
+
daemon socket is **unknown**, not evidence that a container was removed. That
|
|
185
|
+
source-only correction has a dedicated regression; final release acceptance must
|
|
186
|
+
be repeated against the actual source-bound candidates after integration.
|
|
187
|
+
|
|
188
|
+
The local suite passes 608 tests with 30 optional/environment skips. Distribution,
|
|
189
|
+
workflow, fresh-wheel and extracted-gem gates pass, as do the real MCP smoke,
|
|
190
|
+
manual preparation, docs build, prose checks and whitespace checks. These checks
|
|
191
|
+
do not override the separate signed-candidate/publication gates or the external
|
|
192
|
+
helper-process blocker.
|
|
193
|
+
|
|
194
|
+
## Reviewed core selection
|
|
195
|
+
|
|
196
|
+
Implementation `0c87e8c276e58ac9c747833df69cdb439aa6132b` was reviewed and
|
|
197
|
+
integrated through [PR 87](https://github.com/dosquartsdedocs/unaltraweb/pull/87)
|
|
198
|
+
as `216ab2e8b6b8b45a5bb7da0a54bffd10edee895d`. Protected PR CI
|
|
199
|
+
[37271200816](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37271200816)
|
|
200
|
+
and CodeQL [37271200817](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37271200817)
|
|
201
|
+
passed. The recorded review is agent-attributed.
|
|
202
|
+
|
|
203
|
+
The next candidate source pins that integrated core and authorizes gem, wheel,
|
|
204
|
+
runtime and MCP as `ready` for same-source candidate preparation. The selected
|
|
205
|
+
signed PDF 0.6.0 and computation/capture 0.4.0 workers remain unchanged: the new
|
|
206
|
+
selection/lifecycle behavior is controller-owned. Strict receipt, ancestry,
|
|
207
|
+
candidate, installed-byte and publication gates still apply. This readiness is
|
|
208
|
+
for the containing owner release, not approval of the full managed coordinator
|
|
209
|
+
closure while the external Diavisuals identity gap remains.
|