Accept laned Scattermind build order objects
This commit is contained in:
@@ -506,6 +506,51 @@ try {
|
||||
assert.equal(mergedContext.ranked.find(item => item.id === 'workspace-dashboard').lane.source, 'source-non-goal');
|
||||
assert.deepEqual(mergedContext.handoff.warnings, []);
|
||||
|
||||
const objectBuildOrderResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
sourceName: 'Scattermind',
|
||||
artifactId: 'concept_map_object_build_order',
|
||||
originalPrompt: 'Scattermind exported a Build Order object instead of nextActions arrays.',
|
||||
idea: 'Ranker should accept an already-laned Build Order object and preserve lane provenance.',
|
||||
mode: 'mvp',
|
||||
conceptMap: {
|
||||
snapshotTitle: 'Object Build Order bridge',
|
||||
context: {
|
||||
targetAudience: 'Tired local service seller',
|
||||
constraints: ['Copyable output before accounts'],
|
||||
nonGoals: ['Avoid saved workspace dashboard'],
|
||||
},
|
||||
buildOrder: {
|
||||
doFirst: [
|
||||
{ id: 'manual-offer-proof', move: 'Manual offer proof', why: 'Send one copyable offer to three real prospects.', questionToAnswer: 'Will one prospect ask for the next step?' },
|
||||
],
|
||||
validateNext: [
|
||||
'Copyable follow-up script',
|
||||
],
|
||||
deferred: [
|
||||
{ id: 'visual-refresh', title: 'Visual refresh after proof', evidenceQuestion: 'Does the rough brief work first?' },
|
||||
],
|
||||
parkingLot: [
|
||||
{ id: 'workspace-dashboard', title: 'Saved workspace dashboard', description: 'Accounts, auth, and saved projects for every offer.', evidenceNeeded: 'No proof yet' },
|
||||
],
|
||||
},
|
||||
},
|
||||
}),
|
||||
});
|
||||
assert.equal(objectBuildOrderResponse.status, 200);
|
||||
const objectBuildOrder = await objectBuildOrderResponse.json();
|
||||
assert.equal(objectBuildOrder.input.optionCount, 4);
|
||||
assert.equal(objectBuildOrder.ranked[0].id, 'manual-offer-proof');
|
||||
assert.equal(objectBuildOrder.ranked[0].factors.evidenceNeeded, 'Will one prospect ask for the next step?');
|
||||
assert.equal(objectBuildOrder.ranked.find(item => item.id === 'feature-1').title, 'Copyable follow-up script');
|
||||
assert.equal(objectBuildOrder.ranked.find(item => item.id === 'feature-1').lane.id, 'test');
|
||||
assert.equal(objectBuildOrder.handoff.itemTrace.find(item => item.id === 'feature-1').sourceSection, 'concept-map.buildOrder.validateNext');
|
||||
assert.equal(objectBuildOrder.ranked.find(item => item.id === 'workspace-dashboard').lane.id, 'park');
|
||||
assert.equal(objectBuildOrder.ranked.find(item => item.id === 'workspace-dashboard').lane.source, 'hint');
|
||||
assert.ok(objectBuildOrder.handoff.warnings.includes('missing evidence needed for active item feature-1'));
|
||||
|
||||
const embeddedJsonResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
||||
Reference in New Issue
Block a user