All checks were successful
Release / release (push) Successful in 35s
Drop the removed tag system, fix the retired Manual status and the atomic queue-claim location, refresh the App DI registrations to the Islands VMs, update the Data table list, correct a stale test reference, and document the interface-folder and single-consumer-fold conventions plus the .NET 8 build path. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
# ClaudeDo
|
|
|
|
A desktop task management app that executes tasks autonomously via Claude CLI in isolated git worktrees.
|
|
|
|
## Architecture
|
|
|
|
Two-process system communicating over SignalR (`127.0.0.1:47821`):
|
|
|
|
- **ClaudeDo.App** — Avalonia desktop entry point, DI container setup
|
|
- **ClaudeDo.Ui** — Views, ViewModels, SignalR client (MVVM with CommunityToolkit.Mvvm)
|
|
- **ClaudeDo.Data** — SQLite data layer, repositories, models, GitService
|
|
- **ClaudeDo.Worker** — ASP.NET Core hosted service, task queue, Claude CLI runner
|
|
- **ClaudeDo.Worker.Tests** — xUnit integration tests with real SQLite and real git
|
|
|
|
## Tech Stack
|
|
|
|
- .NET 8.0, Avalonia 12.0.0 (Fluent theme)
|
|
- SQLite (WAL mode) via Entity Framework Core (Microsoft.EntityFrameworkCore.Sqlite)
|
|
- SignalR for real-time IPC
|
|
- CommunityToolkit.Mvvm (`[ObservableProperty]`, `[RelayCommand]`)
|
|
- Git worktrees for task isolation
|
|
|
|
## Key Paths
|
|
|
|
- DB: `~/.todo-app/todo.db`
|
|
- UI config: `~/.todo-app/ui.config.json`
|
|
- Worker config: `~/.todo-app/worker.config.json`
|
|
- Logs: `~/.todo-app/logs/`
|
|
- Worktrees: configured per worker (sibling or central strategy)
|
|
|
|
## Conventions
|
|
|
|
- Repository pattern — each entity has its own async repository
|
|
- All data operations are async with CancellationToken support
|
|
- EF Core migrations manage schema (Migrations/ folder in ClaudeDo.Data)
|
|
- `IDbContextFactory<ClaudeDoDbContext>` used by singleton consumers (e.g. Worker)
|
|
- Entity configuration via `IEntityTypeConfiguration<T>` in Configuration/ folder
|
|
- Task status flow: Idle | Queued -> Running -> Done | Failed | Cancelled
|
|
- Worktree state flow: Active -> Merged | Discarded | Kept
|
|
- The queue picker claims tasks by `Status=Queued` (with `BlockedByTaskId IS NULL`); the legacy tag system was removed
|
|
- Interfaces live in an `Interfaces/` subfolder beside their consumers (namespace unchanged)
|
|
- Small single-consumer helper types live in their consumer's file, not standalone files
|
|
- Commit messages use conventional format: `{commitType}(slug): title`
|
|
- Views use compiled bindings (`x:DataType`)
|
|
- ViewModels use `[ObservableProperty]` and `[RelayCommand]` source generators
|
|
|
|
## Building & Testing
|
|
|
|
`dotnet build ClaudeDo.slnx` requires .NET 9; on .NET 8 build individual projects instead.
|
|
|
|
```bash
|
|
dotnet build src/ClaudeDo.App/ClaudeDo.App.csproj # pulls in Ui + Data
|
|
dotnet build src/ClaudeDo.Worker/ClaudeDo.Worker.csproj
|
|
dotnet test tests/ClaudeDo.Worker.Tests # also: Data.Tests, Ui.Tests, Installer.Tests, Releases.Tests
|
|
```
|
|
|
|
## Docs
|
|
|
|
- `docs/plan.md` — full architecture and design spec
|
|
- `docs/open.md` — verification checklist and improvement backlog
|
|
- `docs/improvement-plan.md` — prioritized improvement items
|