From 39315631cd8b6f6e10df71edac07105c734dbff1 Mon Sep 17 00:00:00 2001
From: Spbd1 <148923621+Spbd1@users.noreply.github.com>
Date: Tue, 12 May 2026 07:21:16 +0000
Subject: [PATCH] Fix individual results metric field coverage
---
components/ResultsTable.tsx | 42 +++++++++++++++++++++++++++++++------
1 file changed, 36 insertions(+), 6 deletions(-)
diff --git a/components/ResultsTable.tsx b/components/ResultsTable.tsx
index c152be7..5e1f2cb 100644
--- a/components/ResultsTable.tsx
+++ b/components/ResultsTable.tsx
@@ -152,6 +152,11 @@ function IndividualResults({
preRevealSurvey,
postRevealSurvey,
preRevealSurveyOriginal: session.preRevealSurveyOriginal,
+ preRevealSurveyRevisedAfterReveal: session.preRevealSurveyRevisedAfterReveal,
+ revisionAccess: session.revisionAccess,
+ preRevealRevision: session.preRevealRevision,
+ revealTimingCondition: session.revealTimingCondition,
+ preRevealCommitment: session.preRevealCommitment,
explanationFrameCondition: session.explanationFrameCondition,
costVisibilityCondition: session.costVisibilityCondition,
replayGame: session.replayGame,
@@ -175,7 +180,7 @@ function IndividualResults({
-
+
@@ -255,7 +260,7 @@ function JudgmentChangeTable({ preRevealSurvey, postRevealSurvey }: { preRevealS
);
}
-function MetricsGrid({ metrics }: { metrics: ComputedResearchMetrics }) {
+function MetricsGrid({ metrics, session }: { metrics: ComputedResearchMetrics; session: ResearchSession }) {
const rows = [
["Responsibility Shift", metrics.responsibilityShift],
["Constraint Recognition Shift", metrics.constraintRecognitionShift],
@@ -269,16 +274,33 @@ function MetricsGrid({ metrics }: { metrics: ComputedResearchMetrics }) {
["Care avoidance index", metrics.careAvoidance],
["Health-adjusted income loss", metrics.healthAdjustedIncomeLoss ?? 0],
["Attribution category shift", `${metrics.attributionCategoryShift.pre} → ${metrics.attributionCategoryShift.post}`],
+ ["Reveal timing condition", session.revealTimingCondition?.condition ?? "Not assigned"],
+ ["Delayed reveal", session.revealTimingCondition ? yesNo(metrics.delayedReveal) : "Not assigned"],
+ ["Stand-by initial interpretation", metrics.standByInitialInterpretation ?? "Not attempted"],
+ ["Revision access", session.revisionAccess?.condition ?? "Not assigned"],
+ ["Revision unlocked", formatOptionalBoolean(metrics.revisionUnlocked, "Not assigned")],
+ ["Pre-reveal revision attempted", session.preRevealRevision ? yesNo(Boolean(metrics.attemptedPreRevealRevision)) : "Not attempted"],
+ ["Used revision opportunity", session.preRevealRevision ? yesNo(Boolean(metrics.usedRevisionOpportunity)) : "Not attempted"],
+ ["Responsibility revision delta", metrics.responsibilityRevisionDelta ?? "Not attempted"],
+ ["Constraint suspicion revision delta", metrics.constraintSuspicionRevisionDelta ?? "Not attempted"],
+ ["Protest legitimacy revision delta", metrics.protestLegitimacyRevisionDelta ?? "Not attempted"],
+ ["Rule correction revision delta", metrics.ruleCorrectionRevisionDelta ?? "Not attempted"],
+ ["Redistribution revision delta", metrics.redistributionRevisionDelta ?? "Not attempted"],
+ ["Confidence revision delta", metrics.confidenceRevisionDelta ?? "Not attempted"],
+ ["Information sufficiency revision delta", metrics.informationSufficiencyRevisionDelta ?? "Not attempted"],
+ ["Changed primary attribution during revision", typeof metrics.changedPrimaryAttribution === "boolean" ? yesNo(metrics.changedPrimaryAttribution) : "Not attempted"],
+ ["Revision magnitude", metrics.revisionMagnitude ?? "Not attempted"],
["Remembered responsibility error", metrics.rememberedResponsibilityError],
["Remembered constraint suspicion error", metrics.rememberedConstraintSuspicionError],
["Remembered attribution matches original", metrics.rememberedPrimaryAttributionMatchesOriginal ? "Yes" : "No"],
["Memory confidence", metrics.memoryConfidence],
["Memory distortion magnitude", metrics.memoryDistortionMagnitude],
+ ["Explanation frame", metrics.explanationFrame ?? "Not assigned"],
["Cost visibility condition", metrics.costVisibilityCondition ?? "Not assigned"],
- ["Had any cost hint", metrics.hadAnyCostHint ? "Yes" : "No"],
- ["Had strong cost hint", metrics.hadStrongCostHint ? "Yes" : "No"],
- ["Replay available", metrics.replayAvailable ? "Yes" : "No"],
- ["Replay completed", metrics.replayCompleted ? "Yes" : "No"],
+ ["Had any cost hint", yesNo(metrics.hadAnyCostHint)],
+ ["Had strong cost hint", yesNo(metrics.hadStrongCostHint)],
+ ["Replay available", yesNo(metrics.replayAvailable)],
+ ["Replay completed", session.replayGame ? yesNo(metrics.replayCompleted) : "Not attempted"],
["Replay assignment", metrics.replayAssignmentCondition ?? "Not played"],
["Replay hidden profile", metrics.replayHiddenProfile ?? "Not played"],
["Replay full treatment choices", metrics.replayFullTreatmentChoices ?? "Not played"],
@@ -354,6 +376,14 @@ function rating(value: number, context?: string): string {
return context ? `${value} / 7 (${context})` : `${value} / 7`;
}
+function formatOptionalBoolean(value: boolean | null | undefined, fallback: string): string {
+ return typeof value === "boolean" ? yesNo(value) : fallback;
+}
+
+function yesNo(value: boolean): string {
+ return value ? "Yes" : "No";
+}
+
function formatMetric(value: number): string {
return Number.isInteger(value) ? value.toString() : value.toFixed(4).replace(/0+$/, "").replace(/\.$/, "");
}