fix: defer relationship classification until comparability is established

This commit is contained in:
2026-08-02 16:48:10 +01:00
parent c97f5f7303
commit 7d408701b5
3 changed files with 103 additions and 8 deletions
+65 -4
View File
@@ -210,6 +210,23 @@ export function assessComparability(graph) {
};
}
function buildReasoningStages(comparability, relationship, deferred = false) {
return [
{
stage: "comparability",
status: comparability.comparabilityStatus,
outcome: comparability.reason,
},
{
stage: "relationship",
status: relationship.relationshipStatus,
outcome: deferred
? "not assessed until comparability is established"
: relationship.reason,
},
];
}
function extractObservationConcepts(profile) {
const concepts = new Set();
const text = profile.normalised;
@@ -250,7 +267,7 @@ function extractObservationDirection(profile) {
return "unknown";
}
export function classifyObservationRelationship(graph) {
function classifyObservationRelationshipWhenComparable(graph) {
const observations = collectObservationNodes(graph);
const profiles = observations.map((node) =>
analyseObservationText(`${node.label} ${node.description}`),
@@ -343,6 +360,42 @@ export function classifyObservationRelationship(graph) {
};
}
export function classifyObservationRelationship(graph) {
const comparability = assessComparability(graph);
if (comparability.comparabilityStatus !== "confirmed") {
const deferredRelationship = {
relationshipStatus: "insufficient_information",
reason:
"Relationship classification is deferred until comparability is established.",
contradictionReasoningAllowed: false,
questionRequired: comparability.comparabilityStatus === "uncertain",
questionSuppressedReason:
comparability.comparabilityStatus === "incompatible"
? "Relationship classification was not attempted because the observations are not yet comparable."
: undefined,
relationshipAssessed: false,
};
return {
...deferredRelationship,
reasoningStages: buildReasoningStages(
comparability,
deferredRelationship,
true,
),
};
}
const classified = classifyObservationRelationshipWhenComparable(graph);
return {
...classified,
relationshipAssessed: true,
reasoningStages: buildReasoningStages(comparability, classified, false),
};
}
function buildComparabilityQuestion(graph, assessment) {
const centralText = normaliseText(graph?.centralStatement || "");
const mentionsPeriod =
@@ -380,6 +433,7 @@ function detectContradictionContext(graph) {
export function formulateTieResolutionQuestion({ graph }) {
const comparability = assessComparability(graph);
if (comparability.comparabilityStatus === "uncertain") {
const deferredRelationship = classifyObservationRelationship(graph);
return {
question: buildComparabilityQuestion(graph, comparability),
reason:
@@ -391,10 +445,11 @@ export function formulateTieResolutionQuestion({ graph }) {
comparabilityReason: comparability.reason,
contradictionReasoningAllowed:
comparability.contradictionReasoningAllowed,
relationshipStatus: "insufficient_information",
relationshipReason:
"Relationship classification is deferred until comparability is established.",
relationshipStatus: deferredRelationship.relationshipStatus,
relationshipReason: deferredRelationship.reason,
relationshipAssessed: deferredRelationship.relationshipAssessed,
questionRequired: true,
reasoningStages: deferredRelationship.reasoningStages,
};
}
@@ -410,9 +465,11 @@ export function formulateTieResolutionQuestion({ graph }) {
comparabilityReason: comparability.reason,
relationshipStatus: relationship.relationshipStatus,
relationshipReason: relationship.reason,
relationshipAssessed: relationship.relationshipAssessed,
contradictionReasoningAllowed: relationship.contradictionReasoningAllowed,
questionRequired: relationship.questionRequired,
questionSuppressedReason: relationship.questionSuppressedReason,
reasoningStages: relationship.reasoningStages,
};
}
@@ -429,8 +486,10 @@ export function formulateTieResolutionQuestion({ graph }) {
comparabilityReason: comparability.reason,
relationshipStatus: relationship.relationshipStatus,
relationshipReason: relationship.reason,
relationshipAssessed: relationship.relationshipAssessed,
contradictionReasoningAllowed: relationship.contradictionReasoningAllowed,
questionRequired: relationship.questionRequired,
reasoningStages: relationship.reasoningStages,
};
}
@@ -453,8 +512,10 @@ export function formulateTieResolutionQuestion({ graph }) {
comparabilityReason: comparability.reason,
relationshipStatus: relationship.relationshipStatus,
relationshipReason: relationship.reason,
relationshipAssessed: relationship.relationshipAssessed,
contradictionReasoningAllowed: relationship.contradictionReasoningAllowed,
questionRequired: relationship.questionRequired,
reasoningStages: relationship.reasoningStages,
};
}