aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/EphemeralRelation.mli
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-09-20 02:21:56 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-09-20 02:21:56 -0300
commit5299669a6de4cffbe7b7a897f582b21a4a0a7785 (patch)
treeb54c41417d53a6a2924d5b3133ef425a9cc19f6a /lib/kernel/EphemeralRelation.mli
parentf53d887d23d7743bc40c3b552c27d9ae30a72acd (diff)
downloadRNT-5299669a6de4cffbe7b7a897f582b21a4a0a7785.tar.gz
RNT-5299669a6de4cffbe7b7a897f582b21a4a0a7785.zip
ephemeral relation kernel object
Diffstat (limited to 'lib/kernel/EphemeralRelation.mli')
-rw-r--r--lib/kernel/EphemeralRelation.mli36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/kernel/EphemeralRelation.mli b/lib/kernel/EphemeralRelation.mli
new file mode 100644
index 0000000..d082394
--- /dev/null
+++ b/lib/kernel/EphemeralRelation.mli
@@ -0,0 +1,36 @@
+module type DERIVATION = sig
+ type plan
+
+ (** the hash of the plan, taken over the branch-local names of its
+ inputs rather than over their content addresses. The idea is to
+ have the same expression denote one object on every branch and
+ at every point in time. *)
+ val identity : plan -> Concepts.Hash.hash
+
+ val describe :
+ plan -> (Protocols.Schematics.relation_description, Concepts.Condition.condition) result
+
+ val modes : plan -> (Concepts.Mode.t, Concepts.Condition.condition) result
+
+ val generate :
+ plan ->
+ Protocols.Generative.binding ->
+ (Protocols.Handle.t, Concepts.Condition.condition) result
+end
+
+module Make (D : DERIVATION) : sig
+ (** unpinned, the identity of the derivation itself; pinned to a
+ branch commit, the identity of that derivation against one
+ reconstructible state, which is the only form for which equal
+ identity implies equal extension. *)
+ val identity : ?pinned:Concepts.Hash.hash -> D.plan -> Concepts.Hash.hash
+
+ (** edges are the handles the derivation reads, which are released
+ when the relation is also. Rejection of a derivation surfaces
+ here instead of when a cursor is being drained. *)
+ val derive :
+ ?pinned:Concepts.Hash.hash ->
+ ?edges:Protocols.Handle.t list ->
+ D.plan ->
+ (Protocols.Handle.t, Concepts.Condition.condition) result
+end