article: id: CA-UI-009 title: Validation, Conflict and Versioning Protocol version: 1.0 status: canonical type: specification parent_protocol: CA-UI-001 depends_on: - CA-UI-002 - CA-UI-003 - CA-UI-004 - CA-UI-005 - CA-UI-006 - CA-UI-007 - CA-UI-008
Purpose
purpose: > Protect Civilisation Atlas from invalid objects, unsupported coordinates, duplicate identities, contradictory claims, silent schema drift, broken relationships and incompatible versions.
INGESTION CREATES CANDIDATES.VALIDATION CREATES TRUST.CONFLICT RECORDS PRESERVE DISAGREEMENT.VERSIONING PRESERVES CONTINUITY.
Validation architecture
Input ↓Schema Validation ↓Identity Validation ↓Scale Validation ↓Coordinate Validation ↓Relationship Validation ↓Evidence Validation ↓Conflict Detection ↓Version Compatibility ↓Registration Decision
validation_layers: - syntax - schema - identity - semantic - scale - temporal - coordinate - relationship - dependency - evidence - provenance - crosswalk - version
Validation result
validation_result: validation_id: required target_id: required target_type: required validator: required validation_date: required checks: passed: [] warnings: [] failed: [] unresolved: [] severity: - valid - valid_with_warning - provisional - review_required - invalid - quarantined registration_action: - register - register_provisionally - update_existing - hold_for_review - quarantine - reject
Validation severity
severity_levels: INFO: effect: no_registration_block WARNING: effect: register_with_visible_warning MATERIAL: effect: provisional_registration_only CRITICAL: effect: registration_blocked FATAL: effect: reject_or_quarantine
Schema validation
function validate_schema(record): require(record.schema_id) require(record.schema_version) verify_required_fields(record) verify_field_types(record) verify_allowed_values(record) verify_identifier_format(record) verify_internal_references(record) reject_unknown_required_fields() preserve_extension_fields_if_namespaced() return schema_validation_result
extension_rule: custom_fields_allowed: true namespace_required: true silent_core_schema_change: false
Example:
external_extension: ext.archaeology.stratigraphic_layer: Layer_IV ext.economics.price_index_basis: 2015
Identity validation
identity_validation: checks: - canonical_name_present - object_type_present - aliases_checked - temporal_scope_checked - spatial_scope_checked - external_identifiers_checked - duplicate_search_completed
function validate_identity(object): matches = search_registry( canonical_name, aliases, identifiers, time, space, object_type ) if exact_duplicate(matches): return MERGE_REQUIRED if probable_duplicate(matches): return REVIEW_REQUIRED if conflicting_identity(matches): return CONFLICT_RECORD_REQUIRED return VALID_IDENTITY
Duplicate resolution
duplicate_resolution: duplicate_id: required candidate_objects: required resolution: - same_object - related_objects - historical_alias - successor_object - predecessor_object - distinct_objects - unresolved canonical_survivor: optional redirect_ids: [] merged_fields: [] preserved_conflicts: [] evidence_ids: required
MERGE IDENTITIES.DO NOT MERGE DISAGREEMENTS AWAY.
Scale validation
function validate_scale(record): require(record.system_level) compare: evidence_level claim_level coordinate_level relationship_level reject_if: individual_evidence_claims_planetary_fact local_event_claims_civilisational_transition state_coordinate_is_assigned_to_humanity planetary_average_is_assigned_to_every_region return scale_result
scale_status: - exact_match - valid_aggregation - valid_disaggregation - extrapolated_with_warning - incompatible
Temporal validation
temporal_validation: required: - observation_date - valid_time_scope checks: - source_date_matches_claim_period - coordinate_is_dated - relationship_status_is_dated - superseded_records_are_marked - forecasts_are_not_marked_as_observations
A VALID HISTORICAL CLAIMMAY BE AN INVALID PRESENT-DAY CLAIM.
Coordinate validation
function validate_coordinate(coordinate): require(coordinate.target_object) require(coordinate.system_level) require(coordinate.observation_date) require(coordinate.evidence_ids) verify_capability_stage(coordinate.capability) verify_lifecycle_phase(coordinate.lifecycle) verify_habitat_level(coordinate.habitat) reject_if: invention_only_supports_stage_change temporary_presence_supports_habitat_independence high_capability_is_treated_as_health lifecycle_is_inferred_from_capability_alone coordinate_is_permanent_and_undated return coordinate_validation
Stage-change validation
stage_change_test: invention: required adoption: required scaling: required institutionalisation: required education: required dependency: required structural_consequence: required
function validate_stage_change(system, proposed_stage): if not invention: return FAIL if not adoption: return FAIL if not scaling: return FAIL if not institutionalisation: return FAIL if not education_and_reproduction: return FAIL if not structurally_consequential: return FAIL return PASS
Habitat validation
function validate_habitat_claim(system, proposed_level): evaluate: food water energy atmosphere maintenance medicine reproduction governance education industrial_replacement knowledge_continuity remove_external_support() if terminal_failure_occurs: reject_independence_claim() return highest_sustainable_level
PRESENCE ≠ SETTLEMENTSETTLEMENT ≠ AUTONOMYAUTONOMY ≠ CIVILISATIONAL INDEPENDENCE
Relationship validation
function validate_relationship(edge): require(valid_object(edge.source)) require(valid_predicate(edge.predicate)) require(valid_object(edge.target)) require(edge.system_level) require(edge.temporal_scope) require(edge.evidence_ids) if edge.class == causal: require(edge.mechanism) if edge.class == dependency: require(edge.required_function) require(edge.criticality) require(edge.failure_effect) if edge.class == comparative: require(shared_comparison_dimension) reject_if: predicate_is_undefined direction_is_ambiguous scale_is_inherited_silently correlation_is_marked_as_causation return relationship_validation
Dependency validation
dependency_validation: required: - dependent_object - provider_object - required_function - criticality - substitutability - redundancy - failure_effect
function validate_dependency(dependency): simulate_provider_removal() verify_required_function() verify_alternative_providers() verify_failure_consequence() if dependency.criticality == existential and failure_effect != civilisational: flag_inconsistency() return dependency_validation
Evidence validation
function validate_evidence(evidence): require(valid_source_id) require(exact_source_location) require(extraction_record) require(temporal_scope) require(system_level) require(uncertainty) require(confidence) reject_if: source_cannot_be_traced quotation_cannot_be_located interpretation_is_marked_as_observation machine_output_is_self_validated evidence_is_outside_claim_scope return evidence_validation
Provenance validation
provenance_validation: required_chain: - source - evidence - interpretation_or_direct_observation - claim - atlas_mapping - output
function validate_provenance(target): chain = retrieve_provenance_chain(target) if chain.has_missing_link: return INVALID if transformation_is_unrecorded: return INVALID if information_loss_is_unrecorded: return WARNING return VALID
Crosswalk validation
function validate_crosswalk(crosswalk): require(original_model_preserved) require(source_terms_defined) require(mapping_types_declared) require_information_loss_record() preserve_unmapped_concepts() preserve_conflicting_assumptions() reject_if: external_theory_is_relabelled_as_atlas_theory partial_mapping_is_marked_direct analogy_is_marked_equivalence source_limitations_are_removed return crosswalk_validation
Conflict classes
conflict_classes: IDENTITY: definition: > Two records disagree about what an object is. CLASSIFICATION: definition: > Records assign different object types or system levels. COORDINATE: definition: > Different supported Atlas positions exist. EVIDENCE: definition: > Sources report incompatible observations. INTERPRETATION: definition: > The same evidence produces different explanations. CAUSAL: definition: > Models disagree about what caused an outcome. SCALE: definition: > Claims operate at incompatible system levels. TEMPORAL: definition: > Claims refer to different periods but appear contradictory. DEFINITION: definition: > Terms use incompatible meanings. VERSION: definition: > Records depend on incompatible schema or ontology versions.
Conflict object
conflict: conflict_id: required conflict_class: required target_id: required opened_at: required positions: - position_id: required claim_ids: required evidence_ids: required framework_ids: optional confidence: required shared_ground: [] disputed_elements: [] likely_source_of_conflict: [] material_effect: required resolution_status: - unresolved - conditionally_reconciled - scale_dependent - time_dependent - definition_dependent - resolved - superseded canonical_effect: - none - warning - provisional_only - canonical_status_suspended
Conflict detection
function detect_conflicts(new_record): comparable_records = retrieve_same_target_and_scope(new_record) conflicts = [] for existing in comparable_records: if logically_incompatible(new_record, existing): conflict_type = classify_conflict( new_record, existing ) conflicts.append( create_conflict_record( new_record, existing, conflict_type ) ) return conflicts
Conflict resolution
function resolve_conflict(conflict): align: definitions scales dates methods evidence_types assumptions if conflict_disappears_after_alignment: return CONDITIONALLY_RECONCILED compare: source_quality directness methodology independence scale_match temporal_match if one_position_is_invalid: mark_invalid_position() else: preserve_multiple_positions() return updated_conflict
DISAGREEMENT IS DATA.RESOLUTION IS NOT FORCED.
Canonical status
canonical_status: CANDIDATE: definition: submitted_but_not_validated PROVISIONAL: definition: usable_with_material_uncertainty CANONICAL: definition: validated_reference_record DISPUTED: definition: canonical_claim_has_active_material_conflict DEPRECATED: definition: retained_but_no_longer_preferred SUPERSEDED: definition: replaced_by_newer_record RETIRED: definition: removed_from_active_runtime_but_preserved
Canonical promotion
function promote_to_canonical(record): require(schema_valid) require(identity_valid) require(scale_valid) require(provenance_complete) require(evidence_threshold_met) require(no_unresolved_critical_conflict) require(version_compatible) record.status = CANONICAL return record
Version model
version: schema_version: required ontology_version: required object_version: required runtime_version: required article_version: optional effective_date: required
SCHEMA VERSION= DATA STRUCTUREONTOLOGY VERSION= MEANING OF TERMSOBJECT VERSION= STATE OF ONE OBJECTRUNTIME VERSION= PROCESSING LOGICARTICLE VERSION= PUBLISHED HUMAN INTERFACE
Semantic versioning
semantic_versioning: format: MAJOR.MINOR.PATCH MAJOR: trigger: - incompatible_schema_change - coordinate_redefinition - identifier_rule_change - ontology_break MINOR: trigger: - backward_compatible_field_addition - new_object_type - new_predicate - new_diagnostic PATCH: trigger: - typo_fix - clarification - metadata_correction - non_structural_update
Version record
version_record: version_id: required target_id: required previous_version: optional new_version: required change_type: required change_summary: required changed_fields: [] reason: required migration_required: required migration_rule: optional approved_by: required effective_date: required
Immutable history rule
history_rule: overwrite_previous_version: false preserve_old_versions: true preserve_old_coordinates: true preserve_old_claims: true preserve_old_relationships: true
UPDATE THE PRESENT RECORD.DO NOT DELETE THE HISTORICAL RECORD.
Object update
function update_object(object_id, changes): current = retrieve_current_version(object_id) new_version = clone(current) apply(changes, new_version) validate(new_version) link: previous_version = current.version new_version = increment_version(current) preserve(current) activate(new_version) return new_version
Coordinate update
coordinate_update: coordinate_id: required target_object: required previous_coordinate: required new_coordinate: required observation_date: required change_reason: required evidence_ids: required
A NEW COORDINATEDOES NOT INVALIDATETHE OLD COORDINATE.IT CREATES MOTION HISTORY.
Ontology change
ontology_change: change_id: required affected_term: required previous_definition: required new_definition: required reason: - clarification - evidence_change - scope_change - conceptual_split - conceptual_merge - error_correction affected_objects: [] affected_articles: [] affected_queries: [] migration_plan: required
Concept split
concept_split: old_concept: required new_concepts: required mapping: - old_records_to_review - automatic_migrations - ambiguous_records redirects: required
Example:
OLD:Lifecycle StageSPLIT INTO:Lifecycle Phase+Lifecycle Condition
Concept merge
concept_merge: source_concepts: required canonical_concept: required preserved_aliases: required semantic_loss: required migration_rule: required
Backward compatibility
compatibility: backward_compatible: definition: > New runtime can correctly interpret old records. forward_compatible: definition: > Old runtime can safely ignore unsupported new fields. incompatible: definition: > Migration is required before records can be compared.
function check_compatibility(record, runtime): if record.schema_major != runtime.schema_major: return MIGRATION_REQUIRED if record.schema_minor > runtime.schema_minor: return PARTIAL_SUPPORT return COMPATIBLE
Migration contract
migration: migration_id: required from_version: required to_version: required target_records: required transformations: - field_rename - field_split - field_merge - value_translation - identifier_redirect - coordinate_recalculation information_loss: required reversible: required validation_required: true
Deprecation rule
deprecation: target_id: required deprecated_from: required replacement_id: optional reason: required redirect: required historical_access: required
DEPRECATED ≠ DELETED
Registry integrity
registry_integrity: checks: - unique_canonical_ids - valid_redirects - no_broken_relationship_targets - no_orphaned_evidence - no_unversioned_canonical_records - no_circular_redirects - no_active_superseded_records
function audit_registry(): detect_duplicate_ids() detect_broken_edges() detect_orphan_records() detect_invalid_versions() detect_unresolved_redirects() detect_schema_drift() detect_canonical_records_without_provenance() return audit_report
Schema drift detection
function detect_schema_drift(records): observed_fields = collect_unregistered_fields(records) observed_meanings = detect_term_usage_changes(records) if unregistered_field_frequency > threshold: create_schema_gap() if canonical_term_meaning_has_shifted: create_ontology_conflict() return drift_report
REPEATED EXCEPTIONSMAY INDICATETHE SCHEMA MUST EVOLVE.
Change authority
change_authority: patch_change: approval: maintainer minor_change: approval: - schema_review - compatibility_check major_change: approval: - ontology_review - migration_plan - affected_registry_audit - canonical_release
Release manifest
release_manifest: release_id: required release_version: required release_date: required included: schemas: [] ontology_terms: [] objects: [] relationships: [] crosswalks: [] runtimes: [] articles: [] changes: added: [] modified: [] deprecated: [] superseded: [] migrated: [] unresolved_conflicts: [] known_limitations: []
Validation pipeline
function validate_and_register(record): syntax = validate_syntax(record) schema = validate_schema(record) identity = validate_identity(record) scale = validate_scale(record) temporal = validate_time(record) semantic = validate_semantics(record) evidence = validate_evidence(record) provenance = validate_provenance(record) conflicts = detect_conflicts(record) version = check_compatibility( record, CURRENT_RUNTIME ) result = aggregate_validation( syntax, schema, identity, scale, temporal, semantic, evidence, provenance, conflicts, version ) return registration_decision(result)
Registration decision
function registration_decision(validation): if validation.has_fatal_failure: return REJECT if validation.has_critical_failure: return QUARANTINE if validation.has_material_uncertainty: return REGISTER_PROVISIONALLY if validation.has_warning: return REGISTER_WITH_WARNING return REGISTER_CANONICALLY
Audit query runtime
query: "Why is this object provisional?"return: failed_checks warnings evidence_gaps conflicts required_review
query: "What changed between versions?"return: field_diff definition_diff evidence_diff coordinate_diff migration_history
query: "Which canonical claims are disputed?"return: active_conflicts affected_objects competing_positions confidence canonical_effect
Minimum canonical requirements
minimum_canonical_requirements: object_identity: valid system_level: valid temporal_scope: valid provenance: complete evidence_confidence: above_threshold schema_version: compatible critical_conflicts: none validation_status: passed
Canonical rule
canonical_rule: > No Atlas object, coordinate, relationship, dependency, crosswalk or claim becomes canonical without schema, identity, scale, temporal, evidential, provenance and version validation. Conflicts must remain visible, and historical versions must remain recoverable.
Runtime summary
VALIDATION PREVENTS BAD DATAFROM BECOMING CANONICAL.CONFLICT RECORDS PREVENTDISAGREEMENT FROM BEING ERASED.VERSIONING PREVENTSTHE ATLAS FROM FORGETTING ITS OWN HISTORY.MIGRATION ALLOWSTHE ARCHITECTURE TO EVOLVE.DEPRECATION PRESERVESOLD ROUTES WITHOUT KEEPING THEM ACTIVE.THE ATLAS MAY CHANGE.ITS LINEAGE MUST NOT BREAK.
