When running bild, status lines show on multiple lines instead of being overwritten in place:
ϟ bild Omni/Test.hs
[…] Omni/Test.hs
[✓] Omni/Test.hs
The expected output should only show the final [✓] Omni/Test.hs with the […] status being overwritten.
The issue is in the interaction between two separate withLineManager calls in the build pipeline:
1. analyzeAll (Omni/Bild.hs:564) creates a LineManager and:
initializeLines showing [+] statusupdateLineState namespace Pending (line 832) showing […]withLineManager which prints a final newline (Concurrent.hs:62)2. build (Omni/Bild.hs:1167) creates a NEW LineManager and:
initializeLines again[✓] or [x]In SingleLine mode (Omni/Log/Concurrent.hs:57-65), the problem is:
IO.hPutStrLn IO.stderr "" adds a final newline when exiting the first managerFor transient states like Pending, the code (line 180) deliberately does NOT print a newline, expecting subsequent output to overwrite. But the manager's cleanup newline breaks this assumption.
1. Merge managers: Have analyzeAll and build share a single LineManager context instead of creating separate ones
2. Remove cleanup newline in SingleLine: Change line 62 to not print a newline when in SingleLine mode (but this might leave cursor in wrong position)
3. Track pending state: Have the manager track if last output was transient, and not add cleanup newline in that case
4. Restructure flow: Combine analyze and build into a single withLineManager block in the move function
No activity yet.