| Age | Commit message (Collapse) | Author |
|
|
|
|
|
- Removed fetch origin - Rebasing directly on local live branch for
shared-repo setup
|
|
- Ensures linear history on worker branch
|
|
- Use 'git rebase' instead of 'git merge' to maintain linear history -
Aligns with git-branchless patch-based philosophy
|
|
|
|
|
|
|
|
- Omni/Task/DESIGN.md: Task manager improvements -
Biz/PodcastItLater/DESIGN.md: Architecture and features
- Biz/PodcastItLater/TESTING.md: Test strategy -
Network/Wai/Middleware/Braid/DESIGN.md: Keep-alive design
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Use 'empty' in jq to properly filter ignored log lines
|
|
|
|
- Allows monitoring tool execution details in amp.log
|
|
- Replaced agent-driven workflow with robust bash script - Script
handles task claiming, branching, syncing, and submission - Agent
is now only responsible for implementation and testing - Eliminates
context loss and process adherence issues
|
|
- We share the .git directory, so we can merge 'live' directly -
Avoids dependency on 'origin' which might be stale or unused
|
|
- Changed 'git reset --hard' to 'git merge' in worker guide - This
prevents the worker from wiping its own status updates (commits to
base branch) when starting a new task loop
|
|
- Workers should reuse existing branches if they crashed/restarted -
Changed 'git checkout -b' to 'git checkout || git checkout -b'
|
|
- Workers need to pull the latest merged code before starting a new
task - Added 'git reset --hard origin/live' to Step 1 of the loop
|
|
|
|
|
|
- Added Omni/Agent/harvest-tasks.sh for Planner to pull updates from
workers - Updated WORKER_AGENT_GUIDE.md to instruct workers to commit
status updates to their base branch
|
|
- Added --log-file amp.log to worker command - Allows users to monitor
agent progress with tail -f
|
|
- Updated Omni/Task/Core.hs to filter parent tasks from 'task ready'
- Broke down 'PodcastItLater: Path to Paid Product' into 5 subtasks -
Broke down 'General Code Quality Refactor' into 3 subtasks - Broke down
'Complete comprehensive test suite' into 2 subtasks - Fixed namespace
naming in tasks.jsonl
|
|
Amp-Thread-ID:
https://ampcode.com/threads/T-c683858e-5ed5-4d8e-8b9f-842ebdcec0a3
Co-authored-by: Amp <amp@ampcode.com>
|
|
- The autonomous worker needs to execute commands without interactive
prompts - Added --dangerously-allow-all flag to start-worker.sh
|
|
- Use 'git worktree list' to reliably find main repo and amp binary
- Run amp in a loop with -x flag for autonomous execution - Support
flexible worker path resolution
|
|
|
|
- Add 'Review' status to Task tool - Add Omni/Agent/ directory with
setup and sync scripts - Add WORKER_AGENT_GUIDE.md - Configure custom
merge driver for tasks.jsonl
|
|
- Remove Log.wipe from --plan output path - Add isPlanMode parameter
to analyzeAll to skip LogC.withLineManager when planning - Update all
analyzeAll call sites to pass isPlanMode flag - Remove grep workaround
from repl.sh (no longer needed)
Now 'bild --plan' outputs clean JSON that can be piped directly to jq.
This fixes typecheck.sh and other tools that rely on clean JSON output.
Amp-Thread-ID:
https://ampcode.com/threads/T-4e6225cf-3e78-4538-963c-5377bbbccee8
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Implement Haskell typechecking using 'ghc -fno-code' - Use repl.sh
to provision correct GHC environment with dependencies - Follows same
pattern as Python typechecking (via repl.sh) - Typechecks without
generating code (fast feedback)
Now typecheck.sh supports both Python (.py) and Haskell (.hs) files.
Amp-Thread-ID:
https://ampcode.com/threads/T-4e6225cf-3e78-4538-963c-5377bbbccee8
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Add progress display to 'task show' for epics (X/Y with percentage)
- Add progress display to 'task list --type=epic' showing [X/Y]
- Progress already shown in 'task tree' as [X/Y] - Calculate
completed/total child tasks for epics - Clean up test tasks
accidentally created in production database
All 31 tests passing.
Amp-Thread-ID:
https://ampcode.com/threads/T-4e6225cf-3e78-4538-963c-5377bbbccee8
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Add 'task stats' command to show task statistics - Display total
tasks, status breakdown (open/in-progress/done) - Show epic count,
ready vs blocked tasks - Show task counts by priority (P0-P4) and
namespace - Support both human-readable and JSON output (--json flag)
- Add tests for stats command and stats --json - TaskStats data type
with ToJSON/FromJSON instances
All 31 tests passing.
Amp-Thread-ID:
https://ampcode.com/threads/T-4e6225cf-3e78-4538-963c-5377bbbccee8
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Implement box-drawing characters (├──, └──, │) for
task tree visualization - Fix 'task create' flag ordering by using
[options] in docopt (same as 'task list') - Document TASK_TEST_MODE
environment variable in AGENTS.md Testing section - Add test case for
multi-flag ordering on 'task create' - Clean up test tasks polluted
in production database
All 29 tests passing.
Amp-Thread-ID:
https://ampcode.com/threads/T-4e6225cf-3e78-4538-963c-5377bbbccee8
Co-authored-by: Amp <amp@ampcode.com>
|
|
- Changed 'task list' usage from explicit flags to [options] -
Allows flags to be specified in any order (fixes t-10KNtTF) - All
combinations now work: --namespace --status, --status --namespace, etc.
- Updated AGENTS.md examples to use correct status argument format -
All tests passing (28/28)
|
|
- Implemented 'task show <id>' command with human-readable output -
Shows all task fields: title, type, status, priority, timestamps -
Displays dependencies with their types - Supports --json flag for
programmatic use - Added CLI tests for show command - Includes priority
descriptions (Critical/High/Medium/Low/Backlog)
|
|
|
|
The issue was that bild --plan outputs progress indicators before the
JSON, causing jq to fail parsing. Fixed by: - Using grep to extract
only lines starting with '{' (the JSON output) - This filters out
progress lines like '[…] target' - Restored typecheck.sh to use
repl.sh for proper environment setup
Now typecheck.sh correctly provisions the environment via repl.sh
instead of trying to use bild or raw python.
|
|
- Episode pages now show 'Add to feed' button for logged-in users
who don't have the episode - Added POST /episode/{id}/add-to-feed
endpoint - Tracks 'added' metric when user adds episode to their feed -
Added Database.track_episode_metric() function for metrics tracking -
Fixed typecheck.sh to use bild instead of broken repl.sh approach
Tasks completed: t-gc9aud, t-gcbqDl
|
|
The bild --plan command now outputs progress indicators before JSON.
Updated run.sh to use 'tail -1' to extract only the JSON line and
fixed the file path check to use the full path.
Amp-Thread-ID:
https://ampcode.com/threads/T-cc5d29f0-454e-4864-8d7e-1ad69a42afa9
Co-authored-by: Amp <amp@ampcode.com>
|
|
Problem: Still getting segfaults ("free(): invalid pointer") even
with ncurses calls protected. The mutex only covered ANSI calls, but
IORef reads and IO.hPutStr operations were happening outside the lock.
Root cause: Race conditions in concurrent terminal output: 1. Multiple
threads reading namespaceLines IORef concurrently 2. Interleaved
IO.hPutStr calls corrupting output buffer 3. Rainbow.hPutChunks not
being thread-safe
Solution: Expand terminalLock scope to cover entire output operations:
- Move IORef reads inside the lock - Protect all IO.hPutStr and
Rainbow.hPutChunks calls - Lock both SingleLine and MultiLine modes -
Ensure atomicity from IORef read through all I/O to flush
This makes each updateLine/updateLineState call atomic, preventing
any interleaving of terminal operations between threads.
Changes: - updateLine SingleLine: wrap entire output in withMVar
terminalLock - updateLine MultiLine: move nsMap read inside lock -
updateLineState SingleLine: wrap entire output in withMVar terminalLock
- updateLineState MultiLine: move nsMap read inside lock
Tested: 10/10 successful runs of `bild --time 0 **/*` without
segfaults.
|
|
Clarify that the mutex protects against ncurses thread-safety issues
that cause segfaults during concurrent builds.
This commit also forces a new Nix derivation hash to ensure the
mutex fix is actually used (previous builds were cached with the
old version).
|
|
Problem: Intermittent segfaults when running `bild --time 0 **/*` with
many concurrent builds. Core dumps showed crashes in libncursesw's
free() function during terminal cleanup.
Root cause: ANSI.getTerminalSize and other ANSI terminal library
calls are not thread-safe. With mapConcurrentlyBounded running up to
8 analyses concurrently, multiple threads were calling ANSI functions
simultaneously, causing memory corruption in the ncurses library.
Solution: Add global MVar terminalLock to serialize all ANSI terminal
operations. Wrap all ANSI function calls (cursor movement, line
clearing, etc.) with withMVar terminalLock.
Changes: - Add terminalLock :: MVar () in Omni/Log/Concurrent.hs -
Wrap all ANSI calls in withMVar terminalLock:
- initializeLines: cursor column, clear line - updateLine: cursor
up/down, column set, clear line - updateLineState: cursor up/down,
column set, clear line - withLineManager: cursor up
Tested: 5 consecutive runs of `bild --time 0 **/*` complete without
segfaults (previously failed 1-2 out of 3 runs).
|
|
Problem: Calling bild.run inside NixOS configs triggered IFD during
OS evaluation. ANSI escape codes from bild broke JSON parsing in Nix
sandbox, causing build failures.
Root cause: bild.run uses IFD (Import From Derivation) which runs
bild --plan during Nix evaluation. When this happened inside NixOS
service definitions, it ran recursively and bild output ANSI codes
that corrupted the JSON analysis output.
Solution: Two-phase architecture + NO_COLOR support
1. Biz/Packages.nix: Pre-builds all packages outside NixOS context
2. Biz.nix: Accepts packages as function argument (default:
Packages.nix) 3. Omni/Bild.nix: Sets NO_COLOR=1 in analysis
derivation 4. Omni/Log/Terminal.hs: Respects NO_COLOR env var
5. Omni/Log/Terminal.hs: Skip getTerminalSize when NO_COLOR set
to avoid
escape code output
6. Omni/Log/Concurrent.hs: Skip line initialization without ANSI
support
Now NixOS builds succeed: - Package IFD happens once at top level -
No recursive builds during service evaluation - Clean JSON output
from bild --plan in Nix sandbox - NixOS configs reference pre-analyzed
packages
Changes: - Add Biz/Packages.nix - standalone package builder - Update
Biz.nix to accept packages argument - Update Biz/Dragons/Analysis.nix
to use Packages.nix - Remove Biz/Targets.nix (replaced by
Packages.nix) - Add NO_COLOR support throughout logging stack -
Fix ANSI.getTerminalSize outputting escape codes when NO_COLOR set
Amp-Thread-ID:
https://ampcode.com/threads/T-bc0f6fc7-46bf-4aa2-892e-dd62e7251d4b
Co-authored-by: Amp <amp@ampcode.com>
|
|
ANSI.getTerminalSize queries the terminal by writing escape codes and
reading the response from stdin. When stdin is unavailable or at EOF
(common in non-interactive contexts), this causes "hWaitForInput:
end of file" errors.
Additionally, Conduit.streamingProcess returns a stdin handle that
was never being closed, which could cause child processes to block
waiting for input.
Fixes: - Catch IOException in detectTerminal when getTerminalSize
fails - Close subprocess stdin handle immediately after spawn -
Fallback to default terminal size (80x24) when detection fails
This unblocks all bild commands that were failing with stdin errors.
|
|
- Remove BILD_OUTPUT_MODE environment variable - Simplify to 2
modes: MultiLine (≥80 cols) and SingleLine (<80) - Use existing
--loud flag to disable concurrent UI entirely - When --loud: show
all compiler output line-by-line (for debugging) - When not --loud:
adaptive concurrent UI based on terminal width
This is simpler and uses the existing --loud flag instead of adding
new configuration. The --loud flag was already meant for debugging,
so it makes sense to use it to show all output.
Note: Omni/Bild.nix updated to include new Omni/Log/Terminal.hs module.
Blocked by: stdin bug (see _/llm/STDIN_BUG.md) - cannot test build yet.
|