Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
7cf8314
Phase 64: add managed timer fulfillment contracts
hotzenplotz5 Aug 16, 2026
15b5411
noop
hotzenplotz5 Aug 16, 2026
54bd379
Phase 64: stage managed timer create readback verifier
hotzenplotz5 Aug 16, 2026
d9028d6
Phase 64: complete managed timer create readback verifier
hotzenplotz5 Aug 16, 2026
b5084a5
Phase 64: build VDR managed create readback evidence
hotzenplotz5 Aug 16, 2026
7a1f642
Phase 64: build managed VDR timer create request
hotzenplotz5 Aug 16, 2026
d510f82
Fix native timer specification boolean fingerprint encoding
hotzenplotz5 Aug 16, 2026
35ca843
Fix managed VDR create request architecture marker
hotzenplotz5 Aug 16, 2026
6e648b1
Phase 64: fence timer assignment fulfillment state
hotzenplotz5 Aug 16, 2026
75c160b
Fix managed CREATE evidence architecture marker
hotzenplotz5 Aug 16, 2026
495b9d2
Fix TimerAssignment fulfillment mutation guard
hotzenplotz5 Aug 16, 2026
a24e8cd
Fix managed CREATE verification documentation guard
hotzenplotz5 Aug 16, 2026
5a8d766
Allow reviewed CREATE inventory evidence consumer
hotzenplotz5 Aug 16, 2026
62951be
Phase 64: reserve immutable mutation payload atomically
hotzenplotz5 Aug 16, 2026
85ead8b
Phase 64: prepare durable managed timer create operation
hotzenplotz5 Aug 16, 2026
f4ba005
Phase 64: reserve Agent commands before activation
hotzenplotz5 Aug 16, 2026
41d2046
Allow Agent command reservation repository SQLite boundary
hotzenplotz5 Aug 16, 2026
a3caec7
Fix Phase 64 command reservation test linkage
hotzenplotz5 Aug 16, 2026
94052e2
Add strict Phase 64 native Timer CREATE contract
hotzenplotz5 Aug 16, 2026
73f9bef
Link Phase 64 native Timer CREATE contract
hotzenplotz5 Aug 16, 2026
c45986a
Validate strict Phase 64 native Timer CREATE payload
hotzenplotz5 Aug 16, 2026
f5146cf
Test Phase 64 native Timer CREATE Agent contract
hotzenplotz5 Aug 16, 2026
d20ec4a
Reserve Phase 64 native Timer CREATE command durably
hotzenplotz5 Aug 16, 2026
74f57c1
Test Phase 64 native Timer CREATE reservation
hotzenplotz5 Aug 16, 2026
9ebe2ff
Fence Phase 64 CREATE dispatch to exact reservation
hotzenplotz5 Aug 16, 2026
466b855
Test Phase 64 native Timer CREATE dispatch state
hotzenplotz5 Aug 16, 2026
fb4a784
Fence Phase 64 CREATE command delivery to provider selection
hotzenplotz5 Aug 16, 2026
423617f
Keep Phase 64 CREATE Agent advertisement closed
hotzenplotz5 Aug 16, 2026
ef7aa8d
Test Phase 64 native Timer CREATE delivery fences
hotzenplotz5 Aug 16, 2026
ef01b95
Run Phase 64 CREATE delivery fence tests
hotzenplotz5 Aug 16, 2026
3bfc292
Activate only exact dispatching CREATE reservation
hotzenplotz5 Aug 16, 2026
3df36ca
Fix Phase 64 CREATE activation guard marker
hotzenplotz5 Aug 16, 2026
e448142
Persist Phase 64 CREATE local starting state
hotzenplotz5 Aug 16, 2026
4380907
Test Phase 64 CREATE local state
hotzenplotz5 Aug 16, 2026
e367a06
Keep CREATE local-state tamper proof assignment-bound
hotzenplotz5 Aug 16, 2026
842cb91
Allow reviewed Phase 64 CREATE activation boundary
hotzenplotz5 Aug 16, 2026
06bb3b4
Harden Phase 64 CREATE recovery to reconcile only
hotzenplotz5 Aug 16, 2026
c9531fe
Allow reviewed Phase 64 CREATE activation regression
hotzenplotz5 Aug 16, 2026
59c8df9
Bind Phase 64 CREATE local state to command assignment
hotzenplotz5 Aug 16, 2026
2bcc8eb
Fix Phase 64 timer fulfillment CI wiring
hotzenplotz5 Aug 16, 2026
055973e
Add fenced native Timer CREATE executor path
hotzenplotz5 Aug 16, 2026
7022a72
Add private SuiteBridge Timer CREATE transport
hotzenplotz5 Aug 16, 2026
77004d2
WIP: add SuiteBridge NTCREATE command service
hotzenplotz5 Aug 16, 2026
3f6e055
Add SuiteBridge native Timer CREATE mutation callback
hotzenplotz5 Aug 16, 2026
44a9ed1
Wire native Timer transports into the Backend Agent
hotzenplotz5 Aug 16, 2026
512a30d
Preserve managed correlation on native Timer CREATE
hotzenplotz5 Aug 16, 2026
ebc7f8d
Add managed native Timer UPDATE and TOGGLE operations
hotzenplotz5 Aug 16, 2026
0c6d0c3
Add restart-safe TimerIntent provisioning entry point
hotzenplotz5 Aug 16, 2026
67a31e4
Add private native Timer UPDATE and TOGGLE mutation service
hotzenplotz5 Aug 16, 2026
fd01d8c
Add durable Agent contracts for native Timer modification
hotzenplotz5 Aug 16, 2026
b236795
Wire native Timer UPDATE and TOGGLE through the Backend Agent
hotzenplotz5 Aug 16, 2026
a7fcd63
Add fenced control-plane assignment for Timer modification
hotzenplotz5 Aug 16, 2026
8cd9dbd
Fix Timer modification CI integration
hotzenplotz5 Aug 16, 2026
4382d60
Carry Timer modification commands through delivery
hotzenplotz5 Aug 16, 2026
b9efe6e
Complete Timer modification command validation
hotzenplotz5 Aug 16, 2026
ba47c22
Restore independent CREATE and modify command paths
hotzenplotz5 Aug 16, 2026
f820c8e
Strengthen native Timer modify contract regression
hotzenplotz5 Aug 16, 2026
0119ae7
Fix native Timer modify runtime linkage
hotzenplotz5 Aug 16, 2026
1cab6d9
Fix shared assignment column reference
hotzenplotz5 Aug 16, 2026
9cca9ea
Make Phase 63 guard aware of Timer modify successor
hotzenplotz5 Aug 16, 2026
d95888b
Complete native Timer modify dispatch and verification
hotzenplotz5 Aug 16, 2026
9598764
Link Timer modify validation into isolated Agent tests
hotzenplotz5 Aug 16, 2026
eb609e1
Complete native Timer CREATE outcome and binding flow
hotzenplotz5 Aug 16, 2026
e11436f
Enter CREATE completion test through provisioning
hotzenplotz5 Aug 16, 2026
662e16f
Let repository issue CREATE assignment epoch
hotzenplotz5 Aug 16, 2026
c66c2f6
Add exact-candidate Phase 64 yaVDR acceptance
hotzenplotz5 Aug 16, 2026
9d4ef53
Fix CREATE completion intent fixture
hotzenplotz5 Aug 17, 2026
4667715
Validate repository-owned TimerIntent revisions
hotzenplotz5 Aug 17, 2026
9cc37cd
Add native Timer modify failure diagnostics
hotzenplotz5 Aug 17, 2026
3b296e0
Serialize native Timer modify kind canonically
hotzenplotz5 Aug 17, 2026
e5b3f30
Let repository issue modify assignment epochs
hotzenplotz5 Aug 17, 2026
53bbfab
Link modify local state into extension tests
hotzenplotz5 Aug 17, 2026
7ea3ce7
Align SuiteBridge foundation contract version
hotzenplotz5 Aug 17, 2026
7466b17
Repair SuiteBridge capability contract guard
hotzenplotz5 Aug 17, 2026
692ac34
Make Phase 64 acceptance fail closed
hotzenplotz5 Aug 17, 2026
312b809
Activate accepted SuiteBridge Timer commands
hotzenplotz5 Aug 17, 2026
5a5b60b
Fix Timer activation guard boundary
hotzenplotz5 Aug 17, 2026
dfca24f
Allow gated Timer availability in Phase 63 guard
hotzenplotz5 Aug 17, 2026
7bbe10b
Make Timer delete assignment guard successor-aware
hotzenplotz5 Aug 17, 2026
25c8257
Fix Timer capability merge compilation
hotzenplotz5 Aug 17, 2026
4c51d8b
Make Phase 63 delivery guard Timer-successor aware
hotzenplotz5 Aug 17, 2026
45977b9
Accept activated Timer types in Agent poll parser
hotzenplotz5 Aug 17, 2026
9c406fe
Preserve Phase 63 delivery contract marker
hotzenplotz5 Aug 17, 2026
4b1ac2c
Preserve stale Timer provider diagnostics
hotzenplotz5 Aug 17, 2026
b2f4890
Restore executable modes for Phase 64 tools
hotzenplotz5 Aug 17, 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
26 changes: 26 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,42 @@ include mk/phase62-idle-runtime-acceptance.mk
include mk/phase62-retention-runtime-acceptance.mk
include mk/phase63-runtime-acceptance.mk
include mk/agent-tests.mk
include mk/phase64-backend-agent-command-reservation-tests.mk
include mk/phase64-native-timer-create-agent-contract-tests.mk
include mk/phase64-native-timer-create-reservation-tests.mk
include mk/phase64-native-timer-create-dispatch-state-tests.mk
include mk/phase64-native-timer-create-outcome-completion-tests.mk
include mk/phase64-native-timer-create-delivery-tests.mk
include mk/phase64-native-timer-create-activation-tests.mk
include mk/phase64-native-timer-create-local-state-tests.mk
include mk/phase64-native-timer-create-executor-tests.mk
include mk/phase64-suitebridge-native-timer-create-transport-tests.mk
include mk/phase64-suitebridge-native-timer-create-command-service-tests.mk
include mk/phase64-suitebridge-native-timer-create-real-mutation-tests.mk
include mk/phase64-suitebridge-native-timer-command-path-wiring-tests.mk
include mk/phase63-local-provider-tests.mk
include mk/phase64-timer-intent-tests.mk
include mk/phase64-timer-intent-application-tests.mk
include mk/phase64-timer-assignment-fulfillment-tests.mk
include mk/phase64-native-timer-specification-tests.mk
include mk/phase64-vdr-timer-managed-correlation-tests.mk
include mk/phase64-vdr-managed-timer-create-request-tests.mk
include mk/phase64-native-timer-readback-expectation-tests.mk
include mk/phase64-native-timer-create-readback-expectation-tests.mk
include mk/phase64-native-timer-create-readback-evidence-tests.mk
include mk/phase64-vdr-managed-timer-create-readback-evidence-tests.mk
include mk/phase64-native-timer-create-readback-verification-tests.mk
include mk/phase64-native-timer-present-readback-verification-tests.mk
include mk/phase64-native-timer-inventory-evidence-tests.mk
include mk/phase64-restfulapi-native-timer-inventory-reader-tests.mk
include mk/phase64-native-timer-binding-absence-application-tests.mk
include mk/phase64-native-timer-absence-readback-expectation-tests.mk
include mk/phase64-native-timer-absence-readback-verification-tests.mk
include mk/phase64-mutation-operation-repository-tests.mk
include mk/phase64-native-timer-create-operation-preparation-tests.mk
include mk/phase64-native-timer-modify-operation-tests.mk
include mk/phase64-native-timer-modify-dispatch-tests.mk
include mk/phase64-managed-timer-fulfillment-acceptance.mk
include mk/phase64-native-timer-delete-operation-completion-tests.mk
include mk/phase64-native-timer-delete-operation-preparation-tests.mk
include mk/phase64-native-timer-delete-dispatch-tests.mk
Expand Down
31 changes: 31 additions & 0 deletions apps/agent/main.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#include "BackendAgentClient.h"
#include "BackendAgentCommandClient.h"
#include "SuiteBridgeNativeTimerCreateTransport.h"
#include "SuiteBridgeNativeTimerDeleteTransport.h"
#include "SuiteBridgeNativeTimerModifyTransport.h"
#include "SuiteBridgeSvdrpTransport.h"

