reasoning: admit verified user-supported unknowns without provenance edges
This commit is contained in:
@@ -75,12 +75,31 @@ function isCompoundQuestion(question) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function validateAddedUnknowns(graph, proposal) {
|
||||
function validateAddedUnknowns(graph, proposal, answerMeaning) {
|
||||
const errors = [];
|
||||
const addedUnknowns = proposal.addedNodes.filter(
|
||||
(node) => node.kind === "unknown",
|
||||
);
|
||||
|
||||
const userSupportedMeaningText = answerMeaning?.userSupportedMeaning;
|
||||
|
||||
function hasNodeLevelUserSupport(unknownNode) {
|
||||
if (!userSupportedMeaningText) return false;
|
||||
|
||||
const unknownText = normaliseSemanticText(
|
||||
[normaliseText(unknownNode.label), normaliseText(unknownNode.description)]
|
||||
.filter(Boolean)
|
||||
.join(" "),
|
||||
);
|
||||
|
||||
const overlapRatio = semanticOverlapRatio(userSupportedMeaningText, unknownText);
|
||||
const overlappingTokens = semanticContentTokens(userSupportedMeaningText).filter(
|
||||
(token) => semanticContentTokens(unknownText).includes(token),
|
||||
).length;
|
||||
|
||||
return overlapRatio >= 0.4 || overlappingTokens >= 3;
|
||||
}
|
||||
|
||||
if (addedUnknowns.length > 3) {
|
||||
errors.push(
|
||||
`Proposal adds too many unknown nodes: ${addedUnknowns.length} (maximum 3)`,
|
||||
@@ -180,7 +199,10 @@ function validateAddedUnknowns(graph, proposal) {
|
||||
);
|
||||
}
|
||||
|
||||
if (!hasExplicitAnswerDerivedRelationship(unknownNode)) {
|
||||
if (
|
||||
!hasNodeLevelUserSupport(unknownNode) &&
|
||||
!hasExplicitAnswerDerivedRelationship(unknownNode)
|
||||
) {
|
||||
errors.push(
|
||||
`New unknown must be explicitly related to an answer-derived node: "${unknownNode.id}"`,
|
||||
);
|
||||
@@ -3232,7 +3254,7 @@ export function applyValidatedProposal({
|
||||
...validateSemanticDuplicateUnknowns(situationGraph, validatedProposal),
|
||||
);
|
||||
proposalCompatibilityErrors.push(
|
||||
...validateAddedUnknowns(situationGraph, validatedProposal),
|
||||
...validateAddedUnknowns(situationGraph, validatedProposal, validatedProposal.answerMeaning),
|
||||
);
|
||||
|
||||
const selectedQuestionValidation = validateSelectedQuestion(
|
||||
|
||||
Reference in New Issue
Block a user