- Introduced the ImageTilingServiceEndpoint class for tiled high-resolution image delivery, including deep-zoom and transformation capabilities, with multilingual descriptions and structured aliases. - Archived the ID class as a backwards-compatible alias for Identifier, marking it as deprecated to enforce the use of the canonical Identifier model.
5.7 KiB
5.7 KiB
Rule: slot_fixes.yaml Revision Key Immutability
Status: CRITICAL
Summary
The revision key in slot_fixes.yaml is IMMUTABLE. AI agents MUST follow revision specifications exactly and are NEVER permitted to modify the content of revision entries.
The Authoritative Source
The file slot_fixes.yaml serves as the curated migration specification for all slot consolidations in the Heritage Custodian Ontology. Each entry's revision section was manually curated 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)
What Agents CAN Do
| Action | Permitted | Location |
|---|---|---|
| Add completion notes | ✅ YES | processed.notes |
| Update status | ✅ YES | processed.status |
| Add feedback responses | ✅ YES | feedback.response |
| Mark feedback as done | ✅ YES | feedback.done |
| Execute the migration per revision | ✅ YES | Class/slot files |
What Agents CANNOT Do
| Action | Permitted | Reason |
|---|---|---|
Modify revision content |
❌ NEVER | Authoritative specification |
| Substitute different slots | ❌ NEVER | Violates curated design |
| Skip revision components | ❌ NEVER | Incomplete migration |
| Add new revision items | ❌ NEVER | Requires human curation |
| Change revision labels | ❌ NEVER | Breaks semantic mapping |
| Reorder revision items | ❌ NEVER | link_branch dependencies |
Structure of slot_fixes.yaml Entries
- original_slot_id: https://nde.nl/ontology/hc/slot/example_slot
original_slot_label: example_slot
revision: # ← IMMUTABLE - DO NOT MODIFY
- label: has_or_had_example # Generic slot to use
type: slot
- label: Example # Class for range
type: class
- label: has_or_had_attribute # Nested attribute (link_branch: 1)
type: slot
link_branch: 1
processed:
status: false # ← CAN UPDATE to true
notes: "" # ← CAN ADD notes here
feedback: # ← CAN ADD responses here
user: "Simon C. Kemper"
date: "2026-01-17"
message: "Migration incomplete"
done: false # ← CAN UPDATE to true
response: "" # ← CAN ADD response here
Understanding link_branch in Revisions
The link_branch field indicates nested class attributes:
| Revision Item | Meaning |
|---|---|
Items WITHOUT link_branch |
PRIMARY slot and class to create |
Items WITH link_branch: 1 |
First attribute the primary class needs |
Items WITH link_branch: 2 |
Second attribute the primary class needs |
Example:
revision:
- label: has_or_had_quantity # PRIMARY SLOT
type: slot
- label: Quantity # PRIMARY CLASS
type: class
- label: has_or_had_measurement_unit # Quantity.has_or_had_measurement_unit
type: slot
link_branch: 1
- label: MeasureUnit # Range of branch 1 slot
type: class
link_branch: 1
Migration Workflow
- READ the
revisionsection completely - VERIFY all referenced slots/classes exist (or create them)
- REMOVE old slot from imports, slots list, and slot_usage in consuming classes
- ADD new slot(s) and class import(s) per revision specification
- UPDATE slot_usage to narrow range to specified class
- VALIDATE with
linkml-lintorgen-owl - UPDATE slot_fixes.yaml:
- Set
processed.status: true - Add completion note to
processed.notes - If feedback exists, set
feedback.done: trueand addfeedback.response
- Set
Anti-Patterns
WRONG - Modifying Revision Content
# Agent incorrectly "improves" the revision
revision:
- label: has_description # ❌ CHANGED from has_or_had_description
type: slot
- label: TextDescription # ❌ CHANGED from Description
type: class
WRONG - Substituting Different Slots
# Agent uses a different slot than specified
# Revision says: has_or_had_type + BindingType
# Agent uses: binding_classification + BindingClassification ❌ WRONG
WRONG - Partial Migration
# Agent only creates the slot, ignores the class
revision:
- label: has_or_had_type # ✅ Agent created this
type: slot
- label: BindingType # ❌ Agent ignored this
type: class
CORRECT - Following Revision Exactly
# Revision specifies:
revision:
- label: has_or_had_description
type: slot
- label: Description
type: class
# Agent creates/uses EXACTLY:
# 1. Import ../slots/has_or_had_description
# 2. Import ../classes/Description
# 3. slot_usage: has_or_had_description with range: Description
Rationale
- Curated Quality: Revisions were manually designed with ontology expertise
- Consistency: Same patterns applied across all migrations
- Auditability: Clear record of intended vs. actual changes
- Reversibility: Original specifications preserved for review
- Trust: Users can rely on revision specifications being stable
Related Rules
- Rule 53: Full Slot Migration - slot_fixes.yaml is AUTHORITATIVE
- Rule 56: Semantic Consistency Over Simplicity
- Rule 39: Slot Naming Convention (RiC-O Style)
- Rule 38: Slot Centralization and Semantic URI Requirements
- Rule 0b: Type/Types File Naming Convention
See Also
schemas/20251121/linkml/modules/slots/slot_fixes.yaml- The authoritative file.opencode/rules/full-slot-migration-rule.md- Migration execution rules.opencode/rules/semantic-consistency-over-simplicity.md- Why revisions must be followed