#include <algorithm>
Expand Down Expand Up @@ -120,6 +123,34 @@ int main(int argc, char** argv)
return 78;
}

std::unique_ptr<vdrsuite::agent::SuiteBridgeNativeTimerCreateTransport>
nativeTimerCreateTransport;
std::unique_ptr<vdrsuite::agent::SuiteBridgeNativeTimerDeleteTransport>
nativeTimerDeleteTransport;
std::unique_ptr<vdrsuite::agent::SuiteBridgeNativeTimerModifyTransport>
nativeTimerModifyTransport;
if (!config.suiteBridgeHost.empty())
{
vdrsuite::agent::SuiteBridgeSvdrpTransportConfig timerTransportConfig;
timerTransportConfig.host = config.suiteBridgeHost;
timerTransportConfig.port = config.suiteBridgePort;
nativeTimerCreateTransport = std::make_unique<
vdrsuite::agent::SuiteBridgeNativeTimerCreateTransport>(
timerTransportConfig);
nativeTimerDeleteTransport = std::make_unique<
vdrsuite::agent::SuiteBridgeNativeTimerDeleteTransport>(
timerTransportConfig);
nativeTimerModifyTransport = std::make_unique<
vdrsuite::agent::SuiteBridgeNativeTimerModifyTransport>(
timerTransportConfig);
config.nativeTimerCreateTransport =
nativeTimerCreateTransport.get();
config.nativeTimerDeleteTransport =
nativeTimerDeleteTransport.get();
config.nativeTimerModifyTransport =
nativeTimerModifyTransport.get();
}

