final code review

This commit is contained in:
trueheads
2025-12-11 09:59:48 -06:00
parent f460e689f1
commit 6352a1df19

View File

@@ -302,44 +302,29 @@ export function SpecView() {
setLogs(newLog); setLogs(newLog);
console.log("[SpecView] Tool:", event.tool, event.input); console.log("[SpecView] Tool:", event.tool, event.input);
} else if (event.type === "spec_regeneration_complete") { } else if (event.type === "spec_regeneration_complete") {
// Add completion message to logs first (before checking) // Add completion message to logs first
const completionLog = logsRef.current + `\n[Complete] ${event.message}\n`; const completionLog = logsRef.current + `\n[Complete] ${event.message}\n`;
logsRef.current = completionLog; logsRef.current = completionLog;
setLogs(completionLog); setLogs(completionLog);
// --- Completion Detection Logic --- // --- Completion Detection Logic ---
// Check 1: Message explicitly indicates all tasks are done // The backend sends explicit signals for completion:
// 1. "All tasks completed" in the message
// 2. [Phase: complete] marker in logs
const isFinalCompletionMessage = event.message?.includes("All tasks completed") || const isFinalCompletionMessage = event.message?.includes("All tasks completed") ||
event.message === "All tasks completed!" || event.message === "All tasks completed!" ||
event.message === "All tasks completed"; event.message === "All tasks completed";
// Check 2: We've seen a [Phase: complete] marker in the logs
const hasCompletePhase = logsRef.current.includes("[Phase: complete]"); const hasCompletePhase = logsRef.current.includes("[Phase: complete]");
// Check 3: Feature generation has finished (no recent activity and not actively generating) // Rely solely on explicit backend signals
const recentLogs = logsRef.current.slice(-2000); const shouldComplete = isFinalCompletionMessage || hasCompletePhase;
const hasRecentFeatureActivity = recentLogs.includes("Feature Creation") ||
recentLogs.includes("Creating feature") ||
recentLogs.includes("UpdateFeatureStatus");
const isStillGeneratingFeatures = !isFinalCompletionMessage &&
!hasCompletePhase &&
(event.message?.includes("Features are being generated") ||
event.message?.includes("features are being generated"));
const isFeatureGenerationComplete = currentPhase === "feature_generation" &&
!hasRecentFeatureActivity &&
!isStillGeneratingFeatures;
// Determine if we should mark everything as complete
const shouldComplete = isFinalCompletionMessage || hasCompletePhase || isFeatureGenerationComplete;
if (shouldComplete) { if (shouldComplete) {
// Fully complete - clear all states immediately // Fully complete - clear all states immediately
console.log("[SpecView] Final completion detected - clearing state", { console.log("[SpecView] Final completion detected - clearing state", {
isFinalCompletionMessage, isFinalCompletionMessage,
hasCompletePhase, hasCompletePhase,
isFeatureGenerationComplete,
hasRecentFeatureActivity,
currentPhase,
message: event.message message: event.message
}); });
setIsRegenerating(false); setIsRegenerating(false);
@@ -359,11 +344,7 @@ export function SpecView() {
setIsCreating(true); setIsCreating(true);
setIsRegenerating(true); setIsRegenerating(true);
setCurrentPhase("feature_generation"); setCurrentPhase("feature_generation");
console.log("[SpecView] Spec complete, continuing with feature generation", { console.log("[SpecView] Intermediate completion, continuing with feature generation");
isStillGeneratingFeatures,
hasRecentFeatureActivity,
currentPhase
});
} }
console.log("[SpecView] Spec generation event:", event.message); console.log("[SpecView] Spec generation event:", event.message);