Detection acknowledgement
Declare an operator action that records acknowledgement without replacing detection evidence.
Use the acknowledgement behavior on an executable ontology action to record an
operator's acknowledgement of a watch-produced detection. The action receives
only detectionId; the server supplies the authenticated operator and time.
Declare these optional properties on your detection object type:
| Property | Scalar type | Meaning |
|---|---|---|
acknowledgementStatus | string | acknowledged after a successful action |
acknowledgedBy | string | Authenticated operator ID |
acknowledgedAt | string | Server timestamp in ISO 8601 format |
These are separate from the detection's condition or lifecycle status. Absence of acknowledgement properties means no acknowledgement has been recorded.
In an authored ontology extension, declare the bounded action directly:
export default defineOntology({
// ... object types, bindings and watches ...
acknowledgementActions: [
{ slug: 'acknowledge-detection', subjectTypeSlug: 'Detection' },
],
})The SDK compiler emits the executable SCHEMA_ACTION shape below. Older extensions
can include that declaration in the normal ontology schema
declaration/publication workflow, replacing maritime and Detection with
their ontology and object type:
{
"kind": "SCHEMA_ACTION",
"ontologyApiName": "maritime",
"name": "detection.acknowledge",
"body": {
"name": "detection.acknowledge",
"actionType": "detection.acknowledge",
"input": {
"fields": { "detectionId": { "type": "string", "required": true } }
},
"effects": [],
"acknowledgement": { "subjectType": "Detection" },
"permittedAssertionKinds": ["PROPERTY"],
"permittedSubjectTypes": ["Detection"],
"requiredShapeIds": [],
"ruleIds": [],
"humanApprovalRequired": false
}
}The action name is your choice. The behavior requires exactly this input and permission shape, and cannot be combined with generic effects. Its target must be a declared object type. Existing shapes, bound rules, approval requirements, and action authorization still apply. Only a directly authenticated human may execute it; background services and delegated executions cannot acknowledge.
In the app permit, declare an action with
id: "acknowledge-detection", the appropriate ontology alias,
actionType: "detection.acknowledge", inputProperties: ["detectionId"], and
your input byte limit. Pin the ontology revision containing the action. Include
the acknowledgement fields among the permitted detection query properties.
alerts = apps.alerts(
"detections",
columns={"severity": "Severity", "acknowledgementStatus": "Acknowledgement"},
severity="severity",
status="acknowledgementStatus",
acknowledge_action="acknowledge-detection",
acknowledge_input="detectionId",
)The selected detection ID is proposed to Horizon for explicit confirmation. Preview cannot execute the action. Selection, notebook reruns, and reconnects do not submit it. See alert review.
The server checks that the exact detection exists, is current, was produced by a watch, and is visible at the operator's clearance. It rechecks the detection when committing. Hidden, absent, retracted, future, or expired detections are unavailable. A detection replaced while the action is pending requires review of its new state.
The first acknowledgement wins. A later independent request cannot replace its operator or timestamp. Reconciliation of the original request returns its stored result; an uncertain result must not trigger automatic resubmission. The acknowledgement preserves the original detection, evidence, watch configuration, and response association. It neither resolves the underlying condition nor starts a response flow.