NeoGraph 0.16.0
A C++20 Graph Agent Engine Library — LangGraph for C++
Loading...
Searching...
No Matches
lineage.h
Go to the documentation of this file.
1
5#pragma once
6
7#include <neograph/api.h>
11
12#include <cstdint>
13#include <memory>
14#include <optional>
15#include <string>
16#include <string_view>
17#include <vector>
18
19namespace neograph::program {
20
21class ProgramRunRecord;
22
25 std::string invocation_id;
26 std::string head_id;
27 std::string event_id;
28
29 bool operator==(const ProgramRuntimeStateTransferHookReference&) const = default;
30};
31
32struct ProgramRuntimeStateTransferReceiptData {
33 std::string owner_scope;
34 std::string lineage_id;
35 std::string source_generation_id;
36 std::string source_lineage_head_id;
37 std::string source_run_id;
38 std::string source_run_record_id;
39 std::string source_journal_head;
40 std::uint64_t target_generation = 0;
41 std::string target_run_id;
42 std::string target_initial_run_record_id;
43 std::string target_initial_journal_head;
44 std::vector<std::string> source_context_epoch_ids;
45 std::optional<std::string> target_context_epoch_id;
46 std::vector<ProgramRuntimeStateTransferHookReference> hook_references;
47};
48
50class NEOGRAPH_PROGRAM_API ProgramRuntimeStateTransferReceipt final {
51public:
52 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
53
54 explicit ProgramRuntimeStateTransferReceipt(ProgramRuntimeStateTransferReceiptData data);
55 static ProgramRuntimeStateTransferReceipt parse(std::string_view stored_bytes);
56
57 const std::string& owner_scope() const noexcept;
58 const std::string& lineage_id() const noexcept;
59 const std::string& source_generation_id() const noexcept;
60 const std::string& source_lineage_head_id() const noexcept;
61 const std::string& source_run_id() const noexcept;
62 const std::string& source_run_record_id() const noexcept;
63 const std::string& source_journal_head() const noexcept;
64 std::uint64_t target_generation() const noexcept;
65 const std::string& target_run_id() const noexcept;
66 const std::string& target_initial_run_record_id() const noexcept;
67 const std::string& target_initial_journal_head() const noexcept;
68 const std::vector<std::string>& source_context_epoch_ids() const noexcept;
69 const std::optional<std::string>& target_context_epoch_id() const noexcept;
70 const std::vector<ProgramRuntimeStateTransferHookReference>& hook_references() const noexcept;
71 const std::string& id() const noexcept;
72 std::string serialize_canonical() const;
73
74private:
75 struct Impl;
76 explicit ProgramRuntimeStateTransferReceipt(std::shared_ptr<const Impl> impl);
77 std::shared_ptr<const Impl> impl_;
78};
79
81NEOGRAPH_PROGRAM_API std::string program_run_lineage_id(std::string_view owner_scope,
82 std::string_view root_run_id);
83
84struct ProgramRunGenerationData {
85 std::string owner_scope;
86 std::string lineage_id;
87 std::uint64_t generation = 0;
88 std::string run_id;
89 std::string program_version_id;
90 std::string bundle_id;
91 std::string initial_run_record_id;
92 std::string initial_journal_head;
93 std::optional<std::string> predecessor_generation_id;
94 std::int64_t created_at_ms = 0;
95 std::uint32_t child_depth = 0;
96 std::optional<ProgramReplacementReceipt> replacement_receipt;
97 std::optional<ProgramGraphMigrationReceipt> graph_migration_receipt;
98 std::optional<ProgramRuntimeStateTransferReceipt> runtime_state_transfer_receipt;
99};
100
102class NEOGRAPH_PROGRAM_API ProgramRunGeneration final {
103public:
104 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 4;
105
106 static ProgramRunGeneration create(ProgramRunGenerationData data);
107 static ProgramRunGeneration parse(std::string_view stored_bytes);
108
109 const std::string& owner_scope() const noexcept;
110 const std::string& lineage_id() const noexcept;
111 std::uint64_t generation() const noexcept;
112 const std::string& run_id() const noexcept;
113 const std::string& program_version_id() const noexcept;
114 const std::string& bundle_id() const noexcept;
115 const std::string& initial_run_record_id() const noexcept;
116 const std::string& initial_journal_head() const noexcept;
117 const std::optional<std::string>& predecessor_generation_id() const noexcept;
118 std::int64_t created_at_ms() const noexcept;
119 std::uint32_t child_depth() const noexcept;
120 std::optional<ProgramReplacementReceipt> replacement_receipt() const;
121 std::optional<ProgramGraphMigrationReceipt> graph_migration_receipt() const;
122 std::optional<ProgramRuntimeStateTransferReceipt> runtime_state_transfer_receipt() const;
123 const std::string& id() const noexcept;
124 std::string serialize_canonical() const;
125
126private:
127 struct Impl;
128 explicit ProgramRunGeneration(std::shared_ptr<const Impl> impl);
129 std::shared_ptr<const Impl> impl_;
130};
131
132struct ProgramRunLineageData {
133 std::string owner_scope;
134 std::string lineage_id;
135 std::string root_run_id;
136 std::uint64_t active_generation = 0;
137 std::string active_generation_id;
138 std::string active_run_record_id;
139 std::string active_journal_head;
140 RunBudget remaining_budget;
141 RunBudget inflight_reservation;
142 std::optional<std::string> predecessor_head_id;
143 std::int64_t created_at_ms = 0;
144 std::int64_t updated_at_ms = 0;
146 RunBudget committed_descendant_budget;
147};
148
150class NEOGRAPH_PROGRAM_API ProgramRunLineage final {
151public:
152 static constexpr std::uint32_t STORAGE_SCHEMA_VERSION = 1;
153
154 static ProgramRunLineage create(ProgramRunLineageData data);
155 static ProgramRunLineage parse(std::string_view stored_bytes);
156
157 const std::string& owner_scope() const noexcept;
158 const std::string& lineage_id() const noexcept;
159 const std::string& root_run_id() const noexcept;
160 std::uint64_t active_generation() const noexcept;
161 const std::string& active_generation_id() const noexcept;
162 const std::string& active_run_record_id() const noexcept;
163 const std::string& active_journal_head() const noexcept;
164 RunBudget remaining_budget() const noexcept;
165 RunBudget inflight_reservation() const noexcept;
166 const std::optional<std::string>& predecessor_head_id() const noexcept;
167 std::int64_t created_at_ms() const noexcept;
168 std::int64_t updated_at_ms() const noexcept;
169 RunBudget committed_descendant_budget() const noexcept;
170 const std::string& id() const noexcept;
171 std::string serialize_canonical() const;
172
173private:
174 struct Impl;
175 explicit ProgramRunLineage(std::shared_ptr<const Impl> impl);
176 std::shared_ptr<const Impl> impl_;
177};
178
180NEOGRAPH_PROGRAM_API bool is_valid_program_run_lineage_initial(
181 const ProgramRunLineage& lineage, const ProgramRunGeneration& generation) noexcept;
182
184NEOGRAPH_PROGRAM_API bool does_program_run_generation_bind(
185 const ProgramRunGeneration& generation,
186 const ProgramRunLineage& lineage,
187 const ProgramRunRecord& run) noexcept;
188
194 const ProgramRunLineage& previous,
195 const ProgramRunLineage& next,
196 const std::optional<ProgramRunGeneration>& successor = std::nullopt) noexcept;
197
198} // namespace neograph::program
NEOGRAPH_API export/import macro for shared-library builds.
Immutable identity of one admitted topology generation in a run lineage.
Definition lineage.h:102
Immutable content-addressed head of one stable run lineage.
Definition lineage.h:150
Deep-owned, content-addressed run snapshot used for reconnect and CAS publication.
Definition run_record.h:119
Immutable content-addressed runtime-state evidence for a successor generation.
Definition lineage.h:50
Immutable source capsules for prepared GraphEngine migration.
NEOGRAPH_PROGRAM_API bool does_program_run_generation_bind(const ProgramRunGeneration &generation, const ProgramRunLineage &lineage, const ProgramRunRecord &run) noexcept
Validates the active generation's immutable binding to a run snapshot.
NEOGRAPH_PROGRAM_API std::string program_run_lineage_id(std::string_view owner_scope, std::string_view root_run_id)
Derives the stable owner-scoped lineage identity for a root run.
NEOGRAPH_PROGRAM_API bool is_valid_program_run_lineage_transition(const ProgramRunLineage &previous, const ProgramRunLineage &next, const std::optional< ProgramRunGeneration > &successor=std::nullopt) noexcept
Validates a same-generation head update or an exact successor transition.
NEOGRAPH_PROGRAM_API bool is_valid_program_run_lineage_initial(const ProgramRunLineage &lineage, const ProgramRunGeneration &generation) noexcept
Validates the first durable head of a lineage against generation one.
Exact durable handoff receipts for Program generation replacement.
Immutable outcome of one Program run attempt.
Exact durable hook head retained across a runtime-state transfer.
Definition lineage.h:24