# Institutional Capability Lineage Architecture (ICLA)
# Reference Specification
#
# Copyright (c) 2026 Mariano Garralda-Barrio
#
# Licensed under the Creative Commons Attribution 4.0
# International License (CC BY 4.0).
#
# See LICENSE in the repository root.

$schema: https://json-schema.org/draft/2020-12/schema
title: Contextual Assembly
type: object
allOf:
  - not:
      required: [materializations]
required:
  - document_type
  - format_version
  - specification_version
  - id
  - artifact_status
  - normative
  - schema_ref
  - status
  - generated_from
  - lineage
  - ckc_snapshot
  - source_snapshot
  - policy_snapshot
  - transformation_snapshot
  - operational_mandate
  - selection
  - evaluation_contract
  - evidence_contract
  - correctness
  - correctness_trace
  - retention
  - access_policy_ref
properties:
  document_type: {const: contextual-assembly}
  format_version: {const: icla-artifact/0.1-draft}
  specification_version:
    type: object
    required: [icla-spec]
    properties:
      icla-spec: {const: 0.1.0}
    additionalProperties: false
  id: {type: string, pattern: "^ASM-[A-Z0-9-]+$"}
  artifact_status: {const: reference}
  normative: {const: false}
  schema_ref: {type: string}
  status: {const: immutable}
  generated_from: {type: object, minProperties: 4}
  lineage:
    type: object
    required: [cee_ref, cee_configuration_ref, intent_ref, registry_snapshot_ref, resolution_ref, admission_ref]
    additionalProperties: true
  ckc_snapshot:
    type: array
    minItems: 1
    items:
      type: object
      required: [capability, ckc, version]
      additionalProperties: true
  source_snapshot:
    type: array
    items:
      type: object
      required: [source, version]
      properties:
        source: {type: string}
        version: {type: [integer, string]}
        knowledge_roles: {$ref: "#/$defs/knowledge_roles"}
      additionalProperties: true
  policy_snapshot:
    type: array
    minItems: 1
    items:
      type: object
      required: [id, version]
      additionalProperties: true
  transformation_snapshot:
    type: array
    minItems: 1
    items:
      type: object
      required: [id, version]
      additionalProperties: true
  operational_mandate:
    type: object
    required:
      - authority_scope
      - institutional_change_authority
      - local_autonomy
      - evidence_disclosure
      - registry_interaction
      - reresolution_triggers
    properties:
      authority_scope: {const: execution-scoped}
      institutional_change_authority: {const: false}
      local_autonomy:
        type: array
        minItems: 1
        uniqueItems: true
        items:
          enum: [reasoning, planning, working-memory, local-stores, tool-use, coordination, iteration]
      evidence_disclosure: {const: evidence-contract-only}
      registry_interaction: {const: reresolution-or-evidence-only}
      reresolution_triggers:
        type: array
        minItems: 1
        uniqueItems: true
        items:
          enum:
            - intent-materially-changed
            - coverage-insufficient
            - authority-invalid
            - source-or-binding-stale
            - risk-changed
            - assurance-changed
    additionalProperties: false
  selection:
    type: object
    required: [included, excluded]
    properties:
      knowledge_role_composition:
        type: object
        properties:
          semantic: {type: array, items: {type: string}}
          procedural: {type: array, items: {type: string}}
          episodic: {type: array, items: {type: string}}
        additionalProperties: false
    additionalProperties: true
  evaluation_contract:
    type: object
    required: [metrics]
    properties:
      metrics:
        type: array
        minItems: 1
    additionalProperties: true
  evidence_contract:
    type: object
    required: [id, version, selection_mode, working_state_disclosure, checkpoint_policy]
    properties:
      id: {type: string, minLength: 1}
      version: {type: [integer, string]}
      selection_mode: {const: contract-selected}
      working_state_disclosure: {const: prohibited-unless-contract-required}
      checkpoint_policy:
        type: array
        minItems: 1
        uniqueItems: true
        items: {enum: [terminal, contract-defined]}
    additionalProperties: true
  correctness:
    type: object
    required: [traceable, authorized, required_covered, evaluation_bound, conflicts_resolved, within_budget, mandate_bounded]
    additionalProperties: true
  correctness_trace:
    type: object
    required: [required_covered, conflicts_resolved]
    properties:
      required_covered:
        type: object
        required: [applied_method, applicable_reference]
        properties:
          applied_method:
            enum: [deterministic, model-assisted, human-reviewed]
          applicable_reference:
            type: object
            required: [kind, id, version]
            properties:
              kind: {enum: [validator, model, review-policy]}
              id: {type: string, minLength: 1}
              version: {type: [integer, string]}
            additionalProperties: false
        additionalProperties: false
      conflicts_resolved:
        type: object
        required: [applicable_conflicts]
        properties:
          applicable_conflicts:
            type: array
            items:
              type: object
              required: [conflict_ref, resolution_outcome, assembly_compatible, policy_basis]
              properties:
                conflict_ref: {type: string, minLength: 1}
                resolution_outcome: {type: string, minLength: 1}
                assembly_compatible: {const: true}
                policy_basis:
                  type: object
                  required: [id, version]
                  properties:
                    id: {type: string, minLength: 1}
                    version: {type: [integer, string]}
                  additionalProperties: false
              additionalProperties: true
        additionalProperties: false
    additionalProperties: true
  retention:
    type: object
    required: [policy_ref]
    additionalProperties: true
  access_policy_ref: {type: string}
$defs:
  knowledge_roles:
    type: array
    minItems: 1
    uniqueItems: true
    items:
      enum: [semantic, procedural, episodic]
additionalProperties: true
