Accept soft Scattermind action fields
This commit is contained in:
@@ -238,6 +238,48 @@ try {
|
||||
assert.equal(snakeDecisionContext.buildOrder.doFirst[0], 'copyable-slice');
|
||||
assert.equal(snakeDecisionContext.handoff.readiness.status, 'ready');
|
||||
|
||||
const softActionObjectResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
rankerBridge: {
|
||||
sourceName: 'Scattermind',
|
||||
artifactId: 'concept_map_soft_action_objects',
|
||||
snapshotTitle: 'Soft action object handoff',
|
||||
originalPrompt: 'Clarify a practical continuation without forcing software-feature field names.',
|
||||
context: 'Solo builder. Avoid account dashboards before manual proof.',
|
||||
nextActions: [
|
||||
{
|
||||
id: 'manual-proof-text-item',
|
||||
text: 'Run one manual paid-style teardown from the Concept Map',
|
||||
why_it_matters: 'This proves the continuation value before any app surface.',
|
||||
evidence_to_collect: 'Will one tired builder act from the teardown without another explanation?',
|
||||
first_proof_step: 'Send the teardown to one real builder and ask what they would do first.',
|
||||
green_flag: 'They can name the next move and why it wins.',
|
||||
red_flag: 'They ask for a dashboard instead of acting on the decision.',
|
||||
},
|
||||
{
|
||||
id: 'saved-account-dashboard',
|
||||
content: 'Saved account dashboard for every Concept Map',
|
||||
evidence_to_collect: 'Would users want this later?',
|
||||
ranker_hints: { value: 10, effort: 1, confidence: 9, urgency: 9, risk: 1 },
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
});
|
||||
assert.equal(softActionObjectResponse.status, 200);
|
||||
const softActionObject = await softActionObjectResponse.json();
|
||||
assert.equal(softActionObject.input.provenance.artifactId, 'concept_map_soft_action_objects');
|
||||
assert.equal(softActionObject.buildOrder.doFirst[0], 'manual-proof-text-item');
|
||||
assert.equal(softActionObject.ranked.find(item => item.id === 'manual-proof-text-item').title, 'Run one manual paid-style teardown from the Concept Map');
|
||||
assert.match(softActionObject.ranked.find(item => item.id === 'manual-proof-text-item').factors.evidenceNeeded, /tired builder/);
|
||||
assert.match(softActionObject.handoff.activeSlice.proof.nextStep, /Send the teardown/);
|
||||
assert.match(softActionObject.handoff.activeSlice.proof.successSignal, /next move/);
|
||||
assert.match(softActionObject.handoff.activeSlice.proof.killSignal, /dashboard/);
|
||||
assert.equal(softActionObject.ranked.find(item => item.id === 'saved-account-dashboard').lane.source, 'source-non-goal');
|
||||
assert.equal(softActionObject.handoff.readiness.status, 'ready');
|
||||
|
||||
const threadGuardrailResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
||||
Reference in New Issue
Block a user