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:

OntologyResultClassesPropertiesIndividualsWall-clock
CCO 2.1 developOK1,4312293500.1s
IAO v2026-03-30OK266150210.0s
IOF CoreOK836901.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

FramingSourceStatus
”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 fallbackLayer 1 collapses to ω.η pattern; lose distinctiveness
”owlready2-based custom LinkML emitter”S2.5 VALIDATEDLayer 1 distinctiveness REINSTATED via tooling swap

Cost-row update at lock-time

PathOne-shot costDistinctiveness preserved?
S2 fallback (manual + prefix-only)~10h ≈ £1.5K junior-engineerNO — collapses to ω.η
S2.5 owlready2 emitter~16-24h ≈ £2-3K junior-engineer / ~1-2 Paul-daysYES

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)

  1. 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)”.
  2. 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).
  3. 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”.
  4. 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.md v1.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”.