{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"definitions": {
"EpisodeCandidate": {
"additionalProperties": false,
"description": "Candidate episode summary produced by reflection.",
"properties": {
"candidate_meaning": {
"description": "Optional interpretation of why the episode matters.",
"type": [
"string",
"null"
]
},
"confidence": {
"description": "Model confidence in `[0.0, 1.0]`.",
"format": "double",
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
},
"domains": {
"description": "Domains observed in the episode.",
"items": {
"type": "string"
},
"type": "array"
},
"entities": {
"description": "Entities mentioned in the episode.",
"items": {
"type": "string"
},
"type": "array"
},
"source_event_ids": {
"description": "Source events supporting the episode.",
"items": {
"$ref": "#/definitions/EventId"
},
"type": "array"
},
"summary": {
"description": "Human-readable summary of the episode.",
"type": "string"
}
},
"required": [
"confidence",
"domains",
"entities",
"source_event_ids",
"summary"
],
"type": "object"
},
"EventId": {
"description": "Prefix-ULID identifier in the form `evt_<26-char Crockford ULID>`",
"pattern": "^evt_[0-9A-HJKMNP-TV-Z]{26}$",
"type": "string"
},
"InitialSalience": {
"additionalProperties": false,
"description": "Salience dimensions assigned before durable memory acceptance.",
"properties": {
"consequence": {
"description": "Expected consequence of getting this wrong in `[0.0, 1.0]`.",
"format": "double",
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
},
"emotional_charge": {
"description": "Emotional or preference intensity in `[0.0, 1.0]`.",
"format": "double",
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
},
"reusability": {
"description": "Expected reuse value in `[0.0, 1.0]`.",
"format": "double",
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
}
},
"required": [
"consequence",
"emotional_charge",
"reusability"
],
"type": "object"
},
"MemoryCandidate": {
"additionalProperties": false,
"description": "Candidate memory proposed by reflection.",
"properties": {
"applies_when": {
"description": "Conditions where the claim applies.",
"items": {
"type": "string"
},
"type": "array"
},
"claim": {
"description": "Atomic claim to be considered by the human-gated memory path.",
"type": "string"
},
"confidence": {
"description": "Model confidence in `[0.0, 1.0]`.",
"format": "double",
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
},
"does_not_apply_when": {
"description": "Conditions where the claim should not be applied.",
"items": {
"type": "string"
},
"type": "array"
},
"initial_salience": {
"allOf": [
{
"$ref": "#/definitions/InitialSalience"
}
],
"description": "Initial salience proposal."
},
"memory_type": {
"allOf": [
{
"$ref": "#/definitions/MemoryType"
}
],
"description": "Type of memory proposed."
},
"source_episode_indexes": {
"description": "Zero-based indexes into [`SessionReflection::episode_candidates`].",
"items": {
"format": "uint",
"minimum": 0.0,
"type": "integer"
},
"type": "array"
}
},
"required": [
"applies_when",
"claim",
"confidence",
"does_not_apply_when",
"initial_salience",
"memory_type",
"source_episode_indexes"
],
"type": "object"
},
"MemoryType": {
"description": "Candidate memory type taxonomy from BUILD_SPEC ยง13.1.",
"oneOf": [
{
"description": "Semantic fact or concept.",
"enum": [
"semantic"
],
"type": "string"
},
{
"description": "Episodic recollection.",
"enum": [
"episodic"
],
"type": "string"
},
{
"description": "Procedure or process.",
"enum": [
"procedural"
],
"type": "string"
},
{
"description": "Strategy or preference over action.",
"enum": [
"strategic"
],
"type": "string"
},
{
"description": "Affective signal.",
"enum": [
"affective"
],
"type": "string"
},
{
"description": "Correction learned from feedback.",
"enum": [
"correction"
],
"type": "string"
}
]
},
"TraceId": {
"description": "Prefix-ULID identifier in the form `trc_<26-char Crockford ULID>`",
"pattern": "^trc_[0-9A-HJKMNP-TV-Z]{26}$",
"type": "string"
}
},
"description": "Post-hoc reflection output for one trace.",
"properties": {
"contradictions": {
"description": "Opaque contradiction candidates until the store-backed lane defines them.",
"items": true,
"type": "array"
},
"doctrine_suggestions": {
"description": "Opaque doctrine suggestions; reflection must never promote these directly.",
"items": true,
"type": "array"
},
"episode_candidates": {
"description": "Candidate episodes extracted from source events.",
"items": {
"$ref": "#/definitions/EpisodeCandidate"
},
"type": "array"
},
"memory_candidates": {
"description": "Candidate memories proposed from the reflected session.",
"items": {
"$ref": "#/definitions/MemoryCandidate"
},
"type": "array"
},
"trace_id": {
"allOf": [
{
"$ref": "#/definitions/TraceId"
}
],
"description": "Trace being reflected."
}
},
"required": [
"contradictions",
"doctrine_suggestions",
"episode_candidates",
"memory_candidates",
"trace_id"
],
"title": "SessionReflection",
"type": "object"
}