Ontology Convergence in Ouroboros: How the 0.95 Similarity Threshold Works
Ontology Convergence is the stopping condition for Ouroboros's evolutionary development loop that triggers when the similarity score between consecutive ontologies reaches or exceeds the hard-coded 0.95 threshold.
Ontology Convergence serves as the primary termination mechanism for the self-improving architecture in the Q00/ouroboros repository. This process determines when the system's evolving schemas have stabilized sufficiently to halt the generational loop. Understanding how the 0.95 similarity threshold governs this convergence is essential for configuring and debugging autonomous ontology evolution.
What is Ontology Convergence?
Ontology Convergence represents the stabilization point where the system's evolving problem descriptions stop changing significantly between generations. In src/ouroboros/evolution/convergence.py, the ConvergenceCriteria class defines this as the moment when ontologies become "ontologically identical" based on a weighted similarity calculation.
The convergence mechanism evaluates the similarity score between the current and previous ontology schemas after each generation. When this score meets the 0.95 threshold, the evolutionary loop receives a termination signal to prevent unnecessary computational cycles.
How the 0.95 Similarity Threshold Works
The 0.95 threshold—referred to as the O.9S gate in the codebase—represents a similarity value derived from field-name overlap, type matching, and exact field matching between ontology versions. This value is hard-coded as convergence_threshold = 0.95 in lines 44-48 of the convergence module.
The O.9S Gate and Weighted Similarity Calculation
The similarity computation combines multiple structural comparison metrics to produce a normalized score between 0.0 and 1.0. According to the repository's README, this weighted formula assesses schema compatibility across field names, data types, and exact field matches. When the cumulative similarity reaches 0.95 or higher, the system interprets the ontologies as functionally equivalent.
Three Convergence Detection Methods
The framework implements three distinct checks to identify convergence:
- Ontology stability – Immediate termination when similarity ≥ 0.95 between the two most recent generations.
- Stagnation detection – Triggered when similarity ≥ 0.95 persists for a configurable number of consecutive generations (defaulting to 3).
- Hard-cap limit – Automatic termination after 30 generations regardless of similarity scores.
Each method returns a ConvergenceSignal object with converged=True and a descriptive reason string, as implemented in lines 93-102 of convergence.py.
Implementing Convergence Checks in Code
Developers interact with the convergence system through the ConvergenceCriteria class and the OntologyLineage structure. The following examples demonstrate practical implementation patterns from the Q00/ouroboros source.
from ouroboros.evolution.convergence import ConvergenceCriteria
from ouroboros.core.lineage import OntologyLineage
# Initialize criteria with default 0.95 threshold
criteria = ConvergenceCriteria()
# Evaluate current lineage state
signal = criteria.evaluate(lineage)
if signal.converged:
print("✅ Converged:", signal.reason)
else:
print("🔄 Continue evolving – similarity:", signal.ontology_similarity)
# Evolution loop integration pattern
while True:
result = await evolution_loop.step(lineage, execute=True)
lineage = result.lineage
# Check for 0.95 threshold satisfaction
conv = criteria.evaluate(lineage)
if conv.converged:
break # O.9S reached or stagnation detected
The evaluate() method encapsulates all three detection strategies and returns the appropriate termination signal based on the current lineage state.
Summary
- Ontology Convergence terminates the evolutionary loop when schema similarity stabilizes at or above 0.95 between generations.
- The threshold is hard-coded in
src/ouroboros/evolution/convergence.pyasconvergence_threshold = 0.95(lines 44-48). - Three detection methods exist: single-generation stability (≥0.95), stagnation over multiple generations (default 3), and a 30-generation hard cap.
- The
ConvergenceCriteria.evaluate()method returns aConvergenceSignalindicating whether the O.9S gate has been satisfied and providing a human-readable termination reason.
Frequently Asked Questions
What defines the 0.95 similarity threshold in Ouroboros?
The 0.95 threshold represents a weighted combination of field-name overlap, type matching, and exact field matching between consecutive ontology generations. It is hard-coded as the convergence_threshold constant in src/ouroboros/evolution/convergence.py and serves as the quantitative boundary for determining ontological identity.
How does stagnation detection differ from single-generation convergence?
While single-generation convergence triggers immediately when similarity reaches 0.95 between two consecutive ontologies, stagnation detection requires the similarity to remain at or above 0.95 for multiple consecutive generations (default 3) before signaling termination. This prevents premature stopping on temporary stability while catching true evolutionary plateaus.
Can the 0.95 similarity threshold be configured?
No, the 0.95 value is currently hard-coded in the ConvergenceCriteria class definition. While the stagnation detection window (number of consecutive generations) is configurable, the O.9S threshold itself remains a fixed constant in the current implementation.
Where is the convergence logic executed in the evolution loop?
The convergence check occurs after each generation within the orchestration logic, typically implemented in src/ouroboros/evolution/loop.py. The loop instantiates ConvergenceCriteria and calls its evaluate() method on the current OntologyLineage to determine whether to continue evolving or return the final converged state.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →