atlas-iac/services/hermes/contracts/hux/event.schema.json
jenkins b4145861d2 hermes(hux): freeze hux.v1 contract 1.0.0 and move reference modules into the foundation package
HUX-11 contract freeze: identity/capabilities/manifest/error records, event turn
and idempotency and delegation/side-effect kinds, memory no-store/supersedes/
retrieval removal, revisions for optimistic concurrency, artifact access,
budget scope/spend/subagents and external side-effect gating, notebook notes and
dedupe keys. ADR-0001 records the wire and compatibility rules.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RNPhwu2bsaRNg3DETSAZoM
2026-08-24 00:48:20 -03:00

125 lines
3.2 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://hermes.bstein.dev/contracts/hux/v1/event.schema.json",
"title": "HUX activity event",
"description": "One entry in the per-conversation activity stream (HUX-01). seq is strictly monotonic per conversation; consumers resume with after_seq. Every other HUX record that changes state emits exactly one event.",
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"id",
"seq",
"ts",
"conversation_id",
"kind",
"summary",
"provenance",
"sensitivity",
"redaction",
"turn",
"identity"
],
"properties": {
"schema": {
"const": "hux.event.v1"
},
"id": {
"$ref": "common.schema.json#/$defs/id"
},
"seq": {
"type": "integer",
"minimum": 0
},
"ts": {
"$ref": "common.schema.json#/$defs/timestamp"
},
"conversation_id": {
"$ref": "common.schema.json#/$defs/id"
},
"run_id": {
"type": "string",
"maxLength": 120
},
"parent_event_id": {
"$ref": "common.schema.json#/$defs/id"
},
"correlation_id": {
"type": "string",
"maxLength": 120
},
"kind": {
"type": "string",
"enum": [
"message.user",
"message.assistant",
"decision.route",
"decision.plan",
"tool.call",
"tool.result",
"approval.requested",
"approval.resolved",
"memory.proposed",
"memory.committed",
"memory.forgotten",
"artifact.created",
"artifact.version",
"artifact.promoted",
"citation.attached",
"mode.changed",
"run.started",
"run.cancelled",
"run.completed",
"run.failed",
"privacy.notice",
"suggestion.shown",
"suggestion.dismissed",
"release.transition",
"delegation.started",
"delegation.completed",
"delegation.failed",
"memory.suppressed",
"memory.retrieval_removed",
"budget.exhausted",
"side_effect.blocked",
"side_effect.released"
]
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 280
},
"detail": {
"type": "object",
"description": "Kind-specific payload restricted to the allowlisted keys for that kind. Raw tool arguments, logs, credentials and tokens are never stored here; the redaction pipeline drops unknown keys and scrubs secret patterns before the event is written."
},
"evidence": {
"type": "array",
"maxItems": 64,
"items": {
"$ref": "common.schema.json#/$defs/evidence_ref"
}
},
"provenance": {
"$ref": "common.schema.json#/$defs/provenance"
},
"sensitivity": {
"$ref": "common.schema.json#/$defs/sensitivity"
},
"redaction": {
"$ref": "common.schema.json#/$defs/redaction"
},
"turn": {
"type": "integer",
"description": "User-visible turn number within the conversation; several events share a turn.",
"minimum": 0
},
"idempotency_key": {
"$ref": "common.schema.json#/$defs/idempotency_key"
},
"identity": {
"$ref": "common.schema.json#/$defs/identity"
}
}
}