diff --git a/public/app.js b/public/app.js
index dbceb23..48b427a 100644
--- a/public/app.js
+++ b/public/app.js
@@ -61,8 +61,13 @@ function parsePastedJsonPayload(value) {
try {
const parsed = JSON.parse(jsonText);
const looksLikeBridgePayload = parsed && typeof parsed === 'object' && !Array.isArray(parsed) && (
- parsed.schema || parsed.featureSet || parsed.snapshot || parsed.conceptMap || parsed.buildOrder || parsed.lenses || parsed.reference_code || parsed.referenceCode || parsed.artifactId || parsed.ideaText
- || Array.isArray(parsed.nextActions) || Array.isArray(parsed.nextMoves) || Array.isArray(parsed.validateNext) || Array.isArray(parsed.deferred) || Array.isArray(parsed.parkingLot)
+ parsed.schema || parsed.featureSet || parsed.feature_set || parsed.snapshot || parsed.conceptMap || parsed.concept_map || parsed.buildOrder || parsed.build_order || parsed.lenses
+ || parsed.payload || parsed.rankPayload || parsed.scattermindPayload || parsed.conceptMapJson
+ || parsed.reference_code || parsed.referenceCode || parsed.artifactId || parsed.sourceArtifactId || parsed.source_artifact_id
+ || parsed.ideaText || parsed.idea_text || parsed.originalPrompt || parsed.original_prompt || parsed.sourceSummary || parsed.source_summary || parsed.opening_reflection || parsed.restated_idea
+ || Array.isArray(parsed.features) || Array.isArray(parsed.actions) || Array.isArray(parsed.candidates)
+ || Array.isArray(parsed.nextActions) || Array.isArray(parsed.next_actions) || Array.isArray(parsed.nextMoves) || Array.isArray(parsed.next_moves)
+ || Array.isArray(parsed.validateNext) || Array.isArray(parsed.validate_next) || Array.isArray(parsed.deferred) || Array.isArray(parsed.parkingLot) || Array.isArray(parsed.parking_lot)
);
return looksLikeBridgePayload ? parsed : null;
} catch {
@@ -105,7 +110,8 @@ function payloadFromForm(formPayload) {
const optionsJson = parsePastedJsonPayload(formPayload.optionsText);
const embedded = ideaJson || optionsJson;
if (!embedded) return formPayload;
- const merged = { ...embedded };
+ const unwrapped = embedded.payload || embedded.rankPayload || embedded.scattermindPayload || embedded.conceptMapJson || embedded;
+ const merged = { ...unwrapped };
if (!merged.mode && formPayload.mode) merged.mode = formPayload.mode;
if (String(formPayload.context || '').trim() && !merged.context) merged.context = formPayload.context;
return merged;
@@ -142,6 +148,26 @@ function renderSourceTrace(sourceTrace = {}) {
`;
}
+function renderItemSourceTrace(item = {}) {
+ const provenance = item.provenance || {};
+ const trace = {
+ sourceSection: provenance.sourceSection || '',
+ sourceId: provenance.sourceId || '',
+ sourceTitle: provenance.sourceTitle || '',
+ sourceQuote: provenance.sourceQuote || '',
+ };
+ const hasTrace = trace.sourceSection || trace.sourceId || trace.sourceQuote;
+ if (!hasTrace) return '';
+ const label = [trace.sourceTitle, trace.sourceId || trace.sourceSection].filter(Boolean).join(' · ');
+ return `
+ ${escapeHtml(trace.sourceQuote)}Source trace${label ? ` · ${escapeHtml(label)}` : ''}
+ ${trace.sourceQuote ? `
${escapeHtml(item.evidenceQuestion || 'What proof would change this ranking?')}
${escapeHtml(item.successSignal || '')} ${escapeHtml(item.killSignal ? `Kill if: ${item.killSignal}` : '')}