feat(engine): add background project engine reconciliation + global concurrency setting

- ProjectEngineManager.startReconciliation() polls for newly registered
  projects every 30s and starts their engines without requiring UI access
- Expose global concurrency limit in dashboard settings
- Fix SettingsModal test cleanup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsxdsm
2026-04-13 18:03:39 -07:00
parent 564659fcbe
commit e8dc9e9963
7 changed files with 352 additions and 10 deletions

View File

@@ -0,0 +1,5 @@
---
"@gsxdsm/fusion": patch
---
Expose the system-wide global concurrency limit in dashboard settings.

View File

@@ -0,0 +1,11 @@
---
"@gsxdsm/fusion": patch
---
Decouple project execution startup from dashboard page access
Previously, project task execution (triage, scheduling, in-progress transitions) would only start for projects registered after boot if a user navigated to the Projects view in the dashboard UI, which triggered the `onProjectFirstAccessed` lazy-start callback.
This fix adds a background reconciliation loop in `ProjectEngineManager` that periodically checks for newly registered projects and starts their engines without requiring any UI access. Projects registered via `fn project add` after the dashboard or headless node starts will now have their engines started automatically within the next reconciliation interval (30 seconds by default).
The `onProjectFirstAccessed` callback remains wired as a fast-path fallback for potential optimization, but it is no longer required for correctness.