Carry Concept Map questions with build order

This commit is contained in:
OpenClaw Bot
2026-05-28 00:33:33 +02:00
parent 6a2cc34759
commit 066717221c
2 changed files with 56 additions and 15 deletions
+43 -3
View File
@@ -936,6 +936,43 @@ try {
assert.equal(experimentSection.ranked.find(item => item.id === 'accounted-test-library').lane.id, 'park');
assert.deepEqual(experimentSection.handoff.warnings, []);
const buildOrderQuestionsResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
sourceName: 'Scattermind',
artifactId: 'concept_map_build_order_questions',
snapshotTitle: 'Build Order with decision questions',
originalPrompt: 'Clarify a continuation engine and name what to build first.',
idea: 'A full Scattermind Concept Map emitted a Build Order lens plus questions to sit with.',
mode: 'mvp',
conceptMap: {
lenses: {
channel: {
title: 'Build Order',
content: 'Build first: Manual bridge handoff preview — turn one Concept Map into a defended first move. Test manually: Show the copied handoff to 3 tired builders and ask what they would do next. Defer: Saved workspaces until the copyable handoff proves useful. Probably noise: Team dashboard and billing layer.',
},
question: {
title: 'Proof Steps',
content: 'Ask 3 tired builders to read the handoff and tell you the first move without extra explanation.',
},
},
questions_to_sit_with: [
'Can the user explain why the first move wins after reading only the handoff?',
'What evidence would make the saved workspace worth reopening later?',
],
},
}),
});
assert.equal(buildOrderQuestionsResponse.status, 200);
const buildOrderQuestions = await buildOrderQuestionsResponse.json();
assert.equal(buildOrderQuestions.input.optionCount, 7, 'Build Order lens should carry Proof Steps and questions into the candidate set');
assert.equal(buildOrderQuestions.ranked[0].provenance.sourceSection, 'concept-map.lenses.channel');
assert.ok(buildOrderQuestions.ranked.some(item => item.provenance.sourceSection === 'concept-map.questionsToSitWith'));
assert.equal(buildOrderQuestions.ranked.find(item => /Can the user explain why the first move wins/i.test(item.title)).lane.id, 'test');
assert.ok(buildOrderQuestions.buildOrder.validateNext.some(id => buildOrderQuestions.ranked.find(item => item.id === id)?.provenance.sourceSection === 'concept-map.questionsToSitWith'));
assert.match(buildOrderQuestions.handoff.copyableText, /Can the user explain why the first move wins/);
const emptyWrapperResponse = await fetch(`${base}/api/rank-feedback`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -1265,10 +1302,11 @@ try {
assert.equal(privateReadingEnvelope.input.provenance.artifactId, 'SM-PRIVATE1');
assert.equal(privateReadingEnvelope.input.provenance.snapshotTitle, 'Local Workshop Starter');
assert.match(privateReadingEnvelope.input.provenance.originalPrompt, /Scattermind clarified/);
assert.equal(privateReadingEnvelope.input.optionCount, 6);
assert.equal(privateReadingEnvelope.input.optionCount, 7);
assert.equal(privateReadingEnvelope.ranked[0].id, 'build-order-1');
assert.equal(privateReadingEnvelope.ranked[0].provenance.sourceSection, 'concept-map.lenses.channel');
assert.equal(privateReadingEnvelope.ranked.find(item => item.id === 'proof-step-1').lane.id, 'test');
assert.ok(privateReadingEnvelope.ranked.some(item => item.provenance.sourceSection === 'concept-map.questionsToSitWith'));
assert.equal(privateReadingEnvelope.ranked.find(item => item.id === 'build-order-4').lane.id, 'park');
assert.ok(privateReadingEnvelope.input.decisionContext.nonGoals.includes('Avoid accounts, saved calendars, and payment dashboards until one workshop has real interest'));
assert.deepEqual(privateReadingEnvelope.handoff.warnings, []);
@@ -2065,12 +2103,13 @@ try {
assert.equal(storedScattermindRow.input.provenance.artifactId, 'SM-STORED-1');
assert.equal(storedScattermindRow.input.provenance.snapshotTitle, 'Stored Row Bridge');
assert.match(storedScattermindRow.input.provenance.originalPrompt, /actual stored row ranked/);
assert.equal(storedScattermindRow.input.optionCount, 4);
assert.equal(storedScattermindRow.input.optionCount, 5);
assert.equal(storedScattermindRow.ranked[0].id, 'build-order-1');
assert.equal(storedScattermindRow.ranked[0].provenance.sourceTitle, 'Build Order');
assert.match(storedScattermindRow.ranked[0].provenance.sourceQuote, /Stored-row build-order preview/);
assert.ok(storedScattermindRow.input.decisionContext.nonGoals.includes('Avoid account dashboards and saved workspaces before one user acts'));
assert.equal(storedScattermindRow.ranked.find(item => item.id === 'build-order-4').lane.id, 'park');
assert.ok(storedScattermindRow.ranked.some(item => item.provenance.sourceSection === 'concept-map.questionsToSitWith'));
assert.equal(storedScattermindRow.handoff.readiness.status, 'ready');
assert.deepEqual(storedScattermindRow.handoff.warnings, []);
@@ -2101,7 +2140,7 @@ try {
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.input.optionCount, 5);
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');
@@ -2109,6 +2148,7 @@ try {
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.ok(numberedMarkdownBuildOrder.ranked.some(item => item.provenance.sourceSection === 'concept-map.questionsToSitWith'));
assert.equal(numberedMarkdownBuildOrder.handoff.readiness.status, 'ready');
assert.deepEqual(numberedMarkdownBuildOrder.handoff.warnings, []);