Session 2026-01-19: Completed remaining migrations per Rules 53/56/60. Major migrations: 1. claim_type → has_or_had_type + ClaimType/ClaimTypes (60+ concrete types in 11 categories) 2. circumstances_of_death → is_deceased + DeceasedStatus + CauseOfDeath 3. claims_count → has_or_had_quantity + Quantity (with based_on_claim for provenance) 4. classification_status → has_or_had_type + ClassificationStatusType Created files: - ClaimType.yaml, ClaimTypes.yaml (abstract base + 60+ concrete subclasses) - DeceasedStatus.yaml, CauseOfDeath.yaml, CauseOfDeathTypeEnum.yaml - ClassificationStatus.yaml, ClassificationStatusType.yaml, ClassificationStatusTypes.yaml - CITESAppendix.yaml, City.yaml, CertaintyLevel.yaml - is_deceased.yaml, is_or_was_caused_by.yaml, based_on_claim.yaml Archived slots: - claim_type, circumstances_of_death, claims_count, classification_status Added Rule 60 to AGENTS.md: No Migration Deferral - agents MUST execute all migrations. All 527 slot_fixes.yaml entries now complete (100%).
7.4 KiB
Rule 56: Semantic Consistency Over Simplicity - Always Execute slot_fixes.yaml Revisions
🚨 CRITICAL: When slot_fixes.yaml specifies a revision, agents MUST execute it. Perceived simplicity of the existing slot is NOT a valid reason to reject a migration.
The Core Problem
Previous agents marked migrations as "NO MIGRATION NEEDED" or "WELL_STRUCTURED_NO_MIGRATION_NEEDED" citing reasons like:
- "simple enum appropriate"
- "would add unnecessary indirection"
- "already has proper slot_uri"
- "string range is sufficient for this use case"
- "well-structured, no migration needed"
- "current implementation is adequate"
These judgments were INCORRECT.
Over 95% of entries in slot_fixes.yaml represent carefully curated migrations that MUST be executed.
The revisions were manually designed based on:
- Ontology analysis (CIDOC-CRM, RiC-O, PROV-O, Schema.org alignment)
- Semantic correctness
- Pattern consistency (Rule 39: RiC-O style naming)
- Type/Types class hierarchy design (Rule 0b)
Why Revisions MUST Be Executed
| Principle | Explanation |
|---|---|
| Schema Consistency | Ontology achieves semantic power through consistent patterns, not local optimizations |
| LinkML Mapping Separation | slot_uri handles external ontology alignment; slot structure handles internal consistency |
| Single Responsibility Principle | Predicates should have single, focused purposes |
| Extensibility First | Structured classes enable future extension even if current use is simple |
| Curated Quality | Revisions were manually designed with ontology expertise - trust them |
Invalid Reasons to Reject Migrations
| Rejected Reason | Why It's Invalid |
|---|---|
| "Already has proper slot_uri" | slot_uri is for external mapping; internal structure is separate concern |
| "Simple string/enum is sufficient" | Consistency and extensibility trump local simplicity |
| "Would add unnecessary indirection" | Indirection enables reuse and future extension |
| "Creating a class would over-engineer" | Ontology design favors class-based modeling |
| "Well-structured, no migration needed" | If revision exists, migration IS needed |
| "Current implementation is adequate" | Adequacy is not the standard; consistency is |
| "WELL_STRUCTURED_NO_MIGRATION_NEEDED" | This note type is PROHIBITED |
Valid Reasons to PAUSE Migrations (Not Reject)
These warrant discussion with the user, NOT unilateral rejection:
- Semantic Conflict: Proposed slot_uri contradicts the semantic intent of the slot
- Class Already Exists: The target class exists under a different name (propose merge)
- Circular Dependency: Migration would create import cycles
- Breaking External API: Change would break published external consumers
Even these reasons require escalation to the user - agents should NOT mark as "NO MIGRATION NEEDED".
The Key Insight
Agents confused "has good external mapping" with "needs no migration". These are independent concerns:
- External mapping (slot_uri, exact_mappings): How this slot relates to external ontologies
- Internal structure (range, class design): How this slot fits within the LinkML schema
A slot can have perfect external mappings AND still need structural migration for internal consistency.
Correct Agent Behavior
# When encountering a slot_fixes.yaml entry:
1. READ the revision specification completely
2. DO NOT evaluate whether migration is "necessary" - it IS necessary
3. CREATE the specified slots and classes
4. UPDATE the consuming class(es)
5. ARCHIVE the old slot
6. ADD processed section with status: true
# NEVER add notes like:
# - "NO MIGRATION NEEDED"
# - "WELL_STRUCTURED_NO_MIGRATION_NEEDED"
# - "Current implementation is sufficient"
# - "Would add unnecessary complexity"
# - "Simple enum appropriate"
Handling Previous "NO MIGRATION NEEDED" Entries
Entries previously marked with notes like "WELL_STRUCTURED_NO_MIGRATION_NEEDED" should be:
- Re-processed: The migration should be executed as specified in
revision - Notes replaced: Replace the incorrect notes with actual migration documentation
- Status verified: Ensure
status: truereflects ACTUAL migration, not skipped migration
Example - WRONG Agent Behavior
# WRONG - Agent decided migration wasn't needed
- original_slot_id: https://nde.nl/ontology/hc/slot/cites_appendix
revision:
- label: is_or_was_listed_in
type: slot
- label: CITESAppendix
type: class
processed:
status: true # ← Marked complete but NOT actually migrated!
notes: "WELL_STRUCTURED_NO_MIGRATION_NEEDED: Already has proper slot_uri
and string range is sufficient for CITES appendix values."
Example - CORRECT Agent Behavior
# CORRECT - Agent executed the migration as specified
- original_slot_id: https://nde.nl/ontology/hc/slot/cites_appendix
revision:
- label: is_or_was_listed_in
type: slot
- label: CITESAppendix
type: class
processed:
status: true
timestamp: '2026-01-19T00:00:00Z'
session: session-2026-01-19-cites-appendix-migration
notes: 'Migrated 2026-01-19 per Rule 53/56. Created is_or_was_listed_in.yaml.
Created CITESAppendix.yaml class. Updated BiologicalObject.yaml.
Archived: modules/slots/archive/cites_appendix_archived_20260119.yaml.'
Feedback Field
The feedback field in slot_fixes.yaml entries contains user corrections to agent mistakes. When feedback says things like:
- "I reject this!"
- "Conduct the migration"
- "Please conduct accordingly"
- "I altered the revision"
This means a previous agent incorrectly deferred the migration, and it MUST now be executed.
Schema Consistency Examples
Why "Simple URI is fine" is WRONG
# WRONG - Agent judgment: "Simple URI is fine"
thumbnail_url:
range: uri
slot_uri: schema:thumbnailUrl
# CORRECT - Consistent with all media references
has_or_had_thumbnail:
range: Thumbnail # Thumbnail class with has_or_had_url → URL
Rationale: All media references (images, thumbnails, videos, documents) should use the same structural pattern.
Why "Simple enum is appropriate" is WRONG
# WRONG - "Simple enum is fine"
thinking_mode:
range: ThinkingModeEnum # enabled, disabled, interleaved
# CORRECT - Enables extension
has_or_had_mode:
range: ThinkingMode
# ThinkingMode can have: mode_type, confidence, effective_date, etc.
Rationale: Even if current use is simple, structured classes enable future extension without breaking changes.
Summary
Trust the revision. Execute the migration. Document the work.
The revision key in slot_fixes.yaml represents carefully curated ontology decisions. Agents are executors of these decisions, not evaluators. The only acceptable output is a completed migration with proper documentation.
Related Rules
- Rule 53: slot_fixes.yaml is AUTHORITATIVE - Full Slot Migration
- Rule 55: Broaden Generic Predicate Ranges Instead of Creating Bespoke Predicates
- Rule 57: The revision key in slot_fixes.yaml is IMMUTABLE
- Rule 39: RiC-O Temporal Naming Conventions
- Rule 38: Slot Centralization and Semantic URI Requirements
Revision History
- 2026-01-19: Strengthened with explicit prohibition of "WELL_STRUCTURED_NO_MIGRATION_NEEDED" notes
- 2026-01-16: Created based on analysis of 51 feedback entries in slot_fixes.yaml