Accept soft Scattermind bridge lane labels

This commit is contained in:
OpenClaw Bot
2026-05-27 01:32:17 +02:00
parent bf29b7ab95
commit b5e791ae33
3 changed files with 78 additions and 16 deletions
+54
View File
@@ -618,6 +618,60 @@ try {
assert.ok(scattermindPaidShape.ranked.find(item => item.id === 'build-order-4').metrics.nonGoalConflicts.length >= 1);
assert.deepEqual(scattermindPaidShape.handoff.warnings, []);
const softLabelLensResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
reference_code: 'SM-SOFT-LABELS',
working_name: 'Gentle Scattermind continuation labels',
ideaText: 'Scattermind avoids verdict language but still needs to hand Ranker a continuation order.',
context: 'Solo builder. Manual proof before machinery. Avoid accounts and saved workspaces.',
mode: 'mvp',
lenses: {
risk: 'Avoid accounts and saved workspaces until one copyable result makes sense.',
channel: 'Continue first: One source-traced build order preview - make the next move tangible without a dashboard. Try next: Copyable decision brief - ask three tired users what they would do next. Hold for later: Visual polish after the rough brief works. Set aside: Saved workspace with accounts, auth, billing, and collaboration.',
},
}),
});
assert.equal(softLabelLensResponse.status, 200);
const softLabelLens = await softLabelLensResponse.json();
assert.equal(softLabelLens.input.optionCount, 4);
assert.equal(softLabelLens.ranked[0].id, 'build-order-1');
assert.equal(softLabelLens.ranked[0].lane.id, 'do');
assert.match(softLabelLens.ranked[0].provenance.sourceQuote, /Continue first: One source-traced build order preview/);
assert.equal(softLabelLens.ranked.find(item => item.id === 'build-order-2').lane.id, 'test');
assert.equal(softLabelLens.ranked.find(item => item.id === 'build-order-3').lane.id, 'defer');
assert.equal(softLabelLens.ranked.find(item => item.id === 'build-order-4').lane.id, 'park');
assert.equal(softLabelLens.handoff.readiness.status, 'ready');
assert.deepEqual(softLabelLens.handoff.warnings, []);
const softLabelObjectResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sourceName: 'Scattermind',
artifactId: 'concept_map_soft_object_labels',
originalPrompt: 'Scattermind exported soft continuation sections instead of verdict-named lanes.',
idea: 'Ranker should accept softer object keys without forcing Scattermind to say build/kill.',
mode: 'mvp',
conceptMap: {
buildOrder: {
continueFirst: [{ id: 'manual-preview', move: 'Manual continuation preview', evidenceQuestion: 'Can one user explain the next move?' }],
evidenceNext: ['Copyable brief comprehension check'],
holdForLater: ['Visual system polish'],
setAside: ['Account workspace dashboard'],
},
},
}),
});
assert.equal(softLabelObjectResponse.status, 200);
const softLabelObject = await softLabelObjectResponse.json();
assert.equal(softLabelObject.input.optionCount, 4);
assert.equal(softLabelObject.buildOrder.doFirst[0], 'manual-preview');
assert.equal(softLabelObject.ranked.find(item => item.id === 'feature-1').lane.id, 'test');
assert.equal(softLabelObject.ranked.find(item => item.title === 'Visual system polish').lane.id, 'defer');
assert.equal(softLabelObject.ranked.find(item => item.title === 'Account workspace dashboard').lane.id, 'park');
const mergedContextResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },