From 34dbe1dd88bae19b27691e4346421133dea57556 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Wed, 26 Nov 2025 20:53:24 -0500 Subject: =?UTF-8?q?Bild:=20pipelined=20analyze=E2=86=92build=20architectur?= =?UTF-8?q?e=20with=20multi-line=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement STM-based pipeline that allows per-target progression through build phases (analyze → wait for deps → build) with concurrent workers. Key changes: - TargetState enum tracks each target through pipeline stages - Coordinator manages state, analyze queue, build queue coordination - pipelineAnalysisWorker/pipelineBuildWorker pull from queues concurrently - promoteWaiters unblocks targets when their dependencies complete UI improvements: - Multi-line mode reserves N lines for N targets, updates in-place - Remove narrow terminal (<80 col) restriction for multi-line mode - Add Skipped state with yellow [_] for non-buildable files - Remove extra blank line at start of output State symbols: [.] Pending, [+] Analyzing, [~] Building, [✓] Success (green), [x] Failed (red), [_] Skipped (yellow) --- Omni/Log/Terminal.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'Omni/Log/Terminal.hs') diff --git a/Omni/Log/Terminal.hs b/Omni/Log/Terminal.hs index 6832d17..1a4c717 100644 --- a/Omni/Log/Terminal.hs +++ b/Omni/Log/Terminal.hs @@ -54,10 +54,9 @@ detectTerminal = do Just (h, w) -> (w, h) Nothing -> (80, 24) -- sensible default - -- Determine mode based on terminal width + -- Determine mode based on ANSI support let mode | not supportsANSI = SingleLine -- Fallback to single line for dumb terminals - | width < 80 = SingleLine | otherwise = MultiLine pure -- cgit v1.2.3