Add federation docs and implementation notes
This commit is contained in:
parent
948a156f5c
commit
f707244888
170
docs/federation-implementation-notes.md
Normal file
170
docs/federation-implementation-notes.md
Normal file
|
|
@ -0,0 +1,170 @@
|
||||||
|
# Federation Implementation Notes (Core)
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-02-XX
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
These notes bind the federation semantics docs to concrete core-library
|
||||||
|
responsibilities, APIs, and data structures. The intent is to keep
|
||||||
|
federation logic inside the core substrate and keep daemon/frontends thin.
|
||||||
|
|
||||||
|
## Normative inputs
|
||||||
|
|
||||||
|
Core semantics and replay:
|
||||||
|
- tier1/asl-federation-1.md
|
||||||
|
- tier1/asl-federation-replay-1.md
|
||||||
|
- tier1/asl-store-index-1.md
|
||||||
|
- tier1/enc-asl-core-index-1.md
|
||||||
|
|
||||||
|
Admission and policy gating:
|
||||||
|
- tier1/asl-dap-1.md
|
||||||
|
- tier1/asl-policy-hash-1.md
|
||||||
|
- tier1/asl-domain-model-1.md
|
||||||
|
- tier1/asl-dam-1.md
|
||||||
|
|
||||||
|
Contextual alignment:
|
||||||
|
- tier1/asl-system-1.md
|
||||||
|
- tier1/asl-encrypted-blocks-1.md
|
||||||
|
|
||||||
|
## Scope (core library)
|
||||||
|
|
||||||
|
Federation MUST be implemented as core substrate logic:
|
||||||
|
- Deterministic federation view construction.
|
||||||
|
- Replay ordering and bounds per domain.
|
||||||
|
- Imported record metadata preservation (domain_id, visibility,
|
||||||
|
cross_domain_source).
|
||||||
|
- Tombstone and shadowing behavior per domain.
|
||||||
|
|
||||||
|
The following are explicitly out of scope for core:
|
||||||
|
- Transport protocols (HTTP, IPC, gossip).
|
||||||
|
- Peer discovery and operational orchestration.
|
||||||
|
- Admin UX and deployment wiring.
|
||||||
|
|
||||||
|
## Responsibilities
|
||||||
|
|
||||||
|
1) Federation registry
|
||||||
|
- Tracks known domains, admission status, policy hash, and
|
||||||
|
last admitted {SnapshotID, LogPrefix}.
|
||||||
|
- Enforces DAP + policy compatibility prior to admitting remote state.
|
||||||
|
|
||||||
|
2) Federation view cache
|
||||||
|
- Materializes a deterministic view from local state + admitted
|
||||||
|
published records from other domains.
|
||||||
|
- Stores imported records with origin metadata for replay.
|
||||||
|
- Tracks per-domain replay high-water {domain_id, logseq}.
|
||||||
|
|
||||||
|
3) Resolver
|
||||||
|
- Resolves ArtifactKey using local store + federation view.
|
||||||
|
- Does not mutate store/index as part of GET semantics.
|
||||||
|
|
||||||
|
## Data model (suggested)
|
||||||
|
|
||||||
|
```c
|
||||||
|
typedef struct {
|
||||||
|
uint32_t domain_id;
|
||||||
|
uint64_t snapshot_id;
|
||||||
|
uint64_t log_prefix;
|
||||||
|
uint64_t last_logseq;
|
||||||
|
uint8_t admitted; // boolean
|
||||||
|
uint8_t policy_ok; // boolean
|
||||||
|
uint8_t reserved[6];
|
||||||
|
} amduat_fed_domain_state_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t domain_id;
|
||||||
|
uint8_t visibility; // 0 internal, 1 published
|
||||||
|
uint8_t has_source; // 0/1
|
||||||
|
uint16_t reserved0;
|
||||||
|
uint32_t source_domain;
|
||||||
|
} amduat_fed_record_meta_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
amduat_fed_record_meta_t meta;
|
||||||
|
amduat_asl_artifact_key_t key;
|
||||||
|
amduat_asl_artifact_location_t loc;
|
||||||
|
uint64_t logseq;
|
||||||
|
uint64_t snapshot_id;
|
||||||
|
uint64_t log_prefix;
|
||||||
|
} amduat_fed_index_record_t;
|
||||||
|
```
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Imported records MUST retain domain_id and cross-domain source metadata.
|
||||||
|
- Tombstones must retain domain_id/visibility for domain-local shadowing.
|
||||||
|
|
||||||
|
## Core API sketch
|
||||||
|
|
||||||
|
```c
|
||||||
|
typedef struct amduat_fed_registry_t amduat_fed_registry_t;
|
||||||
|
typedef struct amduat_fed_view_t amduat_fed_view_t;
|
||||||
|
|
||||||
|
amduat_fed_registry_t *amduat_fed_registry_open(...);
|
||||||
|
void amduat_fed_registry_close(amduat_fed_registry_t *);
|
||||||
|
|
||||||
|
// Admission + policy gating
|
||||||
|
bool amduat_fed_admit_domain(amduat_fed_registry_t *, domain_id, policy_hash, ...);
|
||||||
|
bool amduat_fed_set_domain_state(amduat_fed_registry_t *, domain_id,
|
||||||
|
snapshot_id, log_prefix);
|
||||||
|
|
||||||
|
// Ingest published records for a domain (already transported).
|
||||||
|
bool amduat_fed_ingest_records(amduat_fed_registry_t *, domain_id,
|
||||||
|
const amduat_fed_index_record_t *records,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
// Build or refresh a deterministic federation view.
|
||||||
|
amduat_fed_view_t *amduat_fed_view_build(amduat_fed_registry_t *,
|
||||||
|
const amduat_asl_store_t *local_store,
|
||||||
|
const amduat_asl_index_state_t *local_state);
|
||||||
|
|
||||||
|
// Resolve via local store + federated view.
|
||||||
|
amduat_asl_store_error_t amduat_fed_resolve(
|
||||||
|
const amduat_fed_view_t *view,
|
||||||
|
const amduat_asl_artifact_key_t *key,
|
||||||
|
amduat_bytes_t *out_bytes);
|
||||||
|
```
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
- Transport fetch is not part of resolve; it only consumes ingested records.
|
||||||
|
- The daemon can choose to fetch missing bytes when resolve reports a remote
|
||||||
|
location but local bytes are absent.
|
||||||
|
|
||||||
|
## Replay and view construction
|
||||||
|
|
||||||
|
Rules are as per ASL/FEDERATION-REPLAY/1:
|
||||||
|
- Records are ordered by (logseq asc, canonical identity tie-break).
|
||||||
|
- Replay is bounded by {SnapshotID, LogPrefix} per domain.
|
||||||
|
- Tombstones shadow only within their source domain.
|
||||||
|
- Imported entries keep domain_id + cross_domain_source.
|
||||||
|
|
||||||
|
The view is the union of:
|
||||||
|
1) Local domain internal + published state at local {SnapshotID, LogPrefix}.
|
||||||
|
2) Admitted foreign published state at each domain's {SnapshotID, LogPrefix}.
|
||||||
|
|
||||||
|
## Cache and storage
|
||||||
|
|
||||||
|
Federation view storage MAY be:
|
||||||
|
- In-memory (ephemeral), or
|
||||||
|
- On-disk index segments with federation metadata populated.
|
||||||
|
|
||||||
|
If remote bytes are fetched, they MUST be written to a cache store that is
|
||||||
|
logically separate from the authoritative local store (policy-controlled).
|
||||||
|
|
||||||
|
## Error reporting
|
||||||
|
|
||||||
|
Core resolve should distinguish:
|
||||||
|
- NOT_FOUND (no record in local or federation view)
|
||||||
|
- FOUND_REMOTE_NO_BYTES (record exists in view but bytes missing locally)
|
||||||
|
- INTEGRITY_ERROR (hash mismatch on bytes)
|
||||||
|
- POLICY_DENIED (domain admitted but record filtered by policy)
|
||||||
|
|
||||||
|
## Tests (minimal)
|
||||||
|
|
||||||
|
1) Replay ordering determinism across two domains with interleaved logseq.
|
||||||
|
2) Tombstone shadowing is domain-local.
|
||||||
|
3) Imported record metadata preserved in view and survives rebuild.
|
||||||
|
4) Conflict: same ArtifactKey with different bytes across domains rejected.
|
||||||
|
5) Bound replay by {SnapshotID, LogPrefix} produces stable view.
|
||||||
148
tier1/asl-dam-1.md
Normal file
148
tier1/asl-dam-1.md
Normal file
|
|
@ -0,0 +1,148 @@
|
||||||
|
# ASL/DAM/1 -- Domain Authority Manifest
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [authority, trust, policy, domains]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/DAM/1`
|
||||||
|
**Layer:** L2 -- Authority semantics (no encoding)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/POLICY-HASH/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/OCS/1` -- offline certificate system
|
||||||
|
* `ASL/OFFLINE-ROOT-TRUST/1` -- offline root policy
|
||||||
|
* `PER/SIGNATURE/1` -- PER signature verification
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/DAM/1 defines the **logical structure and semantics** of the Domain Authority Manifest. It does not define an encoding.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
The Domain Authority Manifest (DAM) defines **who may assert authority** on behalf of a domain.
|
||||||
|
It binds domain identity to principals, roles, and a policy hash.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core Concepts
|
||||||
|
|
||||||
|
* **Principal**: a cryptographic public key
|
||||||
|
* **Role**: capability granted to a principal
|
||||||
|
* **Policy hash**: canonical hash binding policy constraints to a domain
|
||||||
|
* **Authority scope**: explicit actions this DAM authorizes within the domain
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Roles (Minimal Set)
|
||||||
|
|
||||||
|
| Role | Capability |
|
||||||
|
| ---------- | ---------- |
|
||||||
|
| produce | Create internal artifacts |
|
||||||
|
| execute | Emit PERs |
|
||||||
|
| publish | Publish artifacts/snapshots |
|
||||||
|
| federate | Export published state |
|
||||||
|
| audit | Verify only, no mutations |
|
||||||
|
|
||||||
|
Roles are **capabilities**, not identities.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Logical Schema
|
||||||
|
|
||||||
|
```text
|
||||||
|
DomainAuthorityManifest {
|
||||||
|
domain_id : DomainID
|
||||||
|
version : u32
|
||||||
|
root_key : PublicKey
|
||||||
|
principals[] : PrincipalEntry
|
||||||
|
policy_hash : Hash
|
||||||
|
scope[] : AuthorityScope
|
||||||
|
}
|
||||||
|
|
||||||
|
PrincipalEntry {
|
||||||
|
principal_id : Hash
|
||||||
|
public_key : PublicKey
|
||||||
|
roles[] : Role
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The DAM is immutable once published. Rotation is performed by publishing a new DAM.
|
||||||
|
|
||||||
|
### 4.1 Authority Scope
|
||||||
|
|
||||||
|
The optional `scope[]` constrains what this DAM authorizes. If omitted, scope is
|
||||||
|
assumed to include all roles defined in this document.
|
||||||
|
|
||||||
|
```text
|
||||||
|
AuthorityScope = {
|
||||||
|
"produce",
|
||||||
|
"execute",
|
||||||
|
"publish",
|
||||||
|
"federate",
|
||||||
|
"audit"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Admission and Pinning (Normative)
|
||||||
|
|
||||||
|
Before a DAM is trusted, a receiving domain MUST:
|
||||||
|
|
||||||
|
1. Admit the domain (see `ASL/DAP/1`).
|
||||||
|
2. Pin the DAM artifact to a snapshot.
|
||||||
|
3. Pin the DAM's `policy_hash` for that snapshot lineage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Validation Rules (Normative)
|
||||||
|
|
||||||
|
A node MUST reject any action unless:
|
||||||
|
|
||||||
|
1. The DAM artifact is visible in the relevant snapshot.
|
||||||
|
2. The DAM hash matches the snapshot reference (if recorded).
|
||||||
|
3. The action is signed by a principal listed in the DAM.
|
||||||
|
4. The principal has the required role.
|
||||||
|
5. The DAM `root_key` is certified by the offline root trust chain.
|
||||||
|
6. The action is within the DAM's declared `scope[]` (if present).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Policy Binding
|
||||||
|
|
||||||
|
The DAM `policy_hash` binds the domain to a specific policy document. If policy changes, a new DAM MUST be published and referenced by new snapshots.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Idempotency and Rotation
|
||||||
|
|
||||||
|
* Replaying the same snapshot + DAM MUST yield identical authority decisions.
|
||||||
|
* Rotation is done by publishing a new DAM and referencing it in new snapshots.
|
||||||
|
* Old snapshots remain valid with the DAM they reference.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Non-Goals
|
||||||
|
|
||||||
|
* Encoding format
|
||||||
|
* Key rotation workflow
|
||||||
|
* Live revocation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Summary
|
||||||
|
|
||||||
|
ASL/DAM/1 defines the minimal authority document for a domain, binding principals and roles to a policy hash under an offline root trust chain.
|
||||||
165
tier1/asl-dap-1.md
Normal file
165
tier1/asl-dap-1.md
Normal file
|
|
@ -0,0 +1,165 @@
|
||||||
|
# ASL/DAP/1 -- Domain Admission Protocol
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [admission, trust, federation]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/DAP/1`
|
||||||
|
**Layer:** L2 -- Admission semantics (no transport)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/DAM/1`
|
||||||
|
* `ASL/POLICY-HASH/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/OCS/1` -- offline certificate system
|
||||||
|
* `ASL/OFFLINE-ROOT-TRUST/1`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/DAP/1 defines **admission semantics** for recognizing external domains. It does not define transport.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
The Domain Admission Protocol defines how a receiving domain evaluates and admits an applicant domain before any federation or trust is granted.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Actors
|
||||||
|
|
||||||
|
| Actor | Role |
|
||||||
|
| ----- | ---- |
|
||||||
|
| Applicant Domain | Domain requesting admission |
|
||||||
|
| Receiving Domain | Domain evaluating admission |
|
||||||
|
| Operator | Optional human/policy agent |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Admission Object Model
|
||||||
|
|
||||||
|
An admission request MUST include:
|
||||||
|
|
||||||
|
* Domain Authority Manifest (DAM)
|
||||||
|
* Proof of possession of the DAM root key
|
||||||
|
* Requested admission scope
|
||||||
|
* Optional courtesy lease request
|
||||||
|
|
||||||
|
No artifacts, blocks, or logs are required for admission.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Admission Record (Normative)
|
||||||
|
|
||||||
|
The receiving domain MUST persist an admission record that is snapshot-pinned:
|
||||||
|
|
||||||
|
```text
|
||||||
|
AdmissionRecord {
|
||||||
|
domain_id
|
||||||
|
dam_hash
|
||||||
|
policy_hash
|
||||||
|
admitted_scope[]
|
||||||
|
decision
|
||||||
|
decision_epoch
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `decision_epoch` is a monotonically increasing local counter (not wall time).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Admission Flow (Normative)
|
||||||
|
|
||||||
|
1. **Submission**
|
||||||
|
|
||||||
|
* Applicant sends DAM and proof of root-key possession.
|
||||||
|
|
||||||
|
2. **Structural validation**
|
||||||
|
|
||||||
|
* Receiving domain verifies DAM schema and signature.
|
||||||
|
* Policy hash integrity MUST be verified.
|
||||||
|
|
||||||
|
3. **Policy compatibility**
|
||||||
|
|
||||||
|
* Receiving domain evaluates requested scope and policy alignment.
|
||||||
|
|
||||||
|
4. **Decision**
|
||||||
|
|
||||||
|
* Outcomes: ACCEPTED, ACCEPTED_LIMITED, DEFERRED, REJECTED.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Admission Guarantees
|
||||||
|
|
||||||
|
If accepted:
|
||||||
|
|
||||||
|
* DomainID is recognized by the receiving domain.
|
||||||
|
* Root key and policy hash are pinned.
|
||||||
|
* Admission scope is enforced for federation.
|
||||||
|
|
||||||
|
Admission does not imply trust in artifacts beyond the granted scope.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Scope Enforcement (Normative)
|
||||||
|
|
||||||
|
* Admission scope MUST gate federation view construction and replay admission.
|
||||||
|
* A receiving domain MUST NOT admit state outside the granted scope.
|
||||||
|
* Scope changes require a new admission decision and updated AdmissionRecord.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Courtesy Lease (Optional)
|
||||||
|
|
||||||
|
A courtesy lease is a **bounded, revocable grant of resources** without semantic trust.
|
||||||
|
|
||||||
|
```text
|
||||||
|
CourtesyLease {
|
||||||
|
lease_id
|
||||||
|
domain_id
|
||||||
|
granted_by_domain
|
||||||
|
|
||||||
|
resources: {
|
||||||
|
storage_bytes
|
||||||
|
block_count
|
||||||
|
snapshot_count
|
||||||
|
}
|
||||||
|
|
||||||
|
duration: {
|
||||||
|
start_time
|
||||||
|
end_time
|
||||||
|
}
|
||||||
|
|
||||||
|
constraints: {
|
||||||
|
encrypted_only: boolean
|
||||||
|
no_federation: boolean
|
||||||
|
no_public_indexing: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Courtesy storage MAY be deleted upon lease expiry. Courtesy does not grant federation or publication rights.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Non-Goals
|
||||||
|
|
||||||
|
* Transport format
|
||||||
|
* PKI integration
|
||||||
|
* Live revocation or liveness checks
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Summary
|
||||||
|
|
||||||
|
ASL/DAP/1 defines a deterministic admission process for domains, with optional courtesy leasing for rescue and bootstrap scenarios.
|
||||||
164
tier1/asl-domain-model-1.md
Normal file
164
tier1/asl-domain-model-1.md
Normal file
|
|
@ -0,0 +1,164 @@
|
||||||
|
# ASL/DOMAIN-MODEL/1 -- Domain Topology and Publication Semantics
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [domains, authority, publication, federation]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/DOMAIN-MODEL/1`
|
||||||
|
**Layer:** L2 -- Domain topology and delegation semantics (no transport)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/DAM/1`
|
||||||
|
* `ASL/DAP/1`
|
||||||
|
* `ASL/POLICY-HASH/1`
|
||||||
|
* `ASL/FEDERATION/1`
|
||||||
|
* `ASL/LOG/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/OCS/1` -- offline certificate system
|
||||||
|
* `ASL/OFFLINE-ROOT-TRUST/1`
|
||||||
|
* `ASL/SYSTEM/1` -- unified system view
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/DOMAIN-MODEL/1 defines domain topology and publication semantics. It does not define transport, storage layout, or encoding.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
This document defines how domains relate, how authority is delegated, and how publication is made safe and explicit.
|
||||||
|
It provides a stable mental model for personal, group, and shared domains without introducing implicit trust.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. First Principles (Normative)
|
||||||
|
|
||||||
|
1. **No implicit inheritance.** Domains are not hierarchical by default; trust is explicit.
|
||||||
|
2. **Authority is explicit.** Authority is defined by DAM + certificates; it is never implied by naming or topology.
|
||||||
|
3. **Publication is explicit.** Visibility is controlled by index metadata and policy, not by storage or naming.
|
||||||
|
4. **Determinism is preserved.** All cross-domain visibility MUST be replayable from snapshots and logs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Domain Roles (Common, Personal, Working)
|
||||||
|
|
||||||
|
These roles are semantic patterns; a deployment MAY create many instances.
|
||||||
|
|
||||||
|
### 3.1 Common Domain
|
||||||
|
|
||||||
|
A shared, conservative domain for stable artifacts and schemas.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
* High trust threshold
|
||||||
|
* Read-mostly, slow-changing
|
||||||
|
* Publishes broadly
|
||||||
|
|
||||||
|
### 3.2 Personal Domain
|
||||||
|
|
||||||
|
A domain anchored to a single personal identity and authority.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
* Root of local agency
|
||||||
|
* Owns offline roots and DAM
|
||||||
|
* Decides what to publish and to whom
|
||||||
|
|
||||||
|
### 3.3 Working / Ephemeral Domains
|
||||||
|
|
||||||
|
Task-focused domains created under delegated authority.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
* Narrow policy and scope
|
||||||
|
* Often short-lived
|
||||||
|
* Results MAY be promoted to personal or common domains
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Delegation and Authority (Normative)
|
||||||
|
|
||||||
|
Delegation is explicit and certificate-based.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
* A domain MAY delegate authority to a new domain by issuing a `domain_root` certificate (ASL/OCS/1).
|
||||||
|
* Delegation MUST be recorded in the receiving domain's DAM and policy hash.
|
||||||
|
* Delegation does not create inheritance: the delegating domain does not gain automatic visibility into the new domain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Publication and Visibility (Normative)
|
||||||
|
|
||||||
|
Publication is a visibility decision, not a storage action.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
* Only published artifacts are eligible for cross-domain visibility.
|
||||||
|
* Publication state MUST be encoded in index metadata (ENC-ASL-CORE-INDEX).
|
||||||
|
* Blocks and storage layouts MUST NOT be treated as publication units.
|
||||||
|
* Publication of snapshots (or snapshot hashes) is allowed but MUST NOT imply data publication.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Cross-Domain Trust and Admission (Normative)
|
||||||
|
|
||||||
|
Trust is established by explicit admission and policy compatibility.
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
* A receiving domain MUST admit an external domain (ASL/DAP/1) before including its state.
|
||||||
|
* Policy hash compatibility MUST be checked before accepting published artifacts.
|
||||||
|
* A domain MAY pin a trusted foreign domain without reciprocal trust.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Safe Publication Patterns (Informative)
|
||||||
|
|
||||||
|
### 7.1 Personal to Personal Archive
|
||||||
|
|
||||||
|
```
|
||||||
|
personal/rescue -> personal/archive
|
||||||
|
```
|
||||||
|
|
||||||
|
* Publish explicitly from the working domain to an archival domain.
|
||||||
|
* Only published artifacts are visible across the boundary.
|
||||||
|
|
||||||
|
### 7.2 Personal to Group Domain
|
||||||
|
|
||||||
|
```
|
||||||
|
personal/project -> group/shared
|
||||||
|
```
|
||||||
|
|
||||||
|
* Requires admission by the group domain and policy compatibility.
|
||||||
|
* No unilateral publishing into the group domain.
|
||||||
|
|
||||||
|
### 7.3 Personal to Public Domain
|
||||||
|
|
||||||
|
```
|
||||||
|
personal/public -> common/public
|
||||||
|
```
|
||||||
|
|
||||||
|
* One-way trust is permitted.
|
||||||
|
* Public domain pins the personal domain; the personal domain need not pin the public domain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Non-Goals
|
||||||
|
|
||||||
|
ASL/DOMAIN-MODEL/1 does not define:
|
||||||
|
|
||||||
|
* Transport or replication protocols
|
||||||
|
* Encoding formats
|
||||||
|
* Storage layouts or filesystem assumptions
|
||||||
|
* Governance workflows beyond admission and policy compatibility
|
||||||
113
tier1/asl-encrypted-blocks-1.md
Normal file
113
tier1/asl-encrypted-blocks-1.md
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
# ASL/ENCRYPTED-BLOCKS/1 -- Encrypted Block Storage Across Domains
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [encryption, blocks, federation, storage]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/ENCRYPTED-BLOCKS/1`
|
||||||
|
**Layer:** L2 -- Encrypted storage semantics (no transport)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL-STORE-INDEX`
|
||||||
|
* `ASL/FEDERATION/1`
|
||||||
|
* `ASL/LOG/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/DOMAIN-MODEL/1`
|
||||||
|
* `ASL/POLICY-HASH/1`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/ENCRYPTED-BLOCKS/1 defines semantics for storing encrypted blocks across domains. It does not define encryption algorithms, key management, or transport.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
This document defines how encrypted blocks may be stored in a foreign domain without transferring semantic authority or decryption capability.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core Principle (Normative)
|
||||||
|
|
||||||
|
A domain MAY store encrypted blocks for another domain, but MUST NOT assert semantic meaning for those bytes.
|
||||||
|
|
||||||
|
Meaning is owned by the domain that holds the decryption keys and index entries.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Encryption Model (Normative)
|
||||||
|
|
||||||
|
### 3.1 Block Encryption
|
||||||
|
|
||||||
|
Before sealing, a block MAY be encrypted:
|
||||||
|
|
||||||
|
```
|
||||||
|
plaintext_block
|
||||||
|
-> encrypt(K)
|
||||||
|
-> ciphertext_block
|
||||||
|
-> BlockID = H(ciphertext_block)
|
||||||
|
```
|
||||||
|
|
||||||
|
Rules:
|
||||||
|
|
||||||
|
* Encryption occurs before sealing.
|
||||||
|
* `BlockID` is computed over ciphertext bytes.
|
||||||
|
* Deterministic encryption is NOT required.
|
||||||
|
|
||||||
|
### 3.2 Key Ownership
|
||||||
|
|
||||||
|
* Encryption keys are owned by the originating domain.
|
||||||
|
* Keys MUST NOT be federated or embedded in index metadata.
|
||||||
|
* Decryption metadata MUST remain local to the originating domain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Foreign Domain Storage (Normative)
|
||||||
|
|
||||||
|
A foreign domain storing encrypted blocks:
|
||||||
|
|
||||||
|
* Treats ciphertext blocks as opaque bytes.
|
||||||
|
* MAY retain or GC blocks under its local policy.
|
||||||
|
* MUST NOT create semantic index entries for those blocks.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Originating Domain References (Normative)
|
||||||
|
|
||||||
|
The originating domain:
|
||||||
|
|
||||||
|
* Maintains index entries referencing the ciphertext `BlockID`.
|
||||||
|
* Applies normal visibility, log, and snapshot rules.
|
||||||
|
* Uses local decryption metadata to materialize plaintext.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Cross-Domain References (Informative)
|
||||||
|
|
||||||
|
Two references are distinct:
|
||||||
|
|
||||||
|
* **Storage reference:** foreign domain stores ciphertext blocks.
|
||||||
|
* **Semantic reference:** originating domain records artifact visibility and meaning.
|
||||||
|
|
||||||
|
Foreign storage does not imply federation of semantics.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Non-Goals
|
||||||
|
|
||||||
|
ASL/ENCRYPTED-BLOCKS/1 does not define:
|
||||||
|
|
||||||
|
* Key exchange or key discovery
|
||||||
|
* Encryption algorithm choices
|
||||||
|
* Transport or replication protocols
|
||||||
|
* Storage layout or block packing rules
|
||||||
186
tier1/asl-federation-1.md
Normal file
186
tier1/asl-federation-1.md
Normal file
|
|
@ -0,0 +1,186 @@
|
||||||
|
# ASL/FEDERATION/1 -- Core Federation Semantics
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [federation, domains, visibility, determinism]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/FEDERATION/1`
|
||||||
|
**Layer:** L2 -- Federation semantics (no transport, no encodings)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/1-CORE`
|
||||||
|
* `ASL/1-CORE-INDEX`
|
||||||
|
* `ASL/LOG/1`
|
||||||
|
* `ASL-STORE-INDEX`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ENC-ASL-CORE-INDEX` -- domain/visibility fields (`tier1/enc-asl-core-index.md`)
|
||||||
|
* `ASL/SYSTEM/1` -- unified system view
|
||||||
|
* `ASL/FEDERATION-REPLAY/1` -- cross-node deterministic replay
|
||||||
|
* `ASL/DAM/1` -- Domain Authority Manifest
|
||||||
|
* `ASL/POLICY-HASH/1` -- policy hash
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/FEDERATION/1 defines **semantic rules** for multi-domain visibility and cross-domain references. It does not define transport, replication, or encodings.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
ASL/FEDERATION/1 defines the **multi-domain model** for ASL-based systems:
|
||||||
|
|
||||||
|
* Domain isolation and visibility rules
|
||||||
|
* Published vs internal state
|
||||||
|
* Cross-domain reference constraints
|
||||||
|
* Snapshot identity and deterministic reconstruction
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core Concepts
|
||||||
|
|
||||||
|
| Term | Definition |
|
||||||
|
| -------------------- | ---------- |
|
||||||
|
| Domain | Logical namespace with its own ASL store, log, and snapshot lineage. |
|
||||||
|
| Internal state | Artifacts/snapshots visible only within the domain. |
|
||||||
|
| Published state | Artifacts/snapshots visible to other domains. |
|
||||||
|
| Federated snapshot | Snapshot with visibility state that may be imported by other domains. |
|
||||||
|
| Cross-domain reference | Reference to a published artifact from another domain. |
|
||||||
|
| Federation view | A deterministic view constructed by combining local internal state with admitted published state from other domains. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Domain Semantics
|
||||||
|
|
||||||
|
1. **Domain isolation**
|
||||||
|
|
||||||
|
* Each domain has its own store, index, and log.
|
||||||
|
* Internal state is invisible outside the domain.
|
||||||
|
|
||||||
|
2. **Published state**
|
||||||
|
|
||||||
|
* Published artifacts and snapshots are visible to other domains.
|
||||||
|
* Published artifacts MUST satisfy ASL immutability and snapshot safety rules.
|
||||||
|
|
||||||
|
3. **Cross-domain references**
|
||||||
|
|
||||||
|
* Only published artifacts MAY be referenced by other domains.
|
||||||
|
* Cross-domain references are read-only and immutable.
|
||||||
|
* The consuming domain indexes imported artifacts using normal ASL index semantics.
|
||||||
|
* Imported entries MUST preserve origin metadata (domain identity and visibility) for deterministic replay.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Snapshot Identity
|
||||||
|
|
||||||
|
* Snapshot IDs are unique per domain.
|
||||||
|
* Federated snapshot identity is `(DomainID, SnapshotID)`.
|
||||||
|
* A federated snapshot MAY include cross-domain references only to published artifacts.
|
||||||
|
* Replay of federated state MUST be bounded by the source domain's `{SnapshotID, LogPrefix}`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Visibility Rules
|
||||||
|
|
||||||
|
| Object | Internal Domain | Other Domains |
|
||||||
|
| ----------------------------------- | --------------- | ------------------- |
|
||||||
|
| Internal artifact | visible | hidden |
|
||||||
|
| Published artifact | visible | visible (read-only) |
|
||||||
|
| Internal snapshot | visible | hidden |
|
||||||
|
| Published snapshot | visible | visible |
|
||||||
|
| Block supporting published artifact | visible | visible |
|
||||||
|
| Block supporting internal artifact | visible | hidden |
|
||||||
|
|
||||||
|
* Index entries follow the same visibility rules.
|
||||||
|
* Determinism is defined per-domain and per-snapshot view.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Federation View Construction
|
||||||
|
|
||||||
|
To construct a federation view for a domain:
|
||||||
|
|
||||||
|
1. Start with the local domain's internal + published state at `{SnapshotID, LogPrefix}`.
|
||||||
|
2. For each admitted foreign domain, include only published state that is:
|
||||||
|
|
||||||
|
* Visible under that domain's `{SnapshotID, LogPrefix}`, and
|
||||||
|
* Allowed by the receiving domain's admission and policy rules.
|
||||||
|
|
||||||
|
3. Apply normal ASL index shadowing and tombstone rules within each domain's log order.
|
||||||
|
|
||||||
|
Federation MUST NOT bypass ASL/LOG/1 ordering or ASL/1-CORE-INDEX semantics.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Cross-Domain Operations
|
||||||
|
|
||||||
|
1. **Import published artifacts**
|
||||||
|
|
||||||
|
* A domain MAY import a published artifact from another domain.
|
||||||
|
* Imported artifacts MUST be treated as immutable.
|
||||||
|
* Import MUST be gated by admission and policy compatibility (see `ASL/DAP/1` and `ASL/POLICY-HASH/1`).
|
||||||
|
|
||||||
|
2. **Export published artifacts**
|
||||||
|
|
||||||
|
* Internal artifacts MAY be promoted to published state.
|
||||||
|
* Promotion MUST be snapshot-bound and log-ordered.
|
||||||
|
* Publication MUST respect the domain's policy hash and DAM roles.
|
||||||
|
|
||||||
|
3. **Federation log propagation**
|
||||||
|
|
||||||
|
* Each domain maintains its own append-only log.
|
||||||
|
* Federation MAY replicate published log-visible state.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Provenance and Traceability
|
||||||
|
|
||||||
|
* Execution receipts MAY include cross-domain inputs.
|
||||||
|
* Provenance MUST preserve origin domain and snapshot identity.
|
||||||
|
* Deterministic replay MUST be possible given `{Snapshot, LogPrefix}` for each domain.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Normative Invariants
|
||||||
|
|
||||||
|
1. **Determinism:** Reconstructing CURRENT in a domain yields the same visible state given the same snapshot and log prefix.
|
||||||
|
2. **Immutability:** Published artifacts and snapshots are immutable.
|
||||||
|
3. **Domain isolation:** Internal artifacts and snapshots are never visible to other domains.
|
||||||
|
4. **Federation safety:** Cross-domain references are read-only.
|
||||||
|
5. **Snapshot integrity:** Federated snapshots reference only published artifacts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Integration with Other Layers
|
||||||
|
|
||||||
|
| Layer | Role in Federation |
|
||||||
|
| ------------------ | ------------------ |
|
||||||
|
| ASL/1-CORE | Artifact immutability and identity |
|
||||||
|
| ASL/1-CORE-INDEX | Semantic mapping and shadowing |
|
||||||
|
| ASL-STORE-INDEX | Sealing, retention, snapshot pinning |
|
||||||
|
| ASL/LOG/1 | Log-ordered visibility |
|
||||||
|
| ENC-ASL-CORE-INDEX | Domain/visibility metadata in records |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Non-Goals
|
||||||
|
|
||||||
|
* Transport protocols
|
||||||
|
* Network replication
|
||||||
|
* Witness signatures
|
||||||
|
* Domain admission and trust policy
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Summary
|
||||||
|
|
||||||
|
ASL/FEDERATION/1 defines the semantic rules for multi-domain visibility and cross-domain reference. It keeps federation deterministic, snapshot-safe, and read-only across domain boundaries.
|
||||||
170
tier1/asl-federation-replay-1.md
Normal file
170
tier1/asl-federation-replay-1.md
Normal file
|
|
@ -0,0 +1,170 @@
|
||||||
|
# ASL/FEDERATION-REPLAY/1 -- Cross-Node Deterministic Replay
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [federation, replay, determinism, tgk, pel]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/FEDERATION-REPLAY/1`
|
||||||
|
**Layer:** L2 -- Federation replay semantics (no transport)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/FEDERATION/1`
|
||||||
|
* `ASL/LOG/1`
|
||||||
|
* `ASL/1-CORE-INDEX`
|
||||||
|
* `TGK/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/SYSTEM/1` -- unified system view
|
||||||
|
* `ENC-ASL-CORE-INDEX` -- domain metadata
|
||||||
|
* `ASL/DAP/1` -- admission gating
|
||||||
|
* `ASL/POLICY-HASH/1` -- policy compatibility
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/FEDERATION-REPLAY/1 defines **deterministic replay rules** for federated propagation. It does not define network protocols or encodings.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
This document defines how artifacts, PERs, and TGK edges are propagated and replayed across federation nodes while preserving deterministic reconstruction.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Core Inputs
|
||||||
|
|
||||||
|
* **ArtifactKey**: canonical identifier for artifacts and PERs
|
||||||
|
* **SnapshotID**: snapshot boundary for replay
|
||||||
|
* **logseq**: append-only ordering within a domain
|
||||||
|
* **Canonical Edge Key**: TGK edge identity
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Replay Record Requirements
|
||||||
|
|
||||||
|
Each propagated record MUST be replayable without external context. Records MUST carry:
|
||||||
|
|
||||||
|
* `domain_id` (source domain)
|
||||||
|
* `record_type` (artifact, PER, TGK edge, tombstone)
|
||||||
|
* `logseq` (source-domain ordering)
|
||||||
|
* `snapshot_id` and `log_prefix` bounds for which the record is visible
|
||||||
|
* Canonical identity (ArtifactKey or Canonical Edge Key)
|
||||||
|
* Visibility metadata (internal/published, cross-domain source when applicable)
|
||||||
|
|
||||||
|
Records MAY include optional integrity fields (hashes, signatures), but replay MUST
|
||||||
|
remain deterministic without them.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Propagation Rules
|
||||||
|
|
||||||
|
### 4.1 Artifacts and PERs
|
||||||
|
|
||||||
|
* Artifacts and PERs are propagated with their `ArtifactKey` and `logseq`.
|
||||||
|
* Only artifacts visible under a published snapshot MAY be propagated.
|
||||||
|
* Duplicate ArtifactKeys MUST be de-duplicated by identity.
|
||||||
|
* Imported entries MUST preserve origin metadata (domain identity and visibility).
|
||||||
|
|
||||||
|
### 4.2 TGK Edges
|
||||||
|
|
||||||
|
* TGK edges are propagated with their canonical edge identity and `logseq`.
|
||||||
|
* Edge propagation MUST preserve the same snapshot/log visibility constraints as artifacts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Deterministic Replay Ordering
|
||||||
|
|
||||||
|
Replay order MUST be deterministic across nodes:
|
||||||
|
|
||||||
|
1. Sort by `logseq` ascending
|
||||||
|
2. Tie-break by canonical identity (ArtifactKey or Canonical Edge Key)
|
||||||
|
|
||||||
|
This ordering MUST be applied identically by all receivers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Snapshot Bounds
|
||||||
|
|
||||||
|
* Replay MUST be bounded by `{SnapshotID, LogPrefix}`.
|
||||||
|
* Records with `logseq` greater than the replay prefix MUST be ignored.
|
||||||
|
* Replay MUST use the source domain's `{SnapshotID, LogPrefix}` as the bound for imported state.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Federation View Construction
|
||||||
|
|
||||||
|
Receivers construct a federation view by combining:
|
||||||
|
|
||||||
|
1. Local domain state at `{SnapshotID, LogPrefix}`.
|
||||||
|
2. Admitted foreign published state bounded by the source domain's `{SnapshotID, LogPrefix}`.
|
||||||
|
|
||||||
|
Admission and policy compatibility MUST be enforced before any foreign state is admitted.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Tombstones and Shadowing
|
||||||
|
|
||||||
|
* Tombstones MUST be replayed in log order and apply only within their source domain.
|
||||||
|
* A tombstone from domain A MUST NOT shadow artifacts from domain B.
|
||||||
|
* Shadowing is resolved per-domain using ASL/LOG/1 order and ASL/1-CORE-INDEX semantics.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Conflict Handling
|
||||||
|
|
||||||
|
1. **ArtifactKey collision**
|
||||||
|
|
||||||
|
* If bytes match existing artifact: discard duplicate.
|
||||||
|
* If bytes differ: reject and flag conflict.
|
||||||
|
|
||||||
|
2. **TGK edge conflicts**
|
||||||
|
|
||||||
|
* Multiple edges with the same canonical identity are resolved by log order and tombstone rules.
|
||||||
|
|
||||||
|
3. **PER conflicts**
|
||||||
|
|
||||||
|
* PERs with identical inputs and program identity but divergent outputs MUST be rejected.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Replay State and Idempotency
|
||||||
|
|
||||||
|
Replay MUST be idempotent:
|
||||||
|
|
||||||
|
* Re-applying the same record set MUST NOT change the resulting state.
|
||||||
|
* Receivers SHOULD track `{domain_id, logseq}` high-water marks per peer.
|
||||||
|
* Checkpointing MUST be aligned to `{SnapshotID, LogPrefix}` boundaries.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Provenance and Audit
|
||||||
|
|
||||||
|
Receivers SHOULD maintain:
|
||||||
|
|
||||||
|
* Last applied `logseq` per peer
|
||||||
|
* Snapshot provenance tables for applied records
|
||||||
|
|
||||||
|
This supports deterministic audit and replay verification.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Non-Goals
|
||||||
|
|
||||||
|
* Transport protocol selection
|
||||||
|
* Streaming formats
|
||||||
|
* Compression or batching
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 13. Summary
|
||||||
|
|
||||||
|
ASL/FEDERATION-REPLAY/1 defines a deterministic replay ordering and conflict rules to ensure federation is reproducible across nodes and snapshots.
|
||||||
159
tier1/asl-policy-hash-1.md
Normal file
159
tier1/asl-policy-hash-1.md
Normal file
|
|
@ -0,0 +1,159 @@
|
||||||
|
# ASL/POLICY-HASH/1 -- Policy Hash Specification
|
||||||
|
|
||||||
|
Status: Draft
|
||||||
|
Owner: Architecture
|
||||||
|
Version: 0.1.0
|
||||||
|
SoT: No
|
||||||
|
Last Updated: 2025-01-17
|
||||||
|
Tags: [policy, hash, federation, trust]
|
||||||
|
|
||||||
|
**Document ID:** `ASL/POLICY-HASH/1`
|
||||||
|
**Layer:** L2 -- Policy binding semantics (no encoding)
|
||||||
|
|
||||||
|
**Depends on (normative):**
|
||||||
|
|
||||||
|
* `ASL/FEDERATION/1`
|
||||||
|
|
||||||
|
**Informative references:**
|
||||||
|
|
||||||
|
* `ASL/DAM/1` -- Domain Authority Manifest
|
||||||
|
* `ASL/DAP/1` -- Domain admission
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Conventions
|
||||||
|
|
||||||
|
The key words **MUST**, **MUST NOT**, **REQUIRED**, **SHOULD**, and **MAY** are to be interpreted as in RFC 2119.
|
||||||
|
|
||||||
|
ASL/POLICY-HASH/1 defines the logical structure and hashing rules for policy documents. It does not define transport or storage encodings.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Purpose
|
||||||
|
|
||||||
|
The policy hash binds domain rules to snapshots, authority, and federation decisions without embedding mutable policy text into artifacts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Policy Coverage (Normative)
|
||||||
|
|
||||||
|
The policy hash MUST cover semantic constraints that affect correctness or trust:
|
||||||
|
|
||||||
|
1. Publication rules
|
||||||
|
2. Execution rules
|
||||||
|
3. Federation rules
|
||||||
|
4. Retention and GC constraints
|
||||||
|
5. Visibility rules
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Logical Structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
DomainPolicy {
|
||||||
|
version : u32
|
||||||
|
publication_policy : PublicationPolicy
|
||||||
|
execution_policy : ExecutionPolicy
|
||||||
|
federation_policy : FederationPolicy
|
||||||
|
retention_policy : RetentionPolicy
|
||||||
|
visibility_policy : VisibilityPolicy
|
||||||
|
reserved0 : u32
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Section schemas (minimal):
|
||||||
|
|
||||||
|
```text
|
||||||
|
PublicationPolicy {
|
||||||
|
require_signature : bool
|
||||||
|
allowed_roles[] : Role
|
||||||
|
snapshot_required : bool
|
||||||
|
}
|
||||||
|
|
||||||
|
ExecutionPolicy {
|
||||||
|
per_signature_required : bool
|
||||||
|
allowed_roles[] : Role
|
||||||
|
deterministic_only : bool
|
||||||
|
}
|
||||||
|
|
||||||
|
FederationPolicy {
|
||||||
|
export_published_only : bool
|
||||||
|
require_snapshot : bool
|
||||||
|
trusted_domains[] : DomainID
|
||||||
|
}
|
||||||
|
|
||||||
|
RetentionPolicy {
|
||||||
|
gc_unpublished_allowed : bool
|
||||||
|
min_snapshot_retention : u32
|
||||||
|
}
|
||||||
|
|
||||||
|
VisibilityPolicy {
|
||||||
|
internal_hidden : bool
|
||||||
|
published_read_only : bool
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Defaults and Validation (Normative)
|
||||||
|
|
||||||
|
All fields MUST be present. Defaults apply only to explicit values:
|
||||||
|
|
||||||
|
* `allowed_roles[]` MAY be empty (no roles allowed)
|
||||||
|
* `trusted_domains[]` MAY be empty (no domains trusted)
|
||||||
|
* `min_snapshot_retention` MAY be 0 (no minimum)
|
||||||
|
* `reserved0` MUST be 0
|
||||||
|
|
||||||
|
A policy is invalid if any boolean is outside {0,1} or if `version` is unsupported.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Canonicalization Rules (Normative)
|
||||||
|
|
||||||
|
The policy hash MUST be computed from canonical bytes:
|
||||||
|
|
||||||
|
1. Field order fixed
|
||||||
|
2. Arrays sorted lexicographically
|
||||||
|
3. No whitespace or comments
|
||||||
|
4. Integers encoded big-endian
|
||||||
|
5. Booleans encoded as 0x00 or 0x01
|
||||||
|
6. No optional fields omitted; defaults must be explicit
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Hash Computation
|
||||||
|
|
||||||
|
```
|
||||||
|
policy_bytes = CanonicalSerialize(DomainPolicy)
|
||||||
|
policy_hash = HASH(policy_bytes)
|
||||||
|
```
|
||||||
|
|
||||||
|
The hash algorithm is SHA-256 unless explicitly overridden by domain policy.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Storage Locations
|
||||||
|
|
||||||
|
The policy hash SHOULD be stored in:
|
||||||
|
|
||||||
|
* Domain Authority Manifest (DAM)
|
||||||
|
* Snapshot metadata
|
||||||
|
* Federation metadata
|
||||||
|
* Optional PER metadata
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Policy Evolution
|
||||||
|
|
||||||
|
Policy changes MUST NOT mutate history. A new policy requires:
|
||||||
|
|
||||||
|
1. New policy document
|
||||||
|
2. New policy hash
|
||||||
|
3. New DAM
|
||||||
|
4. New snapshots referencing the new hash
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Summary
|
||||||
|
|
||||||
|
ASL/POLICY-HASH/1 defines a minimal, deterministic policy hash that binds domain rules to authority and snapshots without embedding mutable policy text into artifacts.
|
||||||
Loading…
Reference in a new issue