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
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Independent PDF worker provenance — issue 86
|
|
2
|
+
|
|
3
|
+
[Owner issue 86](https://github.com/dosquartsdedocs/unaltraweb/issues/86) records
|
|
4
|
+
TIG's failed latest deployment at consumer
|
|
5
|
+
`a87eb4fc7fe58f072413a99356d2465b36d05136`. Its published PDF 0.5.0 was produced
|
|
6
|
+
from `d857f8c9f5fea90cf450c0b30b4e77a37b541275`, whereas its reusable workflow
|
|
7
|
+
was pinned to `02af70001bf8085af860fd57f8d7e75ec96a89c7`. Comparing those two
|
|
8
|
+
different component identities blocked the build before Pages publication.
|
|
9
|
+
|
|
10
|
+
The original gates were re-executed with real published images: canonical 0.5.0,
|
|
11
|
+
0.5.1 and 0.7.0 tuples fail; the 0.6.0 tuple passes because its two revisions
|
|
12
|
+
happen to coincide. Retained diagnostic evidence is
|
|
13
|
+
`/tmp/opencode/unaltraweb-deploy-86/matrix/evidence.json`, SHA-256
|
|
14
|
+
`8640b7b68456b1bce42b9a0a271fe1c4853fde181eff9b3a130c990bd119142f`.
|
|
15
|
+
|
|
16
|
+
## Corrected trust binding
|
|
17
|
+
|
|
18
|
+
The reviewed provider workflow now owns these exact digest/producer records:
|
|
19
|
+
|
|
20
|
+
| PDF worker | OCI digest | Producer commit |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| 0.5.0 | `sha256:9e0b3a45753c170b795e9a9d6df61580085c113436beac5bf6c8de69b6562097` | `d857f8c9f5fea90cf450c0b30b4e77a37b541275` |
|
|
23
|
+
| 0.6.0 | `sha256:0ba267cb87f53ebaca4e31805fe00610cd61fdf97a8d2c3692f4655700dceaed` | `5cf9817489c8dc47cee726bfe42fe3071cd32b85` |
|
|
24
|
+
|
|
25
|
+
Both references use the fixed repository
|
|
26
|
+
`ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf`. The gate first checks the defining
|
|
27
|
+
provider repository and full workflow SHA, rejects an unrecorded digest before
|
|
28
|
+
Docker access, pulls the exact digest and compares its actual revision label
|
|
29
|
+
with the recorded producer. The worker may have been released before the workflow.
|
|
30
|
+
The expected producer is not an input supplied by the consumer, and an inherited
|
|
31
|
+
environment value cannot replace it. Failed pull/inspection stops the step.
|
|
32
|
+
|
|
33
|
+
The deployment's reviewed-main guard, input interface and publication checks are
|
|
34
|
+
unchanged. The gate uses the already-reviewed immutable artifact identity; this
|
|
35
|
+
change does not introduce or claim a new live signature-verification service.
|
|
36
|
+
Release preparation's existing signed-image evidence remains separate.
|
|
37
|
+
|
|
38
|
+
Static workflow policy binds the whole gate, including its records and step
|
|
39
|
+
controls, to reviewed canonical JSON. It rejects disabled/error-tolerant gates
|
|
40
|
+
and refuses a BOM default whose worker has no approved record. A new worker
|
|
41
|
+
requires an explicit provider review, updated policy and published-image tests.
|
|
42
|
+
|
|
43
|
+
## Regression coverage
|
|
44
|
+
|
|
45
|
+
`test/test_deploy_provenance.py` executes the actual shell blocks from the reusable
|
|
46
|
+
workflow. Unit cases cover earlier legitimate producers, unknown digests with
|
|
47
|
+
plausible labels, mutable/foreign references, missing/wrong labels, a label that
|
|
48
|
+
matches the workflow instead of the worker, attempted expected-revision override,
|
|
49
|
+
foreign/unbound provider authority, pull/inspection failure and reviewed-main
|
|
50
|
+
ref/SHA rejection.
|
|
51
|
+
|
|
52
|
+
The independently gated Docker case executes real pulls and inspections for both
|
|
53
|
+
published workers against a later workflow revision. The ordinary CI distribution
|
|
54
|
+
job must run this case; static policy rejects silently disabling it:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
UNALTRAWEB_DEPLOY_PROVENANCE_DOCKER=1 PYTHONPATH=test \
|
|
58
|
+
python -m unittest test_deploy_provenance.PublishedDeployProvenanceTests
|
|
59
|
+
PYTHONPATH=src python3 -m unittest discover -s test -p 'test_*.py'
|
|
60
|
+
make workflow-check distribution-check
|
|
61
|
+
git diff --check
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Local checks passed 619 Python cases, with 30 optional/environment skips, plus
|
|
65
|
+
the explicitly enabled real-Docker case. The actual image configuration IDs were
|
|
66
|
+
`sha256:c1998dc3345444cb3994ac0cd649ad80ac88dde127dec1dd9f09c719aafe170a`
|
|
67
|
+
for PDF 0.5.0 and
|
|
68
|
+
`sha256:d7e7d3243616270fc9e6eed7f8238c412dbe3d9ffc18d2832d17d66ca630d139`
|
|
69
|
+
for PDF 0.6.0. These tests exercise provenance gates without deploying a consumer.
|
|
70
|
+
Protected PR/integration results and the exact delivery commit are recorded in
|
|
71
|
+
issue 86 after integration.
|
|
72
|
+
|
|
73
|
+
## Urgent consumer adoption
|
|
74
|
+
|
|
75
|
+
The owner authorized a reviewed workflow-only delivery, independently of a new
|
|
76
|
+
gem/wheel/image release. TIG can retain its approved 0.5.0 Gem/core, PDF digest
|
|
77
|
+
and Vega selection and change only the `deploy.uses` revision in
|
|
78
|
+
`.github/workflows/deploy.yml` to the corrected provider's immutable merge SHA.
|
|
79
|
+
This is a reviewed local caller override; a later scaffold update must preserve
|
|
80
|
+
or explicitly reconcile it rather than resetting it to an older packaged pin.
|
|
81
|
+
|
|
82
|
+
In the TIG checkout, open the integration PR, verify that the content remains at
|
|
83
|
+
its approved baseline, repeat the local publication checks, merge, then dispatch
|
|
84
|
+
with the exact newly reviewed `main` SHA. Confirm the hosted build, Pages site
|
|
85
|
+
and downloadable PDF. The provider gate proof alone does not replace TIG's full
|
|
86
|
+
311-page manual validation or successful hosted deployment.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Consolidated deployment integration — 0.7.1
|
|
2
|
+
|
|
3
|
+
Owner: [issue 93](https://github.com/dosquartsdedocs/unaltraweb/issues/93), following
|
|
4
|
+
the workflow-only [issue 86 correction](deploy-provenance-86.md). The owner
|
|
5
|
+
authorized implementation, review/integration and gated 0.7.1 publication.
|
|
6
|
+
Current source preparation is distinct from a published distribution; final
|
|
7
|
+
source, receipts, installed-byte evidence and publication are recorded in issue 93.
|
|
8
|
+
|
|
9
|
+
## One package-owned contract
|
|
10
|
+
|
|
11
|
+
The BOM now carries two additive schema-v1 fields:
|
|
12
|
+
|
|
13
|
+
- `consumer_integration.site_deploy_workflow_sha`, independent of the Gem's
|
|
14
|
+
`core_sha`. Legacy records default to their core revision.
|
|
15
|
+
- `deployment_contract`, with exact `manual_pdf_workers` digest/producer records
|
|
16
|
+
and bounded `caller_migrations` describing reviewed baseline/current hash pairs.
|
|
17
|
+
|
|
18
|
+
The package schema and semantic checks validate repository confinement, unique
|
|
19
|
+
records, nonzero identities, the selected PDF's membership and exact migration
|
|
20
|
+
identities. Existing packages, receipts and the issue-86 workflow pin remain
|
|
21
|
+
unchanged. PDF 0.6.0, computation/capture 0.4.0 and the accepted visual-helper
|
|
22
|
+
combination are reused rather than introducing additional component upgrades.
|
|
23
|
+
|
|
24
|
+
The workflow fetches at most 256 KiB of JSON from its **defining provider commit**
|
|
25
|
+
on the fixed canonical GitHub repository. It does not read a consumer-supplied
|
|
26
|
+
contract or producer SHA. Strict JSON rejects duplicate/non-finite values; records
|
|
27
|
+
have bounded inventory and exact digest/source syntax. Fetch, lookup, pull and
|
|
28
|
+
inspection failures stop publication. A selected immutable digest is checked
|
|
29
|
+
against its recorded producer, not a later workflow commit. Its temporary metadata
|
|
30
|
+
file is invocation-owned and removed on exit.
|
|
31
|
+
|
|
32
|
+
Static policy binds the generic gate code, while approved artifacts live in the
|
|
33
|
+
contract. Ready-source validation resolves the actual workflow Git pin, checks
|
|
34
|
+
its gate and compares its own producer record with the package selection.
|
|
35
|
+
The CI Docker test additionally creates a package caller and executes the
|
|
36
|
+
preflight blocks of the workflow that caller really selects. Checking only the
|
|
37
|
+
current checkout's YAML is insufficient.
|
|
38
|
+
|
|
39
|
+
## Reviewed hotfix migration
|
|
40
|
+
|
|
41
|
+
Only `.github/workflows/deploy.yml` is eligible for the issue-86 migration:
|
|
42
|
+
|
|
43
|
+
| Identity | SHA-256 |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Original package baseline | `a789870542614d5817d30ea4328c7d1ad38d27443c009c68a48ad5aaa3106b8e` |
|
|
46
|
+
| Exact reviewed one-line hotfix | `c632a548d0782867be20a2a52fe03469cf63066b7364bace77fd54a226cb3b18` |
|
|
47
|
+
|
|
48
|
+
Both must match. The dry-run lists `deploy-provenance-86` in `migrations`, proposes
|
|
49
|
+
the new package-generated caller and binds that authorization to `plan_sha256`.
|
|
50
|
+
The existing confinement, CAS rechecks, private staging, rollback and final
|
|
51
|
+
manifest commit remain in force. Any additional author edit remains a conflict;
|
|
52
|
+
removing the migration authority changes the plan hash. This is not a general
|
|
53
|
+
force-sync or semantic rewrite of authored workflow YAML.
|
|
54
|
+
|
|
55
|
+
## Acceptance stages
|
|
56
|
+
|
|
57
|
+
- Unit/schema/workflow tests cover independent core/workflow pins, legacy metadata,
|
|
58
|
+
invalid or ambiguous records, exact migration, preservation of additional edits,
|
|
59
|
+
plan binding, provider-only contract acquisition and fail-closed network/Docker
|
|
60
|
+
errors.
|
|
61
|
+
- `test/test_deploy_provenance.py` tests actual published PDF workers and a generated
|
|
62
|
+
caller's selected workflow. CI obtains the reviewed source SHA explicitly for
|
|
63
|
+
source-bound metadata access.
|
|
64
|
+
- `test/deployment_integration_smoke.py` uses installed launchers and owned synthetic
|
|
65
|
+
manuals: fresh, populated 0.5.0 upgrade and exact reviewed hotfix. It preserves
|
|
66
|
+
author/cache hashes, applies the reviewed plan, builds PDF/web, probes HTTP and
|
|
67
|
+
executes the exact remotely pinned workflow's source/provenance gates.
|
|
68
|
+
- Final acceptance must use the downloaded same-source wheel and signed MCP
|
|
69
|
+
candidate. The driver does not dispatch Pages or claim a hosted real-manual
|
|
70
|
+
deployment. TIG's authorized deployment is a separate consumer-session proof.
|
|
71
|
+
|
|
72
|
+
The implementation is integrated before the containing source selects its final
|
|
73
|
+
reviewed core/workflow revisions. Candidate components remain pending until that
|
|
74
|
+
selection; release readiness and publication keep their existing strict receipt,
|
|
75
|
+
ancestry, signing and immutable-byte gates.
|
|
76
|
+
|
|
77
|
+
## Reviewed source selection
|
|
78
|
+
|
|
79
|
+
Implementation `2133b8fa2f668e14d603a36d15584eed63e4386a` is integrated through
|
|
80
|
+
[PR 94](https://github.com/dosquartsdedocs/unaltraweb/pull/94) at
|
|
81
|
+
`2ff27f27c274eb09b2c53ef8bd374f333702d8ee`. PR CI `37526811887` and CodeQL
|
|
82
|
+
`37526811747` passed, including actual provider-record acquisition and generated
|
|
83
|
+
caller provenance checks. The review is agent-attributed.
|
|
84
|
+
|
|
85
|
+
The containing candidate now selects this integration for both independent
|
|
86
|
+
core/workflow fields and marks gem, wheel, runtime and MCP ready for same-source
|
|
87
|
+
candidate preparation. The selected workflow's own contract records the reused
|
|
88
|
+
PDF 0.6.0 producer correctly; no worker version change is needed.
|
|
89
|
+
|
|
90
|
+
Local source validation passed 629 cases with 31 optional/environment skips,
|
|
91
|
+
fresh-wheel and owned-image MCP checks/smoke, docs and prose checks. The installed
|
|
92
|
+
development new/upgrade/hotfix manual proof is retained at
|
|
93
|
+
`/tmp/opencode/unaltraweb-071-93/local-integration/evidence.json`, SHA-256
|
|
94
|
+
`d98c0fb56d2b74839a7132cc9dc7ab3f65a9802087837af1a13070a51316a14a`.
|
|
95
|
+
That development proof still used the earlier reviewed workflow pin; final
|
|
96
|
+
signed-candidate acceptance must exercise the now-selected integration above.
|
|
97
|
+
|
|
98
|
+
## Final-byte gate: retained-document worker closure
|
|
99
|
+
|
|
100
|
+
The first candidates from `b7ec1d7a139c65b3b0b88699cdbeb19080f13be1` passed normal
|
|
101
|
+
manual upgrades but failed retained-Carta freshness with the reused PDF 0.6.0.
|
|
102
|
+
The manifest fingerprints `artifact_imports.CHECKER_FILES`, including the changed
|
|
103
|
+
distribution module and component schema. Successful PDF generation alone was
|
|
104
|
+
not sufficient: the old worker and new controller calculated different identities.
|
|
105
|
+
Those first core candidates are retained diagnostic evidence and are not promoted
|
|
106
|
+
as the 0.7.1 release.
|
|
107
|
+
|
|
108
|
+
The signed PDF specialization already built/tested by run `37530306398` contains
|
|
109
|
+
the matching 0.7.1 checker closure:
|
|
110
|
+
`ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:1bb3f2dafd741e96c28639ec1cc8ccaeb81cbaa73e649f787c0b4ef59997bd4b`.
|
|
111
|
+
Its configuration ID is
|
|
112
|
+
`sha256:618163d3f924439792b2306617bd9612f566c5881166102fa544b4e782d569fa`,
|
|
113
|
+
its producer revision is the first candidate source above and its native package
|
|
114
|
+
reports 0.7.1. The changed checker files match the controller byte for byte.
|
|
115
|
+
|
|
116
|
+
A local controller overlay selecting only that exact worker passed the complete
|
|
117
|
+
Carta import, copied-producer retirement, receiver relocation and forced PDF
|
|
118
|
+
rebuild. Both 11-page PDFs have hash
|
|
119
|
+
`eb693ced023efafe36a926dd38a1bf1c85399a1b114551cc0ff32e652144c496`; original Carta
|
|
120
|
+
bytes remain unchanged. Diagnostic evidence:
|
|
121
|
+
`/tmp/opencode/unaltraweb-071-93/pdf071-carta-probe/evidence.json`, SHA-256
|
|
122
|
+
`c076f988e43ddb474132e58f5027931085bd734242757b84fb50289ef68cde25`.
|
|
123
|
+
The overlay is not a signed final MCP identity.
|
|
124
|
+
|
|
125
|
+
The worker record is integrated before a follow-up selection pins its containing
|
|
126
|
+
workflow and PDF. Core components return to pending during this preparation.
|
|
127
|
+
Ready-source CI now requires the exact selected core, controller and PDF worker
|
|
128
|
+
to agree on every retained-document checker file. This catches this class of
|
|
129
|
+
incompatibility before final publication; the final signed core candidates must
|
|
130
|
+
still repeat the complete composed acceptance.
|
|
131
|
+
|
|
132
|
+
The producer record and checker-closure regression were integrated through
|
|
133
|
+
[PR 96](https://github.com/dosquartsdedocs/unaltraweb/pull/96) at
|
|
134
|
+
`3332e0b93933f12317e05f1ce8d38ce80046feab`. This is the final reviewed core/workflow
|
|
135
|
+
selection. The tuple selects the verified PDF specialization above as 0.7.1,
|
|
136
|
+
published by its immutable digest, and the four core components return to ready.
|
|
137
|
+
Their new same-source candidates replace the rejected first core tuple in the
|
|
138
|
+
eventual release receipt. No earlier release or worker is overwritten.
|
data/docs/agents/mcp-contract.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# MCP Contract
|
|
2
2
|
|
|
3
|
+
The D0 additions ship in the published 0.7.0 runtime. Their pinned requirements,
|
|
4
|
+
exact API mapping, lifecycle scopes and external helper-identity blocker are
|
|
5
|
+
documented in [the owner contract](d0-runtime-identity.md). A source descriptor
|
|
6
|
+
does not upgrade an already-running 0.6.0 connection. Exact public identities and
|
|
7
|
+
installed acceptance are recorded in [the delivery report](owner-closeout-85.md).
|
|
8
|
+
|
|
3
9
|
`unaltraweb` exposes one global, on-demand stdio MCP server for website workspaces. Every client session starts an independently named Dockerized MCP process and mounts its current consumer project at `/workspace` and at its canonical host path. Stable factory, role, and project labels preserve project-scoped lifecycle control without forcing concurrent sessions to share a deterministic container name. The image includes both FastMCP and the Jekyll runtime, so the host does not need Python, the optional `mcp` package, Ruby, or Bundler.
|
|
4
10
|
|
|
5
11
|
The client registration should launch:
|
|
@@ -32,8 +38,8 @@ it to an image ID before execution. The source checkout's digest pin is separate
|
|
|
32
38
|
it advances only after a new receipt exists. Explicit `--image` (or the console
|
|
33
39
|
adapter's `UNALTRAWEB_MCP_IMAGE`) permits a reviewed immutable selection.
|
|
34
40
|
|
|
35
|
-
The post-release checkout pin selects published 0.
|
|
36
|
-
`sha256:
|
|
41
|
+
The post-release checkout pin selects published 0.7.0 MCP digest
|
|
42
|
+
`sha256:b84cdb404ba7bab5ff0b14fa8a7ee93d7293e829cf32e28ff0dacaa8afff4677`.
|
|
37
43
|
Existing processes keep their running image until clients reconnect. Site build
|
|
38
44
|
defaults and customized Makefiles remain separate, explicitly reviewed selections.
|
|
39
45
|
|
|
@@ -43,7 +49,7 @@ Repository editing coordination remains a control-plane responsibility rather th
|
|
|
43
49
|
|
|
44
50
|
For a new agent-driven workspace, create or select the empty Git repository first, open that directory in the IDE, register the factory, restart the client, and then call `new_web`. The tool remains confined to the configured project root and does not accept an arbitrary destination. Generated sites include user-owned `README.md` and `AGENTS.md`, profile-specific source directories, and a managed runtime baseline; `scaffold_sync` never rewrites those user-owned guidance or content files.
|
|
45
51
|
|
|
46
|
-
The native Python CLI remains modular. Without a factory checkout it supports `version`, `new-web`, top-level `doctor`, the host-only `import-calibre` command, and the exact package-only MCP inventory declared in `component-contract.json`. The complementary exact inventory fails clearly with `UNALTRAWEB_FACTORY_DIR` remediation. The separate Docker adapter delegates to the full image and does not expand that native inventory. The BOM selects
|
|
52
|
+
The native Python CLI remains modular. Without a factory checkout it supports `version`, `new-web`, top-level `doctor`, the host-only `import-calibre` command, and the exact package-only MCP inventory declared in `component-contract.json`. The complementary exact inventory fails clearly with `UNALTRAWEB_FACTORY_DIR` remediation. The separate Docker adapter delegates to the full image and does not expand that native inventory. The 0.7.0 BOM selects owner-tested `diavisuals v0.5.0` and `vegavisuals v0.5.1`; existing 0.4.0 static receipts retain their exact integrity-checked compatibility point. Its `consumer_integration` object is also the single source for the immutable core, workflow, PDF worker, and Vega revisions rendered into consumer scaffolds. Neither companion is bundled in the wheel or MCP server namespace.
|
|
47
53
|
|
|
48
54
|
Static Vega-Lite and Vega rendering remains owned by the required companion `vegavisuals` MCP dependency. Use its `visualization_status`, `visualization_check`, `render_visualizations`, and `vegavisuals://project/*` resources directly; `unaltraweb` exposes the authoring syntax but does not proxy those tools into the `web://` server.
|
|
49
55
|
|
|
@@ -81,6 +87,7 @@ baseline format nor runtime cleanup changes.
|
|
|
81
87
|
|
|
82
88
|
| Resource | Description |
|
|
83
89
|
| --- | --- |
|
|
90
|
+
| `web://runtime-identity` | Bounded identity of this serving process: startup/current code, instance/PID namespaces, binding, runtime selections and cooperative lifecycle. |
|
|
84
91
|
| `web://distribution` | Package-owned component BOM plus offline, feature-aware doctor findings for the current factory and project. |
|
|
85
92
|
| `web://site-context` | Site profile, feature flags, content inventory, bibliography, bibliometrics, build state, and offline consumer-update advisory. |
|
|
86
93
|
| `web://site-doctor` | Read-only offline distribution, project-contract, freshness, scaffold-drift, and core-override findings. |
|
|
@@ -109,6 +116,8 @@ baseline format nor runtime cleanup changes.
|
|
|
109
116
|
|
|
110
117
|
| Tool | Notes |
|
|
111
118
|
| --- | --- |
|
|
119
|
+
| `runtime_identity` | Observe the actual serving instance, startup/current package evidence and selected/observed images; never prepare a runtime or inspect site content. |
|
|
120
|
+
| `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. |
|
|
112
121
|
| `distribution_doctor` | Return offline component/factory/project findings with stable codes and optional local Docker image inspection that never pulls. |
|
|
113
122
|
| `new_web` | Create a profile-specific site from package-owned assets after a complete collision, path, and symlink preflight. |
|
|
114
123
|
| `starter_templates` | List package-owned profile scaffolds under the legacy inventory name. |
|
|
@@ -182,7 +191,7 @@ Manual PDF publication is a local workspace operation: it copies reviewed artefa
|
|
|
182
191
|
|
|
183
192
|
### Retained Letter Integration
|
|
184
193
|
|
|
185
|
-
The 0.6.0
|
|
194
|
+
The published 0.6.0 release adds package-only import/check commands and the
|
|
186
195
|
`web://artifact-imports` resource. Web rendering needs its containing Jekyll core;
|
|
187
196
|
manual inclusion also needs the matching PDF worker. Published 0.5.1 components
|
|
188
197
|
do not acquire this capability from a launcher-pin change.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# unaltraweb 0.6.0 delivery closeout
|
|
2
|
+
|
|
3
|
+
Published **2026-10-02 17:28:14 UTC**:
|
|
4
|
+
[v0.6.0](https://github.com/dosquartsdedocs/unaltraweb/releases/tag/v0.6.0).
|
|
5
|
+
Owner coordination: [issue 80](https://github.com/dosquartsdedocs/unaltraweb/issues/80).
|
|
6
|
+
This report supersedes the pending delivery state in the chronological
|
|
7
|
+
[preparation record](retained-letter-import.md). Issue 76 and release 0.5.1
|
|
8
|
+
remain closed and immutable.
|
|
9
|
+
|
|
10
|
+
## Review, source and integration
|
|
11
|
+
|
|
12
|
+
The owner explicitly authorized commits, push, PR review/integration, signed
|
|
13
|
+
candidate workflows, gated publication and the post-release launcher pin. The
|
|
14
|
+
checkout was reconciled against all existing unit-80 paths; no unrelated edits
|
|
15
|
+
were found. Work used one checkout and ordinary serial branches.
|
|
16
|
+
|
|
17
|
+
| Role | Revision / evidence |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| Reviewed implementation | `7af652fb83629e959af05c407a34a2f5a15f7936` |
|
|
20
|
+
| Integrated core selected by consumers | `5cf9817489c8dc47cee726bfe42fe3071cd32b85`, [PR 81](https://github.com/dosquartsdedocs/unaltraweb/pull/81) |
|
|
21
|
+
| Immutable core/PDF selection | `8e93b8b808204faef54cccaee622699f04a11805` |
|
|
22
|
+
| Final artifact-producing source | `de52db351490e94939aac20c6af264f22a6a1678`, [PR 82](https://github.com/dosquartsdedocs/unaltraweb/pull/82) |
|
|
23
|
+
| Receipt-only child | `3ce7606bc6148aee19d067c559823d8c5b52db5d` |
|
|
24
|
+
| Receipt integration and tag target | `ec6dcb28e890d32718aa173934527a7b4213a042`, [PR 83](https://github.com/dosquartsdedocs/unaltraweb/pull/83) |
|
|
25
|
+
| Annotated tag object | `1605578861a1a09157037e6085020baad4948d72` |
|
|
26
|
+
|
|
27
|
+
All three PRs have explicit agent review records and protected CI; those records
|
|
28
|
+
do not claim human review. Merge commits preserve the reviewed core's ancestry.
|
|
29
|
+
The receipt integration's first parent is exactly the artifact-producing source,
|
|
30
|
+
and its first-parent diff contains only `release-candidates.json`.
|
|
31
|
+
|
|
32
|
+
Review closed independent metadata-reference validation, malformed Pandoc-link
|
|
33
|
+
handling, internal PDF OpenAction destinations, and direct signed-runtime
|
|
34
|
+
acceptance. The vendored v1 verifier/schema still match the established hub pin
|
|
35
|
+
byte for byte; 26 reference conformance tests passed against matching fixtures.
|
|
36
|
+
Source checks reported 587 Python cases with 30 optional skips. Ruby, actual PDF,
|
|
37
|
+
MCP, wheel/gem, workflow/distribution, docs and reproducibility gates passed.
|
|
38
|
+
|
|
39
|
+
## Receipt and published identities
|
|
40
|
+
|
|
41
|
+
[Tagged native receipt](https://github.com/dosquartsdedocs/unaltraweb/blob/v0.6.0/release-candidates.json):
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
schema_version: 1
|
|
45
|
+
release: v0.6.0
|
|
46
|
+
source_commit: de52db351490e94939aac20c6af264f22a6a1678
|
|
47
|
+
receipt SHA-256: 5ed4e6dd615367927e6ea8a3541c9e7dca9dad73a738851705f563e0e6895280
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Exactly the four `ready` components are bound to that source:
|
|
51
|
+
|
|
52
|
+
| Component | Registry artifact | SHA-256 / OCI index digest |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| Gem | `unaltraweb-0.6.0.gem` | `276d04a71d1170220c3881cce8d0800633c42b0ee7ad07a376f80996c6afd177` |
|
|
55
|
+
| Wheel | `unaltraweb_mcp-0.6.0-py3-none-any.whl` | `3effb471ffd264f7fb2a8c88dd6536bc86639eae52806527c2d872653944c85a` |
|
|
56
|
+
| Base runtime | `ghcr.io/dosquartsdedocs/unaltraweb` | `sha256:a4e9d82b0e9a72e519c44e09ca449b2dc37964fbb9953ae6e4adff648e39b94b` |
|
|
57
|
+
| Full MCP | `ghcr.io/dosquartsdedocs/unaltraweb-mcp` | `sha256:736c4ddd0a543454e3edaeac2e9cfd97a1279ce472923ac54e326c1281b2ba05` |
|
|
58
|
+
|
|
59
|
+
Both `0.6.0` and `v0.6.0` OCI aliases were inspected anonymously and match those
|
|
60
|
+
index digests. The MCP's local configuration ID is
|
|
61
|
+
`sha256:73320210b19597243c7183ef255ffa1cbc36a07157e6ab4e1b3d9349fa89a063`;
|
|
62
|
+
its revision label is the exact artifact source above. Configuration IDs and
|
|
63
|
+
registry index digests are distinct identities.
|
|
64
|
+
|
|
65
|
+
The selected PDF 0.6.0 is the already-published, signed and tested specialization:
|
|
66
|
+
`ghcr.io/dosquartsdedocs/unaltraweb-manual-pdf@sha256:0ba267cb87f53ebaca4e31805fe00610cd61fdf97a8d2c3692f4655700dceaed`.
|
|
67
|
+
It was produced from core `5cf9817489c8dc47cee726bfe42fe3071cd32b85` by the
|
|
68
|
+
[initial signed image run](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37029374441),
|
|
69
|
+
and its local configuration ID is
|
|
70
|
+
`sha256:d7e7d3243616270fc9e6eed7f8238c412dbe3d9ffc18d2832d17d66ca630d139`.
|
|
71
|
+
The BOM, generated consumer tuple and Make default select that same digest.
|
|
72
|
+
It is reused as `released`, outside the four-component coordinated receipt.
|
|
73
|
+
The later image workflow also tested a verification-only PDF candidate
|
|
74
|
+
`sha256:9b3ae6fe1f04ff7de6c81c258d7c16f79cc7f2857c9b46b0829fc71812ace11f`;
|
|
75
|
+
that candidate is not the selected worker and received no coordinated semver
|
|
76
|
+
promotion. No self-digest or fabricated core SHA was introduced.
|
|
77
|
+
|
|
78
|
+
Computation, capture, Diavisuals and Vegavisuals retain the tested 0.4.0 selections.
|
|
79
|
+
Their exact immutable references remain in the BOM, and earlier published
|
|
80
|
+
artifacts and receipts remain at their original tags.
|
|
81
|
+
|
|
82
|
+
## CI, signing and publication
|
|
83
|
+
|
|
84
|
+
| Gate | Successful run |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| Implementation PR CI / CodeQL | [37027921742](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37027921742) / [37027922332](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37027922332) |
|
|
87
|
+
| Core integration CI | [37028677932](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37028677932) |
|
|
88
|
+
| Tuple PR CI / CodeQL | [37032368507](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37032368507) / [37032368609](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37032368609) |
|
|
89
|
+
| Final source CI / CodeQL | [37033064607](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37033064607) / [37033064633](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37033064633) |
|
|
90
|
+
| Signed final image build/test | [37033593312](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37033593312) |
|
|
91
|
+
| Package preparation | [37033596931](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37033596931) |
|
|
92
|
+
| Receipt PR CI / CodeQL | [37038403708](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37038403708) / [37038403802](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37038403802) |
|
|
93
|
+
| Receipt/tag target CI / CodeQL | [37039075585](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37039075585) / [37039075748](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37039075748) |
|
|
94
|
+
| Tag CI | [37039786598](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37039786598) |
|
|
95
|
+
| Semver image promotion | [37040420721](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37040420721) |
|
|
96
|
+
| PyPI/RubyGems Trusted Publishing | [37040424945](https://github.com/dosquartsdedocs/unaltraweb/actions/runs/37040424945) |
|
|
97
|
+
|
|
98
|
+
The signed image workflows checked exact OCI digests, signer workflow, source
|
|
99
|
+
revision and labels before executing candidates. Promotion reverified those
|
|
100
|
+
bindings and reused the tested manifests without rebuilding. The package
|
|
101
|
+
authorizer bound workflow/run/source, immutable artifact ID `11237594327`, exact
|
|
102
|
+
inventory and checksums to the receipt. Its archive digest is
|
|
103
|
+
`sha256:79a67d7a8370468abe1f0265b248f3e9d6cf6187ac0bc891a0b3801e5a9931a6`.
|
|
104
|
+
OIDC jobs published only the staged verified gem and wheel.
|
|
105
|
+
|
|
106
|
+
The actual receipt-only branch, merged target and annotated tag passed strict
|
|
107
|
+
`distribution-release-check` and publication-ref/ancestry gates. Native package
|
|
108
|
+
run authorization, exact staging and `verify_package_publish.py release` passed
|
|
109
|
+
before privileged publication. Strict release checks apply to the receipt/tag
|
|
110
|
+
revision, not subsequent ordinary post-release source commits.
|
|
111
|
+
|
|
112
|
+
## Real retained-letter and rollback proofs
|
|
113
|
+
|
|
114
|
+
Acceptance consumed the authenticated published Carta 0.3.0rc1 packet, not a local
|
|
115
|
+
producer checkout or synthetic unit fixture. The sender bundle hash is
|
|
116
|
+
`aeaa757ee1be19bfe56dc9af8dd1178032929b4a2bec2dad2ebb621b158ad999`.
|
|
117
|
+
All 12 seal files remain under `.unaltraweb/artifacts/carta/bundle/`.
|
|
118
|
+
The mapping `payload/output/letter.pdf` → `assets/documents/carta.pdf` retains
|
|
119
|
+
SHA-256 `4a661740a18fe1cf75b84aa0d8532511fd105eb5484a5af700e11e8e30828ea4`.
|
|
120
|
+
The native chapter is `_chapters/en/carta.md`, with its separate binding and
|
|
121
|
+
standard-v1 integration record outside the seal.
|
|
122
|
+
|
|
123
|
+
The downloaded final CI wheel ran against the exact signed MCP and selected PDF
|
|
124
|
+
digests above, without deriving another controller image. Both copied producer
|
|
125
|
+
and incoming trees were removed, author prose survived an identical reimport,
|
|
126
|
+
and the receiver was moved before native/generic verification and a forced PDF
|
|
127
|
+
rebuild. Web/HTTP checks passed at both locations. The complete original letter
|
|
128
|
+
appears on page 10 of an 11-page composed manual. Both composed PDFs have hash
|
|
129
|
+
`416e96f66bb6608b1e20bf5e36b6b16133bd4018c17e6c079e8987b736fe9cae`.
|
|
130
|
+
The integration record hash is
|
|
131
|
+
`ebe07ee10ad740a2bbbd36d532f336374cf4bb19ccb373b6590b2279f664a222`.
|
|
132
|
+
Generic verification confirms one bundle, one mapping and 14 verified files;
|
|
133
|
+
the native checker additionally binds the source and rendered page.
|
|
134
|
+
|
|
135
|
+
Local evidence root: `/tmp/opencode/unaltraweb-closeout-060/`.
|
|
136
|
+
|
|
137
|
+
| Retained evidence | SHA-256 |
|
|
138
|
+
| --- | --- |
|
|
139
|
+
| `candidate-letter-proof/evidence.json` | `618573b1a867daf6b1f3023e0d5700c27a6de429abea160b4c51ff8699f86f9c` |
|
|
140
|
+
| `candidate-roundtrip/evidence.json` | `23ec8885e8306931fb8ee4899e95b7bff4b3d23d2b63cdd3321e3f68722c3bb8` |
|
|
141
|
+
| `published-packages/verified.json` | `073d7ca1bbe46b8be5d89211501ca8fc7b71297d7eb542c4c9cc27ff167aa91e` |
|
|
142
|
+
|
|
143
|
+
The roundtrip exercised all four profiles using immutable MCP references:
|
|
144
|
+
0.4.0 `sha256:389bc585cdb4fc89d3372f4896a55fe26e15df38b46bc114ce44fdb3f1c8deb9`,
|
|
145
|
+
unpatched 0.5.0 `sha256:36d17edbade77edb40a687f6a744203c6329acb33fbc2eb255e88d9ff1a42c98`,
|
|
146
|
+
then the new 0.6.0 digest. The unpatched failure was reproduced on a separate
|
|
147
|
+
copy. Two builds and a preview passed at 0.6.0 and again after returning to 0.4.0.
|
|
148
|
+
All six author/cache files retained their hashes; no caches were emptied.
|
|
149
|
+
|
|
150
|
+
## Public downloads and post-release selection
|
|
151
|
+
|
|
152
|
+
Anonymous PyPI and RubyGems metadata and package bytes match the receipt exactly.
|
|
153
|
+
GitHub Release assets were downloaded again and pass `SHA256SUMS`, whose own hash
|
|
154
|
+
is `60d80d6e0803154a7b5c98c1731f4bec905def3a481152d4e59d7daf8932fc1a`.
|
|
155
|
+
A fresh public-wheel venv passed default `prepare`, `check` and real stdio `smoke`,
|
|
156
|
+
selecting the expected MCP configuration ID without a local factory dependency.
|
|
157
|
+
That public installation rechecked the relocated receiver and rendered mapping.
|
|
158
|
+
The public gem installed into an isolated gem home and activated as 0.6.0 using
|
|
159
|
+
the runtime's existing Ruby dependencies; this is not a network-fresh dependency
|
|
160
|
+
installation claim. The downloaded candidate gem also passed isolated native
|
|
161
|
+
helper-closure inspection.
|
|
162
|
+
|
|
163
|
+
The source-only post-release branch `chore/80-pin-published-mcp-0.6.0` selects the
|
|
164
|
+
published MCP digest in `Makefile` and `scripts/unaltraweb-mcp-bootstrap.sh`, updates
|
|
165
|
+
the pin regression and current docs, and accompanies this report. Its PR/merge
|
|
166
|
+
and final clean-main confirmation are recorded in issue 80 after protected CI.
|
|
167
|
+
It does not rebuild or alter the published receipt, tag or packages.
|
|
168
|
+
|
|
169
|
+
The post-pin local recheck passed 587 Python cases (558 passed, 29 optional
|
|
170
|
+
skips), distribution/workflow/wheel and prose checks, `mcp-check`, real
|
|
171
|
+
`mcp-smoke` with the selected public PDF, docs build and whitespace checks.
|
|
172
|
+
Development builds used only `unaltraweb-closeout-060-*:post-pin` resources.
|
|
173
|
+
The actual `MCP_CONSUMER_WORKSPACE`-bound `make mcp-stdio` transport also initialized
|
|
174
|
+
a fresh synthetic consumer and exposed both native import tools; Docker inspection
|
|
175
|
+
confirmed the published MCP configuration ID above. Its retained result is
|
|
176
|
+
`/tmp/opencode/unaltraweb-closeout-060/post-pin-proof/evidence.json` and the session
|
|
177
|
+
exited normally. `mcp-build` and the bootstrap's `--check` selected the public
|
|
178
|
+
runtime directly.
|
|
179
|
+
|
|
180
|
+
Acceptance covers the exact Linux/amd64 tuple and published English one-page
|
|
181
|
+
Carta sample. The generic conformance tests do not establish Diapora composition
|
|
182
|
+
or other domain imports. Active IDE processes keep their loaded runtime until
|
|
183
|
+
reconnected. No real manual, author artifact, client registration or helper
|
|
184
|
+
selection was migrated. Consumer adoption and hub catalogue integration remain
|
|
185
|
+
separate owner actions; this report supplies their verified intake evidence.
|