Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
036763f
fix(source): preserve settings during explicit signer re-trust
andersalm Oct 2, 2026
d9b418a
feat(release): add pinned custodian signer with inert input admission
andersalm Oct 2, 2026
678c9cb
test(release): isolate signer fixtures from host free space
andersalm Oct 2, 2026
1e6cb19
Merge reviewed develop baseline into release trust preparation
andersalm Oct 2, 2026
481da3f
feat(release): prepare key-free Mac signing inputs
andersalm Oct 2, 2026
cf6945b
fix(installer): pin staged trust and exact binary version
andersalm Oct 2, 2026
a5601a3
merge: integrate develop for staged release work
andersalm Oct 2, 2026
c33ce93
test(release): run installer refusals in the source gate
andersalm Oct 2, 2026
416a4ce
fix(installer): separate consumed receipts and version streams
andersalm Oct 2, 2026
83c9165
test(release): initialize preparation options in all fixtures
andersalm Oct 2, 2026
55d2864
fix(installer): retain the approved staged metadata layout
andersalm Oct 2, 2026
f4030b2
feat(publisher): validate and snapshot frozen signed release sets
andersalm Oct 2, 2026
84524f0
feat(publisher): import signed outputs without release-key access
andersalm Oct 2, 2026
c650248
fix(gateway): serve only the pinned signed publication bytes
andersalm Oct 2, 2026
e90541f
test(release): align source gates with frozen publication admission
andersalm Oct 2, 2026
cf17077
fix(gateway): remove retired publication path imports
andersalm Oct 2, 2026
d2bfcc9
fix(publisher): remove unused ledger test import
andersalm Oct 2, 2026
a2a2d1f
test(publisher): align bootstrap smoke with unsigned preparation
andersalm Oct 2, 2026
152bbd9
feat(release): reuse qualified support for the next Runtime
andersalm Oct 2, 2026
3072f64
merge: inherit approved pinned Kubo fixture repair
andersalm Oct 2, 2026
e707964
fix(release): cache verified publication reads and queue clients
andersalm Oct 2, 2026
8c73fdf
fix(release): activate cached sets at the final head commit
andersalm Oct 2, 2026
d631889
test(release): follow the cached receipt context in alignment guard
andersalm Oct 2, 2026
11e6c9c
test(release): use a plain root path for directory symlink refusal
andersalm Oct 2, 2026
cc4b910
fix(release): reactivate the verified prior set after rollback
andersalm Oct 2, 2026
1770add
Admit approved develop source for canary signing
andersalm Oct 2, 2026
635023c
Clarify key-free canary builder and operator handoff inputs
andersalm Oct 2, 2026
659e180
Merge accepted installed Home frame baseline into release trust
andersalm Oct 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ separate artifact identities and verification records.

The public installer looks up signed releases for Linux x86_64/aarch64 and macOS Apple silicon. Intel Mac and other OS families fail closed.

The staged release root DID is
`did:key:z6MkgwHd2BCWe1jHMXPiR6H1q1RFPcv1YzhMbK5G1kBarbfe`. Before a staged
install, compare this DID with the `MAINTAINER_DID` value in the frozen installer.
Promotion to the live installer requires staged install and update acceptance
and operator approval.

```bash
curl -fsSL https://elastos.elacitylabs.com/install.sh | bash
```
Expand Down
2 changes: 1 addition & 1 deletion docs/COMMAND_MATRIX.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ bootstrap omits the Runtime DID. The default bootstrap requires caller authority
| `elastos verify` | Self-contained | Verifies a local capsule signature. With `--cid`, it fetches and verifies provenance through the content provider. |
| `elastos sign-payload` | Self-contained | Reads bytes from stdin and writes a domain-separated Ed25519 signature and signer DID as JSON. |
| `elastos publish <path>` | Self-contained | Validates the manifest, checks that the resolved entrypoint path exists, then publishes through the content provider. A microVM uses the explicitly installed local `ipfs-provider`. [Capsule authoring](CAPSULE_AUTHORING.md#publish-with-the-right-gate) owns the exact validation limits. |
| `elastos publish-release` | Self-contained | Runs the signed release pipeline. Dry-run and preflight modes do not publish. Public URL options may start their own gateway and tunnel step. |
| `elastos publish-release` | Self-contained | Prepares unsigned native inputs or imports a frozen signed set against an operator-approved public DID. The separate custodian tool owns signing. Dry-run and preflight modes keep publication unchanged. |
| `elastos share <path>` | Self-contained | Publishes a file or directory, provenance, and a signed channel head unless disabled by flags. |
| `elastos share <path> --public` | Self-contained | Adds an immediate tunnel and remains active until interrupted. It is not a Runtime host. |
| `elastos content publish-object`, `elastos content repair-worker`, `elastos content status` | Self-contained | Each command starts the installed content and IPFS provider path directly. |
Expand Down
20 changes: 20 additions & 0 deletions docs/INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,26 @@ elastos update --no-p2p --gateway GATEWAY_URL

Replace `CID` and `GATEWAY_URL` with the source values.

## Compare and change the release signer

Compare an announced release DID with the staged root DID in the repository
[README](../README.md#install-from-the-publisher) before installing or changing
a source. The source owner can re-trust an existing source explicitly:

```sh
elastos source add --name EXISTING_SOURCE --publisher NEW_DID
```

Runtime asks for the complete new DID. Entering another value cancels the
change. This step keeps the source's channel, install path, Carrier ticket and
gateways. After confirmation, Runtime accepts release signatures from the new
DID and refuses signatures from the former DID.

An existing Home that keeps its old source pin refuses a release signed by the
new maintainer with a signer-mismatch error. That Home continues to trust the
old key and remains exposed if a copy of that key exists. The owner must compare
the public DID and complete the explicit re-trust step before its next update.

## Installed files

When XDG variables are unset, the default paths are:
Expand Down
6 changes: 3 additions & 3 deletions elastos/crates/elastos-server/src/api/gateway.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ use axum::Extension;
use axum::Json;
use axum::Router;
use elastos_common::localhost::{
edge_binding_path, edge_site_head_path, my_website_root_path, publisher_artifacts_path,
publisher_install_script_path, publisher_release_head_path, publisher_release_manifest_path,
publisher_site_releases_dir, rooted_localhost_fs_path, MY_WEBSITE_URI,
edge_binding_path, edge_site_head_path, my_website_root_path, publisher_site_releases_dir,
rooted_localhost_fs_path, MY_WEBSITE_URI,
};
use elastos_common::{CapsuleRole, CapsuleType};
use elastos_identity::IdentityManager;
Expand Down Expand Up @@ -1214,6 +1213,7 @@ fn gateway_router_with_api_url(state: GatewayState, gateway_api_url: String) ->
)
.with_state(state.clone())
.layer(Extension(TrustedGatewayApiUrl(Arc::from(gateway_api_url))))
.layer(Extension(ReleaseReadGate::new()))
.layer(axum::middleware::from_fn(refuse_content_api_resources))
.layer(axum::middleware::from_fn_with_state(
admission_state,
Expand Down
Loading
Loading