Releases: dmoliveira/ailoop
Release list
ailoop v0.2.8
ailoop v0.2.8
Fixes
- Retry admission now serializes with durable stop mutations. A stop committed before admission
suppresses the retry, while a later stop still cancels admitted work through the normal active-run
path. - Stop intent now remains dominant over later pause requests while explicit resume continues to run
remaining work.
Security
- State lock handling now pins operations to owner-controlled, non-group/world-writable state
namespaces; rejects unsafe path types, ownership, hardlinks, and changed lock identities; normalizes
.locksand lock files to modes0700and0600; and writes diagnostic PIDs only after successful
lock validation. - The configured state-root ancestry, processes sharing the effective user ID, and non-local
filesystem lock semantics remain trusted boundaries rather than claimed isolation guarantees.
Compatibility
prompt.pre_prompt_enabled,prompt.attach_agent_file,loop.continue_on_error, and
tasks.stop_when_completenow require values that PyYAML parses as booleans. Quoted strings,
numbers,null, and collections are rejected with field-specific configuration errors.- Use unquoted YAML
trueandfalsefor portable, explicit configuration. PyYAML legacy spellings
that already parse as booleans remain accepted.
Quality
- The release-preparation suite passes 506 tests with 85% coverage, including adversarial lock-path,
retry-control, explicit-resume, and strict-config regressions.
Install
pipx install ./ai_loop-0.2.8-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.7
ailoop v0.2.7
Fixes
- Programmatic loop-table rebuilds now suppress
DataTable.RowHighlighted, so refreshes no longer
rebind transient rows or clear unsaved loop drafts, selection, cursor position, or workspace
branch state.
Quality
- Added Python 3.11 CI regression coverage for the refresh and draft-preservation path.
Install
pipx install ./ai_loop-0.2.7-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.6
ailoop v0.2.6
Fixes
- Lock teardown and file-close failures no longer turn an already committed state mutation into a
reported operation failure. - Best-effort postcommit event suppression is limited to storage
OSErrorfailures; programming
errors and interrupts still surface. - Ambiguous append-succeeded-then-raised outcomes do not retry or duplicate events, workers, or
consumed follow-up intent.
Quality
- 418 tests pass with 85% coverage on the corrective release line.
- Python 3.11 and Python 3.13 CI, Ruff, package metadata checks, clean-wheel installation, and
downloaded checksum verification are required before completion.
Install
pipx install ./ai_loop-0.2.6-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.5
ailoop v0.2.5
Reliability
- Memory IDs are collision-safe and publication cannot overwrite an existing entry.
- Arbitrary runner output bytes remain exact on disk and render safely in summaries, CLI, and TUI.
- Committed run intents remain successful when best-effort event journaling fails.
- Retry and reset executions preserve distinct prompt, stdout, and stderr evidence.
- Concurrent workspace-history appends and compaction are serialized and atomic.
TUI safety
- Hidden or editor-focused memory shortcuts fail closed.
- Loop actions require a visible, stable row identity; hidden query drafts cannot mutate loops.
- Memory archive and delete confirmations are bound to the same entry ID across both keypresses.
- Detached worker and replay feedback reports launch requests and recoverable launch failures honestly.
Quality
- Release validation includes 405 passing tests with 85% coverage, Ruff, package checks,
clean-wheel installation, Python 3.11 and Python 3.13 CI, and downloaded artifact checksum
verification.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.5-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.4
ailoop v0.2.4
Fixes
- Configured loop creation now writes complete state atomically and removes a newly created loop if
creation-event or workspace-history persistence fails. (#104) - Scheduled loops now fail closed while a worker is active: follow-up metadata changes are rejected,
emergency stop is the only claimed-process control, and cleanup failures are refresh-only. (#104) - Scheduled draft, branch strategy, safety, and notification surfaces now describe saved planning
metadata honestly; unsupported controls are disabled and excluded from keyboard focus. (#104)
Safety
- Recoverable service and worker-spawn failures now report the error, refresh state, and avoid false
success messages. Unsaved follow-up text is preserved when a worker cannot start. (#104) - Start, resume, follow-up, and next-iteration side effects occur only after their corresponding
persistence or spawn step succeeds. (#104)
Quality
- Added regressions for creation rollback, fail-closed scheduled edits, compact-layout capability
copy, planning-only focus behavior, recoverable mutations and spawns, and input preservation. (#104) - Release validation: 319 tests passed with 85% coverage; Ruff, diff, compile, and lock checks
passed; Python 3.11 and Python 3.13 PR CI passed; wheel and source distributions passed
twine check; and the wheel installed and reported version 0.2.4 in a clean environment.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.4-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.3
ailoop v0.2.3
Fixes
- Post-run task-file validation failures now emit a dedicated truthful event while preserving the
original validation exception as the primary error. Secondary history/event failures are attached
as notes instead of masking it. (#101) - Saved scheduled configurations can transition atomically to fixed or infinite execution, while
requests that remain scheduled are still rejected from manual restart. (#102) - TUI restart and worker-spawn failures are reported without escaping the action handler. Scheduled
help now shows emergency stop only for a claimed process and never advertises deletion while the
loop is active. (#102)
Safety
- Deferred validation catches only expected
OSError/ValueErrorfailures; interrupts and process
exits retain their normal control-flow semantics. - Completed iteration accounting, output artifacts, and resume numbering remain durable across
task-file validation failures. - A failed worker spawn leaves the converted executable configuration persisted and idle, with an
explicit recoverable error message.
Quality
- Added validation-primary combined-failure, deleted-task-file, resume-artifact, scheduled-mode
transition, spawn-failure, emergency-stop-help, and delete-help regressions. - Release validation: 293 tests passed with 83% coverage; Ruff and lock checks passed; wheel
and source distributions passedtwine check; and the wheel installed and reported version
0.2.3 in a clean virtual environment.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.3-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.2
ailoop v0.2.2
Fixes
- Completed iteration accounting now survives post-run task-file validation failures, so a
successful runner is not repeated after the task file is repaired. (#97) memory editpatches only explicitly supplied fields against the latest snapshot instead of
resetting omitted values to current application defaults. (#98)- Scheduled loops are presented honestly as saved configurations while scheduler execution is
unavailable. Unsupported runtime controls are disabled and guarded. (#99)
Safety
- Finalized iteration events and workspace history are persisted before post-run validation errors
surface. - Memory updates use stable per-entry locks and durable atomic replacement; concurrent edits and
usage updates no longer lose each other. - Scheduled follow-ups are saved without spawning a process, pending manual work cannot be
overwritten by a schedule save, and emergency stop remains available for a claimed process.
Quality
- Added regressions for task-file failure recovery, memory patch/version integrity, concurrent
memory mutation, atomic-write failures, scheduled keyboard actions, and scheduler-unavailable
status copy. - Release validation: 287 tests passed with 83% coverage; Ruff and lock checks passed; wheel
and source distributions passedtwine check; and the wheel installed and ran in a clean
virtual environment.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.2-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.1
ailoop v0.2.1
Fixes
ailoop resumenow establishes an explicit run intent for paused and stopped loops.- Loop state and control transitions are transactional, so newer pause or stop requests win
before a detached dashboard worker can claim the next iteration. - State writes use durable atomic replacement, while event appends are flushed and synced.
Safety
- On POSIX, catchable runner exits clean and reap the original process group before the loop
becomes resumable. - Unconfirmed cleanup records
cleanup_failedand blocks rerun, resume, control, and removal;
it does not claim that the process was terminated. - Abrupt parent
SIGKILLcan leave a runner alive and require manual cleanup. The persisted loop
remains active and fails closed instead of authorizing duplicate work. - Removed loop IDs are durably retired and cannot be reused by delayed workers or events.
- Scheduled loops remain configuration-only until scheduler execution is implemented.
Quality
- Added lifecycle-safety coverage for control races, durable claims, cleanup failures,
process-group teardown, retired IDs, removal races, and scheduled-loop guardrails. - CI passes on Python 3.11 and 3.13.
- 272 tests pass with 83% coverage.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.1-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.2.0
ailoop v0.2.0
Adds
- Searchable TUI loop navigation across loop IDs, state, mode, runner, agent, prompt, workspace, and task-file metadata.
- A recent-workspace picker plus workspace-aware follow-up and history tracking.
- Runner iteration timeouts and more responsive stop behavior.
Changes
- TUI controls preserve unsaved editor input while searching and switching loops.
- Workspace-root validation and status are surfaced before spawning a runner.
- Loop refreshes reuse one state snapshot instead of repeatedly scanning state files.
- The Textual dependency now targets the tested 8.2 release line instead of an incompatible legacy floor.
Fixes
- Stop TUI refresh callbacks safely during shutdown.
- Observe pause and stop controls during loop delays.
- Interrupt active runners when a stop is requested.
- Validate workspace roots before spawning.
- Clarify queued follow-up and reset/restart behavior.
Quality
- Expanded TUI, service, prompting, and workspace-loop regression coverage.
- Added CI for Python 3.11 and 3.13.
- Enforced an 80% branch-coverage floor.
Install
Download the wheel attached to this GitHub release, then run:
pipx install ./ai_loop-0.2.0-py3-none-any.whl
ailoop --helpPyPI publication is not part of this release.
ailoop v0.1.0
ailoop v0.1.0
- Launches
ailoop, a small CLI for running AI terminal tools in safe, repeatable loops. - Adds YAML config, CLI overrides, and durable local state for resumable runs.
- Supports OpenCode, Codex, Claude, and other command-template runners.
- Includes strict Markdown task-file mode for structured iterative work.
- Ships pause, resume, stop, logs, stats, tail, and JSON output for automation.