Harden pasted Scattermind thread handoffs
This commit is contained in:
@@ -73,6 +73,8 @@ function parsePastedJsonPayload(value) {
|
||||
|| Array.isArray(parsed.validateNext) || Array.isArray(parsed.validate_next) || Array.isArray(parsed.evidenceNext) || Array.isArray(parsed.evidence_next) || Array.isArray(parsed.tryNext) || Array.isArray(parsed.try_next)
|
||||
|| Array.isArray(parsed.deferred) || Array.isArray(parsed.holdForLater) || Array.isArray(parsed.hold_for_later)
|
||||
|| Array.isArray(parsed.parkingLot) || Array.isArray(parsed.parking_lot) || Array.isArray(parsed.setAside) || Array.isArray(parsed.set_aside)
|
||||
|| Array.isArray(parsed.threads_to_hold) || Array.isArray(parsed.threadsToHold) || Array.isArray(parsed.actionThreads) || Array.isArray(parsed.action_threads)
|
||||
|| Array.isArray(parsed.questions_to_sit_with) || Array.isArray(parsed.questionsToSitWith) || Array.isArray(parsed.openQuestions) || Array.isArray(parsed.open_questions)
|
||||
);
|
||||
return looksLikeBridgePayload ? parsed : null;
|
||||
} catch {
|
||||
|
||||
@@ -1254,6 +1254,33 @@ try {
|
||||
assert.equal(threadsFallback.handoff.readiness.status, 'ready');
|
||||
assert.deepEqual(threadsFallback.handoff.warnings, []);
|
||||
|
||||
const pastedThreadOnlyResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
idea: `Scattermind export:\n\n\`\`\`json\n${JSON.stringify({
|
||||
sourceSummary: 'A source-summary-only Concept Map paste with action threads and no explicit reference code.',
|
||||
actionThreads: [
|
||||
'Start with a manual source-summary proof for one tired user.',
|
||||
'Validate whether the copied handoff tells the user what to do next.',
|
||||
'Hold for later: polished export styling after comprehension proof.',
|
||||
'Set aside: account dashboard with saved workspaces before proof.',
|
||||
],
|
||||
})}\n\`\`\``,
|
||||
context: 'Avoid account dashboards and saved workspaces before manual proof.',
|
||||
mode: 'mvp',
|
||||
}),
|
||||
});
|
||||
assert.equal(pastedThreadOnlyResponse.status, 200);
|
||||
const pastedThreadOnly = await pastedThreadOnlyResponse.json();
|
||||
assert.equal(pastedThreadOnly.input.embeddedPayloadSource, 'idea');
|
||||
assert.match(pastedThreadOnly.input.provenance.sourceSummary, /source-summary-only Concept Map/);
|
||||
assert.equal(pastedThreadOnly.input.optionCount, 4);
|
||||
assert.equal(pastedThreadOnly.ranked[0].id, 'action-thread-1');
|
||||
assert.equal(pastedThreadOnly.ranked.find(item => item.id === 'action-thread-4').lane.id, 'park');
|
||||
assert.equal(pastedThreadOnly.handoff.readiness.status, 'ready');
|
||||
assert.deepEqual(pastedThreadOnly.handoff.warnings, []);
|
||||
|
||||
const questionsFallbackResponse = await fetch(`${base}/api/rank-feedback`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
|
||||
@@ -539,6 +539,7 @@ function looksLikeRankPayload(value = {}) {
|
||||
|| value.ranker_handoff
|
||||
|| value.rankReady
|
||||
|| value.rank_ready
|
||||
|| value.bridge
|
||||
|| value.bridgePayload
|
||||
|| value.bridge_payload
|
||||
|| value.snapshot
|
||||
@@ -556,6 +557,10 @@ function looksLikeRankPayload(value = {}) {
|
||||
|| value.snapshot_title
|
||||
|| value.originalPrompt
|
||||
|| value.original_prompt
|
||||
|| value.sourceSummary
|
||||
|| value.source_summary
|
||||
|| value.opening_reflection
|
||||
|| value.restated_idea
|
||||
|| value.ideaText
|
||||
|| value.idea_text
|
||||
|| Array.isArray(value.features)
|
||||
@@ -588,6 +593,14 @@ function looksLikeRankPayload(value = {}) {
|
||||
|| Array.isArray(value.parking_lot)
|
||||
|| Array.isArray(value.setAside)
|
||||
|| Array.isArray(value.set_aside)
|
||||
|| Array.isArray(value.threads_to_hold)
|
||||
|| Array.isArray(value.threadsToHold)
|
||||
|| Array.isArray(value.actionThreads)
|
||||
|| Array.isArray(value.action_threads)
|
||||
|| Array.isArray(value.questions_to_sit_with)
|
||||
|| Array.isArray(value.questionsToSitWith)
|
||||
|| Array.isArray(value.openQuestions)
|
||||
|| Array.isArray(value.open_questions)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user