All releases
v0.2.5-beta

Parallel Projects

Background tasks across different projects now run in parallel — onboarding one project no longer queues behind a planning run on another. A new Performance setting lets you cap how many projects run at the same time on your machine.

Improved

  • Background tasks run across projects in parallel — Previously Trinity dispatched only one background task at a time across the whole app, so a long Architect or onboarding run on one project would queue every other project's tasks behind it. Tasks for different projects now run in parallel, with each project still running its own tasks one at a time so order is preserved within a project. Switching between projects feels noticeably less stuck when there's heavy work in flight elsewhere.
  • New Performance setting on Settings → General — Cap how many projects can run a task at the same time on this machine. Default is 10 (range 1–20). Higher values speed up multi-project work; lower values keep CPU, memory, and provider rate limits in check on smaller machines.
  • Help Assistant replies aren't blocked by other AI tasks anymore — Previously a help-chat question would queue behind any planning, architect, audit, or onboarding task running on the same project, making the assistant feel frozen during long runs. Help-chat now bypasses the per-project lock and answers immediately. Two help-chat replies on the same project still serialize so chat history stays in order, and chat replies still count against the overall concurrency cap.
  • Cleaner error messages everywhere — Failed requests no longer surface raw database or filesystem details in error popups. You'll see "Conflict", "Not found", "Permission denied", or "Failed to do X" instead of leaked internals.
  • Code Viewer recognises files without extensionsLICENSE, Makefile, Dockerfile, and similar now render with correct highlighting instead of falling back to plaintext.

Fixed

  • Bug Report attachment limit message was wrong — The "exceeds 50MB" warning when uploading large screenshots actually triggers at 10MB, not 50. The message now matches the real limit so you stop compressing screenshots that would have uploaded fine.
  • Drag-dropped files in Comments stayed unrenderable — PDFs, PNGs, and Markdown files dropped into comment attachments were stored as generic binary blobs and came back unrenderable. They're now correctly typed and preview properly.
  • Worktree cleanup honoured the wrong timer — "Stale" and "merged" worktree cleanups were reaping after 1 hour instead of the 24 hours documented on the cleanup dialog, occasionally pulling worktrees out from under active sessions. The threshold now matches the dialog.
  • Background tasks could double-run on rapid kicks — When several rapid signals woke the queue at once, the same task could occasionally start twice. Concurrent wake-ups now coalesce into a single dispatch loop with a tail re-scan, so each task runs once.
  • Architect chat messages could vanish on flaky connections — In Align and Audit chat, messages were sent to storage without waiting for confirmation; a transient failure could drop a message silently. Both are now confirmed before the request returns.
  • Code Viewer surfaced blank error messages — Some failed file fetches showed an empty error in the panel. They now show a real message ("Request failed: 500", "Fetch failed", etc.).
  • Apply Import didn't refresh the project view — After importing existing repos via "Use existing", the dashboard occasionally rendered against pre-import state until you reloaded. The cache is now busted as part of the import.
  • Story calibration over-weighted shared tags — Stories with several tags in common with another story scored higher than the calibration model intended, nudging the planner toward picking them. Tag overlap now stays inside its documented [0,1] weight.
  • Self-cycles in the dependency graph were drawn one column off — A story that depended on itself rendered one cell to the right of where it belonged in the horizontal layout. Fixed.