S2.5 alternative-loader spike VALIDATED 2026-05-02T~12:30 BST. ε.ι Layer 1 RESCUED.
Trigger
S2 MITIGATED 2026-05-02T11:08 BST established that schema-automator’s OwlImportEngine fails on all 3 target ontologies (CCO/IAO/IOF Core) with 3 distinct funowl/schemauto failure modes in 21s combined wall-clock. The S2 fallback (manual LinkML authoring + prefix-only class_uri: references, no structured_imports) was operationally identical to ω.η’s existing SSSOM-mediated alignment commitment — meaning ε.ι Layer 1 distinctiveness collapsed to ω.η pattern under fallback.
Rich-directive 2026-05-02T~11:50 BST: “S2 was not a success. i believe we should try to find alternatives now”. S2.5 = test alternative OWL loaders against the same 3 ontologies that broke schema-automator+funowl, before re-framing or dropping ε.ι.
Outcome
KILL CONDITION NOT MET on all 4 legs (parser-level error / empty class hierarchy / generator failure / instantiation failure).
owlready2 0.50 reads all 3 production ontologies cleanly:
| Ontology | Result | Classes | Properties | Individuals | Wall-clock |
|---|---|---|---|---|---|
| CCO 2.1 develop | OK | 1,431 | 229 | 350 | 0.1s |
| IAO v2026-03-30 | OK | 266 | 150 | 21 | 0.0s |
| IOF Core | OK | 83 | 69 | 0 | 1.1s |
~100-line emitter at /tmp/owlready2_to_linkml.py walks BFO IndependentContinuant 2 levels deep, emits 28-class LinkML YAML (19 imported CCO + 9 INHERIT i-ζ).
Codegen pipeline VALIDATED end-to-end:
- gen-pydantic → exit 0; 10,894 bytes; 32 Pydantic classes
- gen-typescript → exit 0; 2,482 bytes; 28 TS interfaces
- gen-json-schema → exit 0; 5,900 bytes; 28
$defs
All 9 i-ζ classes instantiate with correct MRO to BFO 2020 IndependentContinuant:
RealProperty → MaterialArtifact → MaterialEntity → IndependentContinuant
FinancialInstrument → MaterialEntity → IndependentContinuant
Chattel → MaterialArtifact → MaterialEntity → IndependentContinuant
DigitalAsset → MaterialEntity → IndependentContinuant
TrustProperty → MaterialArtifact → MaterialEntity → IndependentContinuant
PensionAsset → MaterialEntity → IndependentContinuant
IP → MaterialEntity → IndependentContinuant
Liability → MaterialEntity → IndependentContinuant
Receivable → MaterialEntity → IndependentContinuant
This validates the ε.ε ontological-grounding lock (Q-003 §3.2) — BFO 2020 (ISO 21838-2:2020) → CCO Material Artifact / Information Bearing Entity → INHERIT i-ζ subtypes.
Implication for ε.ι Layer 1 lock-time framing
| Framing | Source | Status |
|---|---|---|
| ”structured_imports auto via schema-automator” | Original ε.ι option (pre-S2) | INFEASIBLE (schema-automator+funowl broken on production OWL) |
| “manual + prefix-only refs (no structured_imports)“ | S2 MITIGATED fallback | Layer 1 collapses to ω.η pattern; lose distinctiveness |
| ”owlready2-based custom LinkML emitter” | S2.5 VALIDATED | Layer 1 distinctiveness REINSTATED via tooling swap |
Cost-row update at lock-time
| Path | One-shot cost | Distinctiveness preserved? |
|---|---|---|
| S2 fallback (manual + prefix-only) | ~10h ≈ £1.5K junior-engineer | NO — collapses to ω.η |
| S2.5 owlready2 emitter | ~16-24h ≈ £2-3K junior-engineer / ~1-2 Paul-days | YES |
Net trade-off: ~£500-1K more for the owlready2 path, preserves Layer 1 distinctiveness. Per feedback_bold_front_loaded_synthesis_preference, this is rounding-error-vs-acquirer-narrative-value.
Recommendations for Phase E Task 13 (ε.ι lock decision)
- Lock ε.ι Layer 1 with owlready2 as the named tool — A-131 amendment row reads “owlready2-based custom LinkML emitter (replaces broken schema-automator+funowl path discovered at S2)”.
- NEW richard-task (lock-time): Author production
cco_to_linkml.py+iao_to_linkml.py+iof_to_linkml.py(Phase-1 Sprint S1; ~2-3 days total). - DROP the previously-scoped richard-task (S2 T-file §5) “annual schema-automator + funowl ecosystem-health review”. REPLACE with “annual owlready2 ecosystem-health review + py-horned-owl Python-version-compat check”.
- Phase-1.5 stress-test cell — add: “owlready2 v0.50+ still loads CCO + IAO + IOF Core” at 6-monthly cadence.
Honesty caveats
- PoC was 28 classes (19 CCO mid-level + 9 i-ζ); production scale ~1431 + ~50-100 INHERIT extensions per module across 9 modules. Codegen scale-test deferred (Mondo Disease Ontology precedent at S7 indirectly suggests LinkML 1.10 handles 1000+ class schemas).
- Slot wiring not exercised — emitter declares slots at schema level but doesn’t attach them per-class. One-line emitter enhancement.
- py-horned-owl 1.4.0 has Python 3.14 incompatibility (
typing.Union.__doc__read-only in 3.14); second-source verification deferred until py-horned-owl 1.5+ OR Python 3.13 fallback venv. - Property + relation extraction — emitter handled classes only; OWL ObjectProperty + DataProperty + domains/ranges need a follow-on emitter pass (~50 additional lines).
- Multi-parent class disambiguation — emitter takes first parent; CCO has multi-parent classes needing explicit
mixins:handling for full fidelity. Phase-1 Sprint S1 enhancement.
Cross-references
- S2 T-file:
~/off-github/library/projects/inherit/T-spike-eps-iota-S2-linkml-imports-2026-05-02.md(S2 MITIGATED — schema-automator+funowl broken) - S2.5 T-file:
~/off-github/library/projects/inherit/T-spike-eps-iota-S2.5-owlready2-alternative-2026-05-02.md(this rescue; status complete; maturity outcome-VALIDATED) - S1 T-file:
~/off-github/library/projects/inherit/T-spike-eps-iota-S1-v66-seed-audit-2026-05-02.md(v6.6 SEED VALIDATED; depth 4.6/5) - arch-state §11: pre-lock derisking spike evidence; S2.5 row LANDED in this cascade
- Q-003 §10: pre-lock derisking spikes; S2.5 row LANDED in this cascade
- Q-Q3 lock file:
Q-003-zeta-asset-taxonomy-CCO-BFO-rooted-9-classes-locked.mdv1.3 with §10 S2.5 row added
Logging-contract closure (closed in same session as T-file authoring)
- ✓ T-file at
~/off-github/library/projects/inherit/T-spike-eps-iota-S2.5-owlready2-alternative-2026-05-02.md - ✓ arch-state §11 S2.5 row LANDED + Changelog row v3.17 → v3.18
- ✓ Q-003 file §10 S2.5 row LANDED + CHANGELOG entry v1.2 → v1.3
- ✓ MEMORY.md +1 entry pointing at this memory file
- ✓ This memory file written
- ✓ active-work-log entry updated
- ✓ S2-S10 cascade now: S1 VALIDATED + S2 MITIGATED + S2.5 VALIDATED → 2.5/10 effectively complete with Layer 1 distinctiveness preserved
Pattern caught: S2.5 logging-contract closed in same session as T-file authoring (avoids the S1 anti-pattern where logging-contract closure lagged T-file authoring by 4.5 hours). S2 + S2.5 both follow this discipline. Forward action confirmed: refined-prompt v3.6 candidate to formalise “logging-contract closure within same session as T-file authoring”.