Trust and provenance

This page defines the current contract for how Holon classifies message provenance, admission/authentication, instruction authority, and execution policy — and how those labels flow through the runtime.

Last verified: 2026-05-27 against src/types.rs MessageEnvelope, MessageOrigin, AuthorityClass, MessageDeliverySurface, AdmissionContext, src/policy.rs, src/ingress.rs, src/http.rs, src/context.rs, src/prompt/mod.rs, src/operator_event.rs, src/presentation.rs, src/runtime/message_dispatch.rs, and src/runtime/operator_dispatch.rs.

Source RFCs

Message envelope

Every queued message in Holon carries provenance, admission, authority, and scheduling labels in its MessageEnvelope:

MessageEnvelope {
    origin: MessageOrigin,
    authority_class: AuthorityClass,
    priority: Priority,
    delivery_surface: Option<MessageDeliverySurface>,
    admission_context: Option<AdmissionContext>,
    trigger_kind: Option<ContinuationTriggerKind>,
    source_refs: BTreeMap<String, String>,
    ...
}

The four concepts below are intentionally separate:

Provenance: MessageOrigin and source refs

MessageOrigin captures the producer of the content. It does not encode how the ingress was authenticated and does not by itself grant tool authority.

Origin variantCurrent meaningTypical kind
Operator { actor_id }Direct operator-authored content. The admission surface may be local CLI, run-once, HTTP control, or remote operator transport.OperatorPrompt, Control
Channel { channel_id, sender_id }External channel content. Public enqueue accepts this as external evidence by default.ChannelEvent
Webhook { source, event_type }External webhook content. Public enqueue defaults to this origin when no origin is supplied.WebhookEvent
Callback { descriptor_id, source }External trigger callback admitted by a capability secret. The body is an integration signal, not an operator instruction.CallbackEvent
Timer { timer_id }Scheduled timer fire.TimerTick
System { subsystem }Runtime-owned internal message, such as scheduler, lifecycle, or internal follow-up.SystemTick, InternalFollowup, Control
Task { task_id }Task status/result from a supervised command or child agent.TaskStatus, TaskResult

MessageEnvelope::normalize_admission_fields derives trigger_kind, task_id for task-origin messages, and source_refs such as task_id, timer_id, external_trigger_id, waiting_intent_id, callback_delivery_id, and queued_event_id. Binding fields such as work_item_id and task_id are projected from metadata only for runtime-owned messages admitted through RuntimeSystem or TaskRejoin; untrusted external metadata remains evidence.

Admission/authentication: delivery surface and admission context

MessageDeliverySurface records where the message entered or was produced by the runtime:

Delivery surfaceCurrent use
CliPromptLocal interactive prompt input.
RunOnceLocal one-shot run input.
HttpPublicEnqueuePublic HTTP enqueue after remote access admission; cannot request Interject priority or override authority.
HttpWebhookHTTP webhook transport.
HttpCallbackEnqueueCallback endpoint that enqueues a message.
HttpCallbackWakeCallback endpoint used as a wake hint.
HttpControlPromptAuthenticated HTTP control prompt.
RemoteOperatorTransportAuthenticated remote operator transport.
TimerSchedulerRuntime timer scheduler.
RuntimeSystemRuntime-owned system surface.
TaskRejoinTask supervisor result/status rejoin.

AdmissionContext records why Holon accepted the ingress:

Admission contextCurrent meaning
PublicUnauthenticatedPublic enqueue/webhook-style input admitted without operator credentials.
ControlAuthenticatedControl-plane request admitted by the configured control token.
OperatorTransportAuthenticatedRemote operator transport authenticated as an operator surface.
ExternalTriggerCapabilityCallback admitted by possession of an external trigger capability secret.
LocalProcessLocal process or local control surface; current host-local execution policy still applies.
RuntimeOwnedMessage produced by the runtime itself.

Admission is not the same as instruction authority. For example, an ExternalTriggerCapability proves that a callback URL was valid, but the callback payload remains an IntegrationSignal, not an OperatorInstruction.

Authority class (AuthorityClass)

AuthorityClass is the current instruction-authority vocabulary:

ClassMeaningDefault origins
OperatorInstructionOperator-authored instruction the agent should follow, subject to instruction precedence and execution policy.Operator
RuntimeInstructionRuntime-owned directive or lifecycle/task signal.System, Task, Timer
IntegrationSignalConfigured integration or callback signal. It may wake or inform work but is not an operator instruction.Webhook, Callback
ExternalEvidenceExternal channel content for inspection.Channel

Key contract:

Transitional trust wording

The earlier trust / trusted_* / untrusted_* vocabulary is not the primary public contract. Current code keeps compatibility in two places:

src/context.rs still renders a trust= label in model context for backward readability, but it is derived from authority_class. New docs and new contracts should name authority_class directly.

Current classification matrix

Producer / pathOriginKindAuthorityDelivery surfaceAdmission context
Local operator promptOperatorOperatorPromptOperatorInstructionCliPrompt / RunOnceLocalProcess
HTTP control prompt with tokenOperatorOperatorPrompt or ControlOperatorInstructionHttpControlPromptControlAuthenticated
Remote operator transportOperatorOperatorPromptOperatorInstructionRemoteOperatorTransportOperatorTransportAuthenticated
Public external channel enqueueChannelChannelEventExternalEvidenceHttpPublicEnqueuePublicUnauthenticated
Public webhook enqueueWebhookWebhookEventIntegrationSignalHttpPublicEnqueue / HttpWebhookPublicUnauthenticated
External callback enqueue/wakeCallbackCallbackEventIntegrationSignalHttpCallbackEnqueue / HttpCallbackWakeExternalTriggerCapability
Timer fireTimerTimerTickRuntimeInstructionTimerSchedulerRuntimeOwned
Runtime system/internal follow-upSystemSystemTick / InternalFollowup / ControlRuntimeInstructionRuntimeSystemRuntimeOwned
Task status/resultTaskTaskStatus / TaskResultRuntimeInstructionTaskRejoinRuntimeOwned

Priority

PriorityScheduling effect
InterjectPreempts queued work; delivered before normal-priority messages
NextDelivered after current interject messages, before Normal
NormalStandard queue position
BackgroundLow-urgency; delivered after higher-priority messages

Priority affects queue ordering, not authority, admission, or execution policy.

Execution policy

Execution policy is the final allow/deny boundary for concrete process, file, network, message ingress, control-plane, workspace projection, and agent-state actions. It is summarized to the model as the current execution policy snapshot and enforced by runtime/tool surfaces where hard enforcement exists.

Authority labels inform execution policy but do not replace it. For example, OperatorInstruction can request an action, but the tool still runs under the current workspace projection, process-execution, secret-isolation, and path/write/network policy. Conversely, RuntimeInstruction may carry lifecycle state, but it does not make arbitrary external payload text trustworthy.

Provenance preservation and exposure

Holon's provenance contract:

Validation

Validated implementation points:

Drift and follow-up classification