)}
diff --git a/components/scenario-form.jsx b/components/scenario-form.jsx
index 6cbc898..744eef5 100644
--- a/components/scenario-form.jsx
+++ b/components/scenario-form.jsx
@@ -237,8 +237,8 @@ export function derivePrimarySurface(result, status, showExperimentView, scenari
const valid = hasValidInvestigationContext(result, status, scenario);
- // RTO.28A: show branch-selection surface when investigation exists but no branch is active
- if (showExperimentView && valid && !activeBranchId) return "BRANCH_SELECTION";
+ // RTO.28B: show question-selection surface when investigation exists but no question/branch is active
+ if (showExperimentView && valid && !activeBranchId) return "QUESTION_SELECTION";
if (showExperimentView && valid) return "EXPERIMENT_NOTEBOOK";
if (!showExperimentView && valid) return "NORMAL_WORKSPACE";
@@ -283,6 +283,15 @@ export default function ScenarioForm() {
// Use fixture branches as the authoritative source when available
const BRANCHES = useMemo(() => branchScoped.getBranches(), [branchScoped]);
+ // Track the originating question for provenance
+ const [originQuestion, setOriginQuestion] = useState(null);
+
+ // Extract inferred questions from the fixture (flat list for post-Analyse surface)
+ const inferredQuestions = useMemo(() => {
+ if (!branchScoped || typeof branchScoped.getAllInferredQuestions !== 'function') return [];
+ return branchScoped.getAllInferredQuestions();
+ }, [branchScoped]);
+
// Simulate a late semantic result arriving on Branch A ~2s after a graph loads
useEffect(() => {
if (status !== "success" && status !== "error") return;
@@ -538,7 +547,7 @@ export default function ScenarioForm() {
<>
{!activeBranchId ? (
- /* RTO.28A: no active branch — show branch-selection surface */
+ /* RTO.28B: inferred questions surface — user chooses what to investigate */