All checks were successful
Deploy Frontend / build-and-deploy (push) Successful in 2m4s
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%).
164 lines
6 KiB
Markdown
164 lines
6 KiB
Markdown
# Rule 60: No Migration Deferral - Execute All slot_fixes.yaml Revisions
|
|
|
|
## Status: MANDATORY
|
|
|
|
## Summary
|
|
|
|
**AI agents MUST execute ALL migrations specified in `slot_fixes.yaml`.** The pattern of marking migrations as "WELL_STRUCTURED_NO_MIGRATION_NEEDED" or similar deferral notes is **STRICTLY PROHIBITED** except in the rarest cases of genuine semantic conflict.
|
|
|
|
## The Problem
|
|
|
|
Previous AI agents incorrectly deferred >95% of slot_fixes.yaml migrations with notes like:
|
|
- "WELL_STRUCTURED_NO_MIGRATION_NEEDED"
|
|
- "Already has proper slot_uri"
|
|
- "Simple enum is appropriate"
|
|
- "Would add unnecessary indirection"
|
|
- "Current structure is adequate"
|
|
|
|
**These deferrals were WRONG.** The slot_fixes.yaml revisions were carefully curated based on:
|
|
- Ontology analysis (CIDOC-CRM, RiC-O, PROV-O, Schema.org alignment)
|
|
- Semantic correctness and consistency
|
|
- Pattern adherence (Rule 39: RiC-O naming, Rule 43: singular nouns)
|
|
- Type/Types class hierarchy design (Rule 0b)
|
|
|
|
## The Rule
|
|
|
|
### MANDATORY: Execute ALL Migrations
|
|
|
|
When encountering a slot_fixes.yaml entry with `status: false`:
|
|
|
|
1. **READ the `revision` field** - This specifies EXACTLY what to do
|
|
2. **EXECUTE the migration** - Create/update slots, classes, imports as specified
|
|
3. **UPDATE status to `true`** - Document what was done in `notes`
|
|
|
|
### PROHIBITED: Deferral Reasoning
|
|
|
|
The following justifications are **INVALID** and **NEVER acceptable**:
|
|
|
|
| Invalid Justification | Why It's Wrong |
|
|
|-----------------------|----------------|
|
|
| "Already has proper slot_uri" | slot_uri handles 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 |
|
|
| "Current structure is well-designed" | Individual optimization conflicts with schema-wide patterns |
|
|
| "No semantic benefit" | Agent lacks context to make this judgment |
|
|
|
|
### VALID: Reasons to Pause (Not Defer)
|
|
|
|
The ONLY valid reasons to pause a migration (NOT defer indefinitely) are:
|
|
|
|
1. **Semantic Conflict**: The proposed revision contradicts the slot's documented semantic intent
|
|
2. **Circular Dependency**: Migration would create import cycle
|
|
3. **External Consumer Impact**: Breaking change affecting downstream systems
|
|
4. **Class Already Exists**: Target class exists under different name (document and merge)
|
|
|
|
**When pausing**: Add a `feedback` entry explaining the specific conflict and request human review. Do NOT mark as "NO_MIGRATION_NEEDED".
|
|
|
|
## Decision Tree
|
|
|
|
```
|
|
Is there a slot_fixes.yaml entry with status: false?
|
|
├─ YES → Read the revision field
|
|
│ ├─ Does revision specify slots/classes to create?
|
|
│ │ └─ YES → EXECUTE THE MIGRATION (mandatory)
|
|
│ └─ Is there a genuine semantic conflict?
|
|
│ ├─ NO → EXECUTE THE MIGRATION (mandatory)
|
|
│ └─ YES → Document conflict in feedback, request human review
|
|
│ (Do NOT mark as "no migration needed")
|
|
└─ NO → Nothing to do
|
|
```
|
|
|
|
## Examples
|
|
|
|
### WRONG: Deferral Note
|
|
|
|
```yaml
|
|
- original_slot_id: https://nde.nl/ontology/hc/slot/example_slot
|
|
revision:
|
|
- label: has_or_had_example
|
|
type: slot
|
|
- label: Example
|
|
type: class
|
|
processed:
|
|
status: true # WRONG - marked true without doing work
|
|
notes: "WELL_STRUCTURED_NO_MIGRATION_NEEDED - slot already has proper
|
|
slot_uri and the current structure is adequate" # INVALID
|
|
```
|
|
|
|
### CORRECT: Execute Migration
|
|
|
|
```yaml
|
|
- original_slot_id: https://nde.nl/ontology/hc/slot/example_slot
|
|
revision:
|
|
- label: has_or_had_example
|
|
type: slot
|
|
- label: Example
|
|
type: class
|
|
processed:
|
|
status: true
|
|
timestamp: '2026-01-19T12:00:00Z'
|
|
notes: 'Migrated 2026-01-19 per Rule 53/56.
|
|
- Created has_or_had_example.yaml slot file
|
|
- Created Example.yaml class file
|
|
- Updated ClassA.yaml, ClassB.yaml to use new slot
|
|
- Archived: modules/slots/archive/example_slot_archived_20260119.yaml'
|
|
```
|
|
|
|
### CORRECT: Pause with Genuine Conflict
|
|
|
|
```yaml
|
|
- original_slot_id: https://nde.nl/ontology/hc/slot/conflicting_slot
|
|
revision:
|
|
- label: has_or_had_foo
|
|
type: slot
|
|
processed:
|
|
status: false # Correctly left false
|
|
notes: ''
|
|
feedback:
|
|
- timestamp: '2026-01-19T12:00:00Z'
|
|
user: opencode-claude
|
|
done: false
|
|
comment: |
|
|
PAUSED FOR HUMAN REVIEW - Genuine semantic conflict detected:
|
|
- Revision specifies has_or_had_foo (temporal relationship)
|
|
- But slot is used for immutable birth dates (should be has_*)
|
|
- Request clarification on intended temporal semantics
|
|
```
|
|
|
|
## Statistics Context
|
|
|
|
The slot_fixes.yaml file contains 527 migration entries. Analysis of previous agent behavior:
|
|
|
|
- **Incorrectly deferred**: >95% of entries marked "NO_MIGRATION_NEEDED"
|
|
- **Actually needing deferral**: <5% (genuine semantic conflicts)
|
|
- **Required action**: Execute ALL migrations except those with documented semantic conflicts
|
|
|
|
## Related Rules
|
|
|
|
- **Rule 53**: Full Slot Migration - slot_fixes.yaml is AUTHORITATIVE
|
|
- **Rule 56**: Semantic Consistency Over Simplicity - Always Execute Revisions
|
|
- **Rule 57**: slot_fixes.yaml Revision Key is IMMUTABLE
|
|
- **Rule 58**: Feedback vs Revision Distinction
|
|
|
|
## Anti-Patterns Checklist
|
|
|
|
Before marking ANY migration as complete without execution, verify:
|
|
|
|
- [ ] Did I actually create the specified slots?
|
|
- [ ] Did I actually create the specified classes?
|
|
- [ ] Did I update all class files that use this slot?
|
|
- [ ] Did I archive the old slot file?
|
|
- [ ] Is my "notes" field documenting actual work done, not a deferral excuse?
|
|
|
|
If any answer is "no", the migration is NOT complete.
|
|
|
|
## Consequences
|
|
|
|
Agents that defer migrations without genuine semantic conflict:
|
|
1. Create technical debt requiring human cleanup
|
|
2. Delay schema consistency improvements
|
|
3. Waste curator time reviewing false "completions"
|
|
4. Undermine trust in AI-assisted schema work
|
|
|
|
**Execute the migrations. Do not defer.**
|