6.1 KiB
Great — this is the right moment to define it, because everything underneath (artifacts, DAGs, indexes, snapshots, logs) is now solid.
What follows is a clean, minimal, normative ASL-STORE put/get contract that:
- Sits between ASL-CORE / ASL-CORE-INDEX and any concrete storage engine
- Is compatible with your snapshot + log semantics
- Does not assume classical vs quantum
- Makes caching, deduplication, and replay possible
- Avoids over-specifying performance or layout
Think of this as the membrane between semantics and mechanics.
ASL-STORE — Put/Get Contract (Normative)
1. Purpose
ASL-STORE defines the operational contract by which:
- Artifacts are materialized and stored
- Artifact content becomes visible via the ASL-CORE-INDEX
- Stored content is retrieved deterministically
ASL-STORE answers exactly two questions:
PUT: How does an artifact become stored and indexed? GET: How are bytes retrieved once indexed?
Nothing more.
2. Scope
ASL-STORE defines:
-
The PUT lifecycle
-
The GET lifecycle
-
Required interactions with:
- Content Index (ASL-CORE-INDEX)
- Structural DAG
- Materialization cache
-
Visibility and determinism rules
ASL-STORE does not define:
- Block allocation strategy
- File layout
- IO APIs
- Concurrency primitives
- Caching policies
- Garbage collection
- Replication mechanics
3. Actors and Dependencies
ASL-STORE operates in the presence of:
- Artifact DAG (SID-addressed)
- Materialization Cache (
SID → CID, optional) - Content Index (
CID → ArtifactLocation) - Block Store (opaque byte storage)
- Snapshot + Log (for index visibility)
ASL-STORE must not bypass the Content Index.
4. PUT Contract
4.1 PUT Signature (Semantic)
put(artifact) → (CID, IndexState)
Where:
artifactis an ASL artifact (possibly lazy, possibly quantum)CIDis the semantic content identityIndexState = (SnapshotID, LogPosition)after the put
4.2 PUT Semantics (Step-by-step)
The following steps are logically ordered. An implementation may optimize, but may not violate the semantics.
Step 1 — Structural registration (mandatory)
- The artifact must be registered in the Structural Index (SID → DAG).
- If an identical SID already exists, it must be reused.
This guarantees derivation identity independent of storage.
Step 2 — CID resolution (lazy, cache-aware)
-
If
(SID → CID)exists in the Materialization Cache:- Use it.
-
Otherwise:
- Materialize the artifact DAG
- Compute the CID
- Cache
(SID → CID)
Materialization may recursively invoke child artifacts.
Step 3 — Deduplication check (mandatory)
-
Lookup
CIDin the Content Index at CURRENT. -
If an entry exists:
- No bytes are written
- No new index entry is required
- PUT completes successfully
This is global deduplication.
Step 4 — Physical storage (conditional)
If no existing entry exists:
-
Bytes corresponding to
CIDmust be written to a block -
A concrete
ArtifactLocationis produced:ArtifactLocation = Sequence[BlockSlice] BlockSlice = (BlockID, offset, length)
No assumptions are made about block layout.
Step 5 — Index mutation (mandatory)
-
Append a PUT log entry to the Content Index:
CID → ArtifactLocation -
The entry is not visible until the log position is ≤ CURRENT.
This is the only moment storage becomes visible.
4.3 PUT Guarantees
After successful PUT:
-
The artifact’s CID:
- Is stable
- Is retrievable
- Will resolve to immutable bytes
-
The Content Index state:
- Advances monotonically
- Is replayable
-
Repeating PUT with the same artifact:
- Is idempotent
5. GET Contract
5.1 GET Signature (Semantic)
get(CID, IndexState?) → bytes | NOT_FOUND
Where:
-
CIDis the content identity -
IndexStateis optional:- Defaults to CURRENT
- May specify
(SnapshotID, LogPosition)
5.2 GET Semantics
-
Resolve
CID → ArtifactLocationusing:Index(snapshot, log_prefix) -
If no entry exists:
- Return
NOT_FOUND
- Return
-
Otherwise:
- Read exactly
(length)bytes from(BlockID, offset) - Return bytes verbatim
- Read exactly
No interpretation is applied.
5.3 GET Guarantees
-
Returned bytes are:
- Immutable
- Deterministic
- Content-addressed
-
GET never triggers materialization
-
GET never mutates state
6. Visibility Rules
An index entry is visible if and only if:
- The referenced block is sealed
- The log entry position ≤ CURRENT log position
- The snapshot + log prefix includes the entry
ASL-STORE must respect these rules strictly.
7. Failure Semantics (Minimal)
ASL-STORE must guarantee:
- No visible index entry points to missing or mutable bytes
- Partial writes must not become visible
- Replaying snapshot + log after crash yields a valid index
No stronger guarantees are required at this level.
8. Determinism Contract
For fixed:
- SnapshotID
- LogPosition
- Artifact DAG
- Hash algorithms
ASL-STORE guarantees:
- Same CID
- Same ArtifactLocation resolution
- Same GET results
This is the foundation for:
- Federation
- Replication
- Provenance
- Certification
9. Relationship to q-bits (Explicit)
ASL-STORE:
-
Is agnostic to q-bits
-
Sees only:
- CIDs
- Bytes
-
Does not care how CIDs were derived
Quantum artifacts affect materialization, not storage semantics.
10. Summary (Mental Model)
You can summarize ASL-STORE like this:
PUT = “Make this artifact real, once, forever” GET = “Given identity and time, give me the bytes”
Everything else is someone else’s problem — by design.
If you want, next we can:
- define crash consistency boundaries
- add federated PUT/GET
- define certificates binding DAG → CID → Snapshot
- show how LLM outputs become artifacts
- or formalize overlay indexes (concepts, domains, ontologies)
This layer is now solid enough to build anything above it.