--- /home/shire3d/ARMOR/agents/apps/limbforge/src/pages/Workshop3D.jsx 2026-07-23 14:44:00.000000000 +0800 +++ /tmp/limbforge-session-repair.oYLa7q/Workshop3D.jsx 2026-08-05 09:56:11.978698933 +0800 @@ -79,6 +79,22 @@ const [movementPositions, setMovementPositions] = useState([]); const [missingInfo, setMissingInfo] = useState([]); const [session, setSession] = useState(null); + + // A project-only workflow may legitimately have no physical Component yet. + // Bind the sole open session so guided 3D measurements can still be saved. + useEffect(() => { + if (session || sessions.length !== 1) return; + + const candidate = sessions[0]; + + if (candidate && candidate.status !== 'Complete') { + console.info( + '[SHiRE] Bound sole open measurement session to 3D workspace', + candidate.uuid, + ); + setSession(candidate); + } + }, [sessions, session]); const [highlightedStation, setHighlightedStation] = useState(-1); const [selectedAngle, setSelectedAngle] = useState(null);