Handle numbered Scattermind build order labels

This commit is contained in:
OpenClaw Bot
2026-05-27 20:57:35 +02:00
parent 2fa061120c
commit 74b6ad2d85
2 changed files with 47 additions and 1 deletions
+38
View File
@@ -1934,6 +1934,44 @@ try {
assert.equal(storedScattermindRow.handoff.readiness.status, 'ready');
assert.deepEqual(storedScattermindRow.handoff.warnings, []);
const numberedMarkdownBuildOrderResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
referenceCode: 'SM-NUMBERED-BUILD-ORDER-1',
ideaText: 'Scattermind generated a paid Concept Map with numbered Markdown labels in the Build Order lens.',
context: 'Solo builder. Avoid account dashboards before the first proof.',
mode: 'mvp',
fullReadingJson: JSON.stringify({
working_name: 'Numbered Build Order',
opening_reflection: 'The Concept Map has a clear continuation order, but the labels are formatted for humans, not strict JSON.',
lenses: {
risk: { title: 'What Can Mislead You', content: 'Avoid account dashboards before the first proof works.' },
channel: {
title: 'Build Order',
content: '1. **Build first:** Numbered source-traced preview — turn this Concept Map into one defended first move.\n2. **Test manually:** Ask one tired user whether the copied handoff tells them what to do next.\n3. **Defer:** Visual polish until the proof says the handoff is understandable.\n4. **Probably noise:** Account dashboard with saved workspaces before proof.',
},
},
questions_to_sit_with: ['Can a tired user act from the first numbered move?'],
closing_note: 'Use the numbered source-traced preview as the first 48-hour move.',
reference_code: 'SM-NUMBERED-BUILD-ORDER-1',
}),
}),
});
assert.equal(numberedMarkdownBuildOrderResponse.status, 200);
const numberedMarkdownBuildOrder = await numberedMarkdownBuildOrderResponse.json();
assert.equal(numberedMarkdownBuildOrder.input.provenance.artifactId, 'SM-NUMBERED-BUILD-ORDER-1');
assert.equal(numberedMarkdownBuildOrder.input.optionCount, 4);
assert.equal(numberedMarkdownBuildOrder.ranked[0].id, 'build-order-1');
assert.equal(numberedMarkdownBuildOrder.ranked[0].title, 'Numbered source-traced preview');
assert.equal(numberedMarkdownBuildOrder.ranked[0].lane.id, 'do');
assert.match(numberedMarkdownBuildOrder.ranked[0].provenance.sourceQuote, /Build first.*Numbered source-traced preview/);
assert.equal(numberedMarkdownBuildOrder.ranked.find(item => item.id === 'build-order-2').lane.id, 'test');
assert.equal(numberedMarkdownBuildOrder.ranked.find(item => item.id === 'build-order-3').lane.id, 'defer');
assert.equal(numberedMarkdownBuildOrder.ranked.find(item => item.id === 'build-order-4').lane.id, 'park');
assert.equal(numberedMarkdownBuildOrder.handoff.readiness.status, 'ready');
assert.deepEqual(numberedMarkdownBuildOrder.handoff.warnings, []);
const candidateActionsAliasResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },