Accept Scattermind experiment sections

This commit is contained in:
OpenClaw Bot
2026-05-27 00:55:19 +02:00
parent 9dbcd7770b
commit 1f8739444c
3 changed files with 52 additions and 5 deletions
+13 -4
View File
@@ -675,10 +675,10 @@ function nonGoalConflicts(optionText, decisionContext = {}) {
function normalizeFeatureOption(item, index, fallbackId = 'feature', defaultSourceSection = '', defaultRecommendedLane = '') {
const raw = typeof item === 'string' || typeof item === 'number' ? { action: String(item) } : objectFrom(item);
const title = cleanText(raw.title || raw.name || raw.action || raw.move || raw.label || '', 140);
const proofSteps = cleanTextList(raw.proofSteps || raw.proof || raw.validationSteps, 5, 180);
const title = cleanText(raw.title || raw.name || raw.action || raw.move || raw.experiment || raw.testName || raw.hypothesis || raw.label || '', 140);
const proofSteps = cleanTextList(raw.proofSteps || raw.proof || raw.validationSteps || raw.steps || raw.method, 5, 180);
const dependencies = cleanTextList(raw.dependencies || raw.blockedBy, 5, 120);
const evidenceNeeded = cleanText(raw.evidenceNeeded || raw.evidence || raw.test || raw.evidenceQuestion || raw.questionToAnswer || '', 260);
const evidenceNeeded = cleanText(raw.evidenceNeeded || raw.evidence || raw.test || raw.evidenceQuestion || raw.questionToAnswer || raw.question || raw.learningGoal || '', 260);
const userValue = cleanText(raw.userValue || raw.value || raw.outcome || raw.why, 260);
const risk = cleanText(raw.risk || raw.assumption || raw.unknown || '', 220);
const nextStep = cleanText(raw.nextStep || raw.nextAction || raw.firstStep || raw.manualStep || raw.actionToTake || '', 260);
@@ -692,7 +692,7 @@ function normalizeFeatureOption(item, index, fallbackId = 'feature', defaultSour
const sourceQuote = cleanMultiline(raw.sourceQuote || raw.sourceExcerpt || raw.evidenceQuote || raw.quote || raw.originalText || raw.rawText || '', 420);
const recommendedLane = cleanText(raw.recommendedLane || raw.laneHint || raw.suggestedLane || (laneLooksLikeHint ? rawLane : '') || defaultRecommendedLane || '', 40).toLowerCase();
const descriptionParts = [
raw.description || raw.brief || '',
raw.description || raw.brief || (raw.hypothesis && raw.hypothesis !== title ? `Hypothesis: ${raw.hypothesis}` : ''),
userValue && `User value: ${userValue}`,
evidenceNeeded && `Evidence needed: ${evidenceNeeded}`,
risk && `Risk: ${risk}`,
@@ -817,6 +817,12 @@ function optionsFromBody(body = {}) {
{ items: featureSet.nextMoves, sourceSection: 'feature-set.nextMoves' },
{ items: body.candidates, sourceSection: 'candidates' },
{ items: featureSet.candidates, sourceSection: 'feature-set.candidates' },
{ items: body.experiments, sourceSection: 'experiments', defaultLane: 'validate-next' },
{ items: body.validationTests, sourceSection: 'experiments', defaultLane: 'validate-next' },
{ items: body.proofTests, sourceSection: 'experiments', defaultLane: 'validate-next' },
{ items: featureSet.experiments, sourceSection: 'feature-set.experiments', defaultLane: 'validate-next' },
{ items: featureSet.validationTests, sourceSection: 'feature-set.experiments', defaultLane: 'validate-next' },
{ items: featureSet.proofTests, sourceSection: 'feature-set.experiments', defaultLane: 'validate-next' },
]);
const conceptMapCandidateGroup = compactCandidateGroup([
{ items: conceptMap.nextActions, sourceSection: 'concept-map.nextActions' },
@@ -824,6 +830,9 @@ function optionsFromBody(body = {}) {
{ items: conceptMap.features, sourceSection: 'concept-map.features' },
{ items: conceptMap.candidates, sourceSection: 'concept-map.candidates' },
{ items: conceptMap.validateNext || conceptMap.validate || conceptMap.validation, sourceSection: 'concept-map.validateNext', defaultLane: 'validate-next' },
{ items: conceptMap.experiments, sourceSection: 'concept-map.experiments', defaultLane: 'validate-next' },
{ items: conceptMap.validationTests, sourceSection: 'concept-map.experiments', defaultLane: 'validate-next' },
{ items: conceptMap.proofTests, sourceSection: 'concept-map.experiments', defaultLane: 'validate-next' },
{ items: conceptMap.deferred || conceptMap.defer || conceptMap.later, sourceSection: 'concept-map.deferred', defaultLane: 'defer' },
{ items: conceptMap.parkingLot || conceptMap.park || conceptMap.parked, sourceSection: 'concept-map.parkingLot', defaultLane: 'park' },
]);