# Changelog

All notable changes to Loom are documented in this file.

## [Unreleased]

### Added
- `loom_confirm(proposal_id)` — confirm a decompose proposal without re-running the LLM
- `loom_why_blocked` — dependency chain diagnostics for stuck tasks
- `loom_comment` / `loom_comments` — task-level notes (migration 009)
- `loom_progress` — aggregated heartbeat progress reporting
- `loom_escalations` / `loom_resolve_escalation` — escalation triage tools
- Configurable `verify_command_timeout_seconds` and `progress_ttl_seconds` in orchestration config

### Changed
- `loom_decompose(confirm=True)` now caches proposal in Redis and returns `proposal_id`; use `loom_confirm` to materialize without re-running LLM
- Extracted business logic from MCP tools into `orchestration/verify.py`, `graph/query.py`, `mcp/_decompose_prep.py`
- Hardcoded timeouts (verify 120s, progress TTL 3600s) now configurable via config/env vars

### Fixed
- Module contract violations: store bypass, duplicate cache functions, hardcoded Redis keys
- Decomposer `pre_completed` pruning incorrectly marking all tasks as done
- Epics can now be completed directly via `loom_done`

## [1.0.0] — 2026-02-25

### Added
- Multi-LLM provider abstraction (Anthropic + OpenAI-compatible)
- `loom doctor` command for environment diagnostics
- Dependency suggestion feature in decomposer
- Daemon system: core loop, lifecycle management, CLI integration (`loom up`/`loom down`)
- Persistent email-style messaging system (`loom_message`/`loom_inbox`)
- Weft memory injection at claim time
- Auto-heartbeat background loop for claim TTL extension
- Solo-agent mode and Loom-vs-built-in decision tree
- Cross-project issue board (`loom_issue`/`loom_issues`/`loom_resolve_issue`)
- TDD-recommended heuristic in decomposer pipeline
- Done-with-commit: auto-inject commit SHA on task completion

### Fixed
- Auto-fix paths rewriting cross-project paths incorrectly
- Leaf tasks silently dropped by merge into epic parents
- Cross-project path corruption in `loom_decompose` after project switch
- Dead-lettered tasks excluded from status counts and query results
- `loom_ready` return type normalized to always return dict
- ModuleNotFoundError in CLI subprocess tests (uv + macOS + Python 3.13)

## [0.3.1] — 2026-02-15

### Fixed
- Dead-lettered tasks appearing in `loom_ready` results
- `force_leaf` converting all epics instead of only childless ones
- Scope-overlap prevention added to decompose prompt

## [0.3.0] — 2026-02-12

### Added
- Dynamic port allocation to avoid multi-project conflicts
- Auto-pathcheck and file-affinity merging in decompose pipeline
- Epic auto-close sweep
- Idea backlog system
- Weft integration features (#8, #12-15)

### Fixed
- 4 bugs reported from Weft dogfooding sessions
- Auth error UX, config reload, and `LOOM_PROJECT_DIR` handling
- 5 pre-existing test failures

## [0.2.0] — 2026-02-05

### Added
- Phase 3: Full orchestration system
  - Claim TTL + heartbeat system
  - Retry logic with exponential backoff and dead letter queue
  - Workflow system with YAML definitions and state persistence
  - 4 built-in orchestration skills
  - Orchestrator loop and escalation handler
- Phase 2: Skills system and decomposition pipeline
- Phase 1: Core multi-agent orchestration (tasks, graph, MCP tools)
