Add rank feedback handoff contract
This commit is contained in:
@@ -571,6 +571,39 @@ function createDecisionBrief({ idea, context, mode, ranked, provenance }) {
|
||||
};
|
||||
}
|
||||
|
||||
function createHandoffContract({ ranked, provenance }) {
|
||||
const warnings = [];
|
||||
if (!provenance?.artifactId) warnings.push('missing source artifact id');
|
||||
if (!provenance?.originalPrompt) warnings.push('missing original prompt provenance');
|
||||
|
||||
const itemTrace = ranked.map(item => {
|
||||
if (!item.provenance?.sourceSection) warnings.push(`missing source section for ${item.id}`);
|
||||
if (!item.factors?.evidenceNeeded && ['do', 'test'].includes(item.lane?.id)) warnings.push(`missing evidence needed for active item ${item.id}`);
|
||||
return {
|
||||
id: item.id,
|
||||
title: item.title,
|
||||
lane: item.lane?.id || 'defer',
|
||||
sourceSection: item.provenance?.sourceSection || '',
|
||||
sourceId: item.provenance?.sourceId || '',
|
||||
evidenceNeeded: item.factors?.evidenceNeeded || '',
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
schema: 'rank-feedback-result-v1',
|
||||
source: {
|
||||
schema: provenance?.schema || '',
|
||||
source: provenance?.source || '',
|
||||
artifactId: provenance?.artifactId || '',
|
||||
snapshotTitle: provenance?.snapshotTitle || '',
|
||||
conceptMapId: provenance?.conceptMapId || '',
|
||||
hasOriginalPrompt: Boolean(provenance?.originalPrompt),
|
||||
},
|
||||
itemTrace,
|
||||
warnings: [...new Set(warnings)],
|
||||
};
|
||||
}
|
||||
|
||||
app.post('/api/rank-feedback', (req, res) => {
|
||||
const idea = cleanMultiline(req.body?.idea || '', 3000);
|
||||
const context = cleanMultiline(req.body?.context || '', 3000);
|
||||
@@ -591,12 +624,15 @@ app.post('/api/rank-feedback', (req, res) => {
|
||||
concern: concernFor(rankedOption),
|
||||
};
|
||||
});
|
||||
const brief = createDecisionBrief({ idea, context, mode, ranked: options, provenance });
|
||||
const handoff = createHandoffContract({ ranked: options, provenance });
|
||||
res.json({
|
||||
ok: true,
|
||||
mode: { id: modeId in judgementModes ? modeId : 'progress', label: mode.label },
|
||||
input: { idea, context, optionCount: options.length, provenance },
|
||||
ranked: options,
|
||||
brief: createDecisionBrief({ idea, context, mode, ranked: options, provenance }),
|
||||
brief,
|
||||
handoff,
|
||||
buildOrder: {
|
||||
doFirst: options.filter(item => item.lane.id === 'do').map(item => item.id),
|
||||
validateNext: options.filter(item => item.lane.id === 'test').map(item => item.id),
|
||||
|
||||
Reference in New Issue
Block a user