Generic durable orchestration engine for Moon Suite
Dependencies
Platform · local alpha orchestration engine. Read the product contract for the non-agent boundary, adapter requirements, recovery model and release gates.
moonflow import-graph <workspace> <graph.json>
moonflow status <workspace> <run-id>
moonflow transition <workspace> <run-id> <work-item-id> <action> <recorded-at> [detail]
moonflow advance <workspace> <run-id> <recorded-at>
moonflow submit-attempt <workspace> <run-id> <request.json>
moonflow reconcile-attempt <workspace> <run-id> <result.json>
moonflow review-outcome <workspace> <run-id> <workspace-relative-review-receipt>
moonflow revise-run <workspace> <parent-run-id> <child-graph-artifact> <proposal-artifact> <migration-id> <recorded-at>
moonflow select-adapter <workspace> <capabilities-artifact> <requirement-artifact>
moonflow prepare-next <workspace> <run-id> <capabilities-artifact> <recorded-at>
moonflow complete-artifacts <workspace> <run-id> <work-item-id> <recorded-at> <artifact>...
moonflow bundle-evidence <workspace> <bundle-spec-artifact> <recorded-at>
moonflow run-unattended <workspace> <graph-artifact> <capabilities-artifact> <manifest-artifact> <envelope-artifact> <usage-artifact> <recorded-at>
moonflow validate-capability <capability.json>
moonflow compile-capability-catalog <source-bundle.json>
moonflow validate-work-graph-capabilities <graph.json> <catalog.json> <evaluated-at>
moonflow import-conformant-graph <workspace> <graph.json> <catalog.json> <evaluated-at>
moonflow receive-operator-receipt <workspace> <run-id> <handoff-token> <submission-artifact>
moonflow recover-operator-receipts <workspace> <run-id>
moonflow operator-receiver-status <workspace> <run-id> <handoff-token>scripts/install_moonsuite_runtime.sh ~/moonsuitepython3 scripts/unattended_recovery_smoke.py harness \
_build/native/debug/build/cmd/main/main.exemoon run cmd/main -- ordered-http-json \
fixtures/ordered-http-json.config.json \
/path/to/new-receipt.json{
"contract_version": "moonflow.ordered_http_json.v2",
"transfer_id": "example-ordered-transfer-v1",
"source_url": "http://127.0.0.1:4100/api/bundles/example",
"expected_source_digest": "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"max_response_bytes": 1048576,
"max_attempts": 3,
"retry_delay_ms": 250,
"steps": [
{"field": "record", "destination_url": "http://127.0.0.1:4200/api/ingress/records"},
{"field": "envelope", "destination_url": "http://127.0.0.1:4200/api/ingress/envelopes"}
]
}moon check --target native --deny-warn
moon test --target native --deny-warn
moon info
moon fmtpub(all) suberror AdapterContractError {
InvalidAdapterRequest(Array[String])
InvalidAdapterResult(Array[String])
AdapterIdentityMismatch(field~ : String, expected~ : String, actual~ : String)
AdapterRuntimeItemUnavailable(String)
AdapterRuntimeItemNotReady(item_id~ : String, status~ : String)
AdapterAttemptUnavailable(String)
AdapterReceiptConflict(String)
} derive(Eq, ToJson, Debug)pub(all) suberror FlowError {
EmptyEventId
EmptyRunId
InvalidSequence(expected~ : Int, actual~ : Int)
ConflictingDuplicateEvent(String)
RunIdMismatch(expected~ : String, actual~ : String)
MissingWorkItem(String)
DuplicateWorkItem(String)
InvalidTransition(item_id~ : String, from~ : String, event~ : String)
DependencyNotAccepted(item_id~ : String, dependency_id~ : String)
MissingArtifactId(String)
MissingAuthorityId(String)
MissingRunSource(String)
MissingDeclarationId(String)
MissingAcceptanceCriteria(String)
InvalidAuthority(item_id~ : String, authority~ : String)
SourceContextMismatch(field~ : String, expected~ : String, actual~ : String)
MissingAttemptField(item_id~ : String, field~ : String)
AttemptIdentityMismatch(item_id~ : String, expected~ : String, actual~ : String)
UnsupportedAttemptStatus(item_id~ : String, status~ : String)
MissingAcceptanceReview(String)
MissingAcceptanceReviewField(item_id~ : String, field~ : String)
} derive(Eq, ToJson, Debug)pub(all) struct AcceptanceReviewReceipt {
contract_id : String
review_id : String
run_id : String
work_item_id : String
declaration_id : String
result_id : String
attempt_id : String
output_digest : String
decision : String
criteria : Array[AcceptanceCriterionReview]
reviewer_id : String
review_authority_id : String
receipt_artifact : String
recorded_at : String
} derive(Eq, ToJson, Debug)pub(all) struct AdapterCapability {
adapter_id : String
product_id : String
protocol : String
operations : Array[String]
authority_classes : Array[String]
input_contracts : Array[String]
output_contracts : Array[String]
claim_ceiling : String
healthy : Bool
supports_cancel : Bool
supports_reconcile : Bool
} derive(Eq, ToJson, Debug)pub(all) struct AdapterHealthAttestationV1 {
contract_id : String
adapter_id : String
product_id : String
pack_id : String
pack_version : String
protocol : String
status : String
checked_at : String
valid_until : String
operation_refs : Array[String]
evidence_ref : String
evidence_digest : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AdapterRequest {
request_id : String
run_id : String
book_id : String
work_item_id : String
declaration_id : String
attempt_id : String
idempotency_key : String
product_id : String
operation : String
requested_authority : String
acceptance_criteria : Array[String]
input_contracts : Array[String]
output_contracts : Array[String]
required_claim : String
input_digest : String
input_artifacts : Array[String]
timeout_ms : Int
created_at : String
} derive(Eq, ToJson, Debug)pub(all) struct AdapterResult {
result_id : String
request_id : String
attempt_id : String
idempotency_key : String
product_id : String
external_job_id : String
status : AdapterAttemptStatus
output_digest : String
output_artifacts : Array[String]
error_kind : String
compensable : Bool
recorded_at : String
} derive(Eq, ToJson, Debug)pub(all) struct CapabilityActivationProjectionV1 {
contract_version : String
activation_id : String
request : CapabilityRecordRefV1
receipt : CapabilityRecordRefV1
scope_id : String
rollout_mode : String
status : String
challenger_participant_ids : Array[String]
max_observations : Int
experiment : CapabilityRecordRefV1
old_capability : CapabilityRecordRefV1
new_capability : CapabilityRecordRefV1
rollback : CapabilityRecordRefV1
activation_review : CapabilityRecordRefV1
activation_reviewer_id : String
activation_reviewer_authority_ref : String
activated_at : Int64
observations : Array[CapabilityObservationV1]
settlement : CapabilitySettlementRequestV1?
} derive(Eq, ToJson, Debug, FromJson)fn CapabilityActivationProjectionV1::record_observation(self : CapabilityActivationProjectionV1, observation : CapabilityObservationV1) -> CapabilityActivationProjectionV1 raisefn CapabilityActivationProjectionV1::settle(self : CapabilityActivationProjectionV1, settlement : CapabilitySettlementRequestV1) -> CapabilityActivationProjectionV1 raisepub(all) struct CapabilityActivationRequestV1 {
contract_version : String
request : CapabilityRecordRefV1
receipt : CapabilityRecordRefV1
scope_id : String
rollout_mode : String
challenger_participant_ids : Array[String]
max_observations : Int
experiment : CapabilityRecordRefV1
old_capability : CapabilityRecordRefV1
new_capability : CapabilityRecordRefV1
rollback : CapabilityRecordRefV1
activation_review : CapabilityRecordRefV1
activation_reviewer_id : String
activation_reviewer_authority_ref : String
requested_at : Int64
adoption_authorized : Bool
source_side_effects_applied : Bool
activation_side_effects_applied : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CapabilityCatalogV1 {
contract_id : String
catalog_id : String
compiled_at : String
conformant : Bool
products : Array[CapabilityProductV1]
operations : Array[CapabilityOperationV1]
issues : Array[CapabilityConformanceIssueV1]
} derive(Eq, ToJson, Debug, FromJson)fn CapabilityCatalogV1::adapter_capabilities(self : CapabilityCatalogV1) -> Array[AdapterCapability]fn CapabilityCatalogV1::adapter_capabilities_at(self : CapabilityCatalogV1, evaluated_at : String) -> Array[AdapterCapability] raisepub(all) struct CapabilityObservationV1 {
observation_id : String
scope_id : String
participant_id : String
assignment : String
capability : CapabilityRecordRefV1
outcome : CapabilityRecordRefV1
reward_evidence : CapabilityRecordRefV1
accepted : Bool
recorded_at : Int64
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CapabilityOperationV1 {
operation_ref : String
product_id : String
pack_id : String
pack_version : String
tool_id : String
adapter_id : String
protocol : String
authority : String
input_schema_ref : String
output_schema_ref : String
claim_ceiling : String
idempotent : Bool
review_required : Bool
supports_cancel : Bool
supports_reconcile : Bool
health_checked_at : String
health_valid_until : String
health_evidence_ref : String
health_evidence_digest : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CapabilityResolutionV1 {
contract_version : String
scope_id : String
participant_id : String
assignment : String
selected_capability : CapabilityRecordRefV1
shadow_capability : CapabilityRecordRefV1?
activation_id : String
experiment : CapabilityRecordRefV1
status : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CapabilitySettlementRequestV1 {
contract_version : String
settlement_id : String
scope_id : String
decision : String
experiment_outcome : CapabilityRecordRefV1
reviewer_id : String
reviewer_authority_ref : String
review_evidence : CapabilityRecordRefV1
settled_at : Int64
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct DirectorDecision {
contract_id : String
requirement_id : String
selected_adapter_id : String
accepted : Bool
reviews : Array[DirectorCandidateReview]
} derive(Eq, ToJson, Debug)pub(all) struct DirectorRetryDecision {
failure_class : DirectorFailureClass
action : String
preserves_attempt_evidence : Bool
reuses_idempotency_lineage : Bool
requires_reconciliation : Bool
} derive(Eq, ToJson, Debug)pub(all) struct EvidenceBundleManifest {
contract_id : String
bundle_id : String
content_digest : String
entries : Array[EvidenceBundleEntry]
recorded_at : String
} derive(Eq, ToJson, Debug)pub(all) struct EvidenceBundleSpec {
contract_id : String
bundle_id : String
sources : Array[EvidenceSourceSpec]
} derive(Eq, ToJson, Debug)pub(all) struct GraphCapabilityReportV1 {
contract_id : String
catalog_id : String
graph_id : String
accepted : Bool
bindings : Array[GraphCapabilityBindingV1]
issues : Array[CapabilityConformanceIssueV1]
catalog_issues : Array[CapabilityConformanceIssueV1]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct PackCapabilityManifestV1 {
pack_id : String
product_id : String
pack_version : String
schemas : Array[PackSchemaDescriptorV1]
tools : Array[PackToolDescriptorV1]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RunMigrationReceipt {
contract_id : String
migration_id : String
parent_run_id : String
child_run_id : String
parent_revision : String
child_revision : String
parent_source_digest : String
child_source_digest : String
revision_proposal_ref : String
decisions : Array[CheckpointMigrationDecision]
reused_count : Int
invalidated_count : Int
new_count : Int
recorded_at : String
} derive(Eq, ToJson, Debug)pub(all) struct RunProjection {
run_id : String
book_id : String
declaration_revision : String
source_digest : String
last_sequence : Int
items : Array[RuntimeItem]
applied_event_ids : Array[String]
applied_events : Array[RuntimeEvent]
outcome : String
} derive(Eq, ToJson, Debug)pub(all) struct RunRevisionResult {
events : Array[RuntimeEvent]
receipt : RunMigrationReceipt
} derive(Eq, ToJson, Debug)pub(all) struct RuntimeEvent {
sequence : Int
event_id : String
run_id : String
work_item_id : String
kind : EventKind
product_id : String
declaration_id : String
book_id : String
declaration_revision : String
source_digest : String
requested_authority : String
acceptance_criteria : Array[String]
operation : String
input_contracts : Array[String]
output_contracts : Array[String]
required_claim : String
input_artifacts : Array[String]
timeout_ms : Int
request_id : String
result_id : String
attempt_id : String
idempotency_key : String
external_job_id : String
attempt_status : String
input_digest : String
output_digest : String
output_artifacts : Array[String]
error_kind : String
compensable : Bool
depends_on : Array[String]
detail : String
artifact_id : String
authority_id : String
recorded_at : String
} derive(Eq, ToJson, Debug)pub(all) struct RuntimeItem {
work_item_id : String
declaration_id : String
product_id : String
requested_authority : String
acceptance_criteria : Array[String]
operation : String
input_contracts : Array[String]
output_contracts : Array[String]
required_claim : String
input_artifacts : Array[String]
timeout_ms : Int
depends_on : Array[String]
status : RuntimeStatus
attempt_count : Int
request_id : String
result_id : String
active_attempt_id : String
idempotency_key : String
external_job_id : String
attempt_status : String
input_digest : String
output_digest : String
error_kind : String
compensable : Bool
blocker : String
acceptance_review_id : String
acceptance_review_artifact : String
acceptance_reviewer_id : String
artifacts : Array[String]
approvals : Array[String]
} derive(Eq, ToJson, Debug)pub(all) struct UnattendedDriver {
adapter_id : String
executable : String
arguments : Array[String]
draft_output_artifacts : Array[String]
expected_output_artifacts : Array[String]
attestor_id : String
attestor_executable : String
attestor_arguments : Array[String]
reviewer_id : String
reviewer_executable : String
reviewer_arguments : Array[String]
review_authority_id : String
budget_request : AutonomyBudgetUsage
} derive(Eq, Debug)fn UnattendedManifest::find_driver(self : UnattendedManifest, adapter_id : String) -> UnattendedDriver?fn acceptance_review_event(projection : RunProjection, receipt : AcceptanceReviewReceipt) -> RuntimeEvent raise AcceptanceReviewErrorfn activate_capability_v1(request : CapabilityActivationRequestV1, activation_id~ : String, activated_at~ : Int64) -> CapabilityActivationProjectionV1 raisefn adapter_reconciliation_event(projection : RunProjection, result : AdapterResult) -> RuntimeEvent raise AdapterContractErrorfn adapter_submission_event(projection : RunProjection, request : AdapterRequest) -> RuntimeEvent raise AdapterContractErrorfn artifact_ref_is_workspace_relative(artifact_ref : String) -> Boolfn capability_guarded_events_from_work_graph_v1(graph : Json, capabilities : Json, evaluated_at : String) -> Array[RuntimeEvent] raisefn capability_loop_contract_version() -> Stringfn compile_work_graph_capabilities_at_v1(graph : Json, catalog : CapabilityCatalogV1, evaluated_at : String) -> GraphCapabilityReportV1 raisefn compile_work_graph_capabilities_v1(graph : Json, catalog : CapabilityCatalogV1) -> GraphCapabilityReportV1 raisefn conformant_events_from_work_graph_at_v1(graph : Json, catalog : CapabilityCatalogV1, evaluated_at : String) -> Array[RuntimeEvent] raisefn conformant_events_from_work_graph_v1(graph : Json, catalog : CapabilityCatalogV1) -> Array[RuntimeEvent] raisefn decode_adapter_capabilities_at_v1(value : Json, evaluated_at : String) -> Array[AdapterCapability] raisefn decode_capability_activation_projection_v1(value : Json) -> CapabilityActivationProjectionV1 raisefn director_request_for_item(projection : RunProjection, item : RuntimeItem, input_digest : String, recorded_at : String) -> AdapterRequestfn director_success_result_for_item(item : RuntimeItem, output_digest : String, output_artifacts : Array[String], recorded_at : String) -> AdapterResultfn evidence_bundle_manifest(spec : EvidenceBundleSpec, entries : Array[EvidenceBundleEntry], content_digest : String, recorded_at : String) -> EvidenceBundleManifest raisefn path_is_within_workspace(workspace_root : String, candidate : String) -> Boolfn product_attestation_issues(value : Json, driver : UnattendedDriver, request : AdapterRequest, result : AdapterResult) -> Array[String]fn reconcile_adapter_result(request : AdapterRequest, result : AdapterResult) -> ReconciliationDecision raise AdapterContractErrorfn resolve_capability_v1(projection : CapabilityActivationProjectionV1, scope_id~ : String, participant_id~ : String) -> CapabilityResolutionV1 raisefn revise_run(parent : RunProjection, child_graph : Json, migration_id : String, revision_proposal_ref : String, recorded_at : String) -> RunRevisionResult raisefn select_adapter(capabilities : Array[AdapterCapability], requirement : DirectorRequirement) -> DirectorDecisionfn versioned_operation_ref(product_id : String, tool_id : String, pack_version : String) -> Stringfn versioned_schema_ref(product_id : String, schema_id : String, schema_version : String) -> StringGeneric durable orchestration engine for Moon Suite
Dependencies