feat: reliability enhancements for AI services and capital planning
1. Health Scores — separate operating/reserve refresh
- Added POST /health-scores/calculate/operating and /calculate/reserve
- Each health card now has its own Refresh button
- On failure, shows cached (last good) data with "last analysis failed"
watermark instead of blank "Error calculating score"
- Backend getLatestScores returns latest complete score + failure flag
2. Investment Planning — increased AI timeout to 5 minutes
- Backend callAI timeout: 180s → 300s
- Frontend axios timeout: set explicitly to 300s (was browser default)
- Host nginx proxy_read_timeout: 180s → 300s
- Loading message updated to reflect longer wait times
3. Capital Planning — Unscheduled column moved to rightmost position
- Kanban column order: current year → future → unscheduled (was leftmost)
- Puts immediate/near-term projects front and center
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -430,13 +430,13 @@ export function CapitalProjectsPage() {
|
||||
// Merge base years with any extra years from projects (excluding FUTURE_YEAR for now)
|
||||
const regularYears = [...new Set([...baseYears, ...projectYears.filter((y) => y !== FUTURE_YEAR)])].sort();
|
||||
const years = [
|
||||
...(hasUnscheduledProjects ? [UNSCHEDULED] : []),
|
||||
...regularYears,
|
||||
...(hasFutureProjects ? [FUTURE_YEAR] : []),
|
||||
...(hasUnscheduledProjects ? [UNSCHEDULED] : []),
|
||||
];
|
||||
|
||||
// Kanban columns: Unscheduled + current..current+4 + Future
|
||||
const kanbanYears = [UNSCHEDULED, ...baseYears, FUTURE_YEAR];
|
||||
// Kanban columns: current..current+4 + Future + Unscheduled (rightmost)
|
||||
const kanbanYears = [...baseYears, FUTURE_YEAR, UNSCHEDULED];
|
||||
|
||||
// ---- Loading state ----
|
||||
|
||||
|
||||
Reference in New Issue
Block a user