std::unique_ptr<vdrsuite::agent::SuiteBridgeSvdrpTransport> nativeTransport;
if (nativeProbe)
{
Expand Down
15 changes: 15 additions & 0 deletions core/agent/include/BackendAgentClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@
#include <string>
#include <vector>

namespace vdrsuite::agent
{
class IBackendAgentNativeTimerCreateTransport;
class IBackendAgentNativeTimerDeleteTransport;
class IBackendAgentNativeTimerModifyTransport;
}

struct BackendAgentClientConfig
{
std::string controlPlaneUrl;
Expand All @@ -19,6 +26,14 @@ struct BackendAgentClientConfig
std::vector<std::string> adapters;
std::vector<std::string> observationDomains = {"backend-health"};
std::vector<std::string> commandTypes;
std::string suiteBridgeHost;
int suiteBridgePort = 0;
vdrsuite::agent::IBackendAgentNativeTimerCreateTransport*
nativeTimerCreateTransport = nullptr;
vdrsuite::agent::IBackendAgentNativeTimerDeleteTransport*
nativeTimerDeleteTransport = nullptr;
vdrsuite::agent::IBackendAgentNativeTimerModifyTransport*
nativeTimerModifyTransport = nullptr;
int heartbeatIntervalSeconds = 30;
int reconnectInitialSeconds = 1;
int reconnectMaximumSeconds = 30;
Expand Down
4 changes: 4 additions & 0 deletions core/agent/include/BackendAgentCommandClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ namespace vdrsuite::agent
{
class IBackendAgentNativeProbeTransport;
class IBackendAgentNativeTimerDeleteTransport;
class IBackendAgentNativeTimerCreateTransport;
class IBackendAgentNativeTimerModifyTransport;
}

struct BackendAgentCommandClientConfig
Expand All @@ -19,6 +21,8 @@ struct BackendAgentCommandClientConfig
std::vector<std::string> commandTypes;
vdrsuite::agent::IBackendAgentNativeProbeTransport* nativeProbeTransport = nullptr;
vdrsuite::agent::IBackendAgentNativeTimerDeleteTransport* nativeTimerDeleteTransport = nullptr;
vdrsuite::agent::IBackendAgentNativeTimerCreateTransport* nativeTimerCreateTransport = nullptr;
vdrsuite::agent::IBackendAgentNativeTimerModifyTransport* nativeTimerModifyTransport = nullptr;
};

struct BackendAgentCommandClientContext
Expand Down
1 change: 1 addition & 0 deletions core/agent/include/BackendAgentCommandDelivery.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class BackendAgentCommandRepository
const BackendAgentCommandAssignment& assignment,
const vdrsuite::agent::BackendAgentLocalProviderSelection* selection = nullptr);
bool ensureNativeTimerDeleteAssignmentSchema();
bool ensureNativeTimerModifyAssignmentSchema();
std::optional<BackendAgentCommandAssignment> findAssignmentForOperation(
const std::string& backendId,
const std::string& operationId,
Expand Down
95 changes: 95 additions & 0 deletions core/agent/include/BackendAgentCommandReservation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#pragma once

#include "BackendAgentCommand.h"
#include "BackendAgentLocalProvider.h"

#include <optional>
#include <string>

class BackendAgentCommandRepository;
class Database;

enum class BackendAgentCommandReservationStatus
{
reserved,
alreadyReserved,
activated,
alreadyActivated,
notFound,
conflict,
storageError,
invalid,
};

struct BackendAgentCommandReservation
{
BackendAgentCommandAssignment assignment;
bool localProviderSelectionPresent = false;
vdrsuite::agent::BackendAgentLocalProviderSelection localProviderSelection;
std::string assignmentFingerprint;
std::string localProviderSelectionIdentity;
};

struct BackendAgentCommandReservationResult
{
BackendAgentCommandReservationStatus status =
BackendAgentCommandReservationStatus::storageError;
BackendAgentCommandReservation reservation;

bool ok() const
{
return status == BackendAgentCommandReservationStatus::reserved
|| status == BackendAgentCommandReservationStatus::alreadyReserved;
}
};

struct BackendAgentCommandActivationResult
{
BackendAgentCommandReservationStatus status =
BackendAgentCommandReservationStatus::storageError;
BackendAgentCommandAssignment assignment;

bool ok() const
{
return status == BackendAgentCommandReservationStatus::activated
|| status == BackendAgentCommandReservationStatus::alreadyActivated;
}
};

class BackendAgentCommandReservationRepository
{
public:
explicit BackendAgentCommandReservationRepository(Database& database);

bool ensureSchema();

BackendAgentCommandReservationResult reserve(
const BackendAgentCommandAssignment& assignment,
const vdrsuite::agent::BackendAgentLocalProviderSelection* selection = nullptr);

BackendAgentCommandReservationResult findByCommandId(
const std::string& commandId) const;

BackendAgentCommandReservationResult findForOperation(
const std::string& backendId,
const std::string& operationId,
const std::string& commandType) const;

private:
Database& database_;
};

class BackendAgentCommandReservationActivationService
{
public:
BackendAgentCommandReservationActivationService(
BackendAgentCommandReservationRepository& reservationRepository,
BackendAgentCommandRepository& commandRepository);

BackendAgentCommandActivationResult activate(
const std::string& commandId);

private:
BackendAgentCommandReservationRepository& reservationRepository_;
BackendAgentCommandRepository& commandRepository_;
};
28 changes: 28 additions & 0 deletions core/agent/include/BackendAgentCommandStateExtension.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
#pragma once

#include "BackendAgentCommand.h"
#include "BackendAgentNativeTimerCreateLocalState.h"
#include "BackendAgentNativeTimerDeleteLocalState.h"
#include "BackendAgentNativeTimerModifyLocalState.h"

#include <cstdint>
#include <string>

namespace vdrsuite::agent
{

inline constexpr const char* kBackendAgentNativeTimerCreateLocalStateExtensionType =
"vdr.timer.create.local-state.v1";
inline constexpr const char* kBackendAgentNativeTimerDeleteLocalStateExtensionType =
"vdr.timer.delete.local-state.v1";
inline constexpr const char* kBackendAgentNativeTimerModifyLocalStateExtensionType =
"vdr.timer.modify.local-state.v1";

struct BackendAgentCommandStateExtension
{
Expand Down Expand Up @@ -42,6 +48,17 @@ bool backendAgentCommandStateExtensionValidateSupported(
const BackendAgentCommandAssignment& assignment,
std::string& reasonCode);

std::string backendAgentNativeTimerCreateCommandStateExtension(
const BackendAgentCommandAssignment& assignment,
const BackendAgentNativeTimerCreateLocalState& state,
std::string& reasonCode);

bool backendAgentNativeTimerCreateParseCommandStateExtension(
const std::string& encoded,
const BackendAgentCommandAssignment& assignment,
BackendAgentNativeTimerCreateLocalState& state,
std::string& reasonCode);

std::string backendAgentNativeTimerDeleteCommandStateExtension(
const BackendAgentCommandAssignment& assignment,
const BackendAgentNativeTimerDeleteLocalState& state,
Expand All @@ -53,4 +70,15 @@ bool backendAgentNativeTimerDeleteParseCommandStateExtension(
BackendAgentNativeTimerDeleteLocalState& state,
std::string& reasonCode);

std::string backendAgentNativeTimerModifyCommandStateExtension(
const BackendAgentCommandAssignment& assignment,
const BackendAgentNativeTimerModifyLocalState& state,
std::string& reasonCode);

bool backendAgentNativeTimerModifyParseCommandStateExtension(
const std::string& encoded,
const BackendAgentCommandAssignment& assignment,
BackendAgentNativeTimerModifyLocalState& state,
std::string& reasonCode);

}
100 changes: 100 additions & 0 deletions core/agent/include/BackendAgentNativeTimerCreate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#pragma once

#include "BackendAgentLocalProvider.h"

#include <cstdint>
#include <string>

namespace vdrsuite::agent
{

constexpr const char* kBackendAgentNativeTimerCreateCommandType = "vdr.timer.create";
constexpr const char* kBackendAgentNativeTimerCreateAuthorityDomain = "vdr.timer";
constexpr const char* kBackendAgentNativeTimerCreateCapability = "vdr.timer.create";
constexpr const char* kBackendAgentNativeTimerCreateProviderId = "suitebridge:local";
constexpr const char* kBackendAgentNativeTimerCreateProviderKind = "suitebridge";
constexpr std::uint64_t kBackendAgentNativeTimerCreatePayloadVersion = 1;

struct BackendAgentNativeTimerCreateSpecification
{
std::string channelId;
std::string title;
std::string directory;
std::string day;
std::string weekdays = "-------";
std::string startTime;
std::string endTime;
std::int32_t priority = 50;
std::int32_t lifetime = 99;
bool enabled = true;
bool vps = false;
};

struct BackendAgentNativeTimerCreateCommand
{
std::string commandId;
std::string requestFingerprint;
std::string operationId;
std::string operationRevision;
std::string timerAssignmentId;
std::string expectedAssignmentRevision;
std::string expectedIntentRevision;
std::uint64_t assignmentEpoch = 0;
std::string nativeTimerBindingId;
std::string expectedSpecificationFingerprint;
std::string jobId;
std::string attemptId;
std::uint64_t claimEpoch = 0;
std::string backendId;
std::string agentId;
std::string agentInstanceId;
std::uint64_t backendGeneration = 0;
std::int64_t controlPlaneClaimedAt = 0;
BackendAgentNativeTimerCreateSpecification specification;
BackendAgentLocalProviderSelection localProviderSelection;
};

enum class BackendAgentNativeTimerCreateOutcomeCategory
{
rejectedWithoutEffect,
acceptedUnverified,
outcomeUnknown,
};

struct BackendAgentNativeTimerCreateEvidence
{
std::string commandId;
std::string requestFingerprint;
std::string operationId;
std::string operationRevision;
std::string timerAssignmentId;
std::string nativeTimerBindingId;
std::string jobId;
std::string attemptId;
std::uint64_t claimEpoch = 0;
std::string backendId;
std::string agentId;
std::string agentInstanceId;
std::uint64_t backendGeneration = 0;
std::string providerInstanceEpoch;
std::int64_t localStartingPersistedAt = 0;
BackendAgentNativeTimerCreateOutcomeCategory outcome =
BackendAgentNativeTimerCreateOutcomeCategory::outcomeUnknown;
std::int64_t dispatchStartedAt = 0;
std::int64_t completedAt = 0;
std::string evidenceReference;
};

bool backendAgentNativeTimerCreateSpecificationValid(
const BackendAgentNativeTimerCreateSpecification& specification);
std::string backendAgentNativeTimerCreateSpecificationFingerprint(
const BackendAgentNativeTimerCreateSpecification& specification);
bool backendAgentNativeTimerCreateValidCommand(
const BackendAgentNativeTimerCreateCommand& command,
std::string& reasonCode);
bool backendAgentNativeTimerCreateEvidenceMatches(
const BackendAgentNativeTimerCreateEvidence& evidence,
const BackendAgentNativeTimerCreateCommand& command,
std::string& reasonCode);

} // namespace vdrsuite::agent
Loading
Loading