Startup lifecycle¶
DUMB distinguishes a service that is still starting from one that is unhealthy in steady state. The lifecycle is:
initializingpreinstallingstarting_servicesstabilizingreadyordegradedshutting_down
The DUMB API starts before enabled-service preinstall. An already-installed frontend can also start early, so the dashboard can show startup progress while large service installs or migrations continue.
Readiness and stabilization¶
During stabilizing, DUMB checks every enabled process and each configured
port, frontend_port, backend_port, and webdav_port. Every enabled
service must remain ready for the stabilization window before the lifecycle
becomes ready.
"dumb": {
"startup": {
"readiness_timeout_seconds": 300,
"readiness_poll_interval_seconds": 5,
"stabilization_seconds": 15
}
}
| Setting | Default | Purpose |
|---|---|---|
readiness_timeout_seconds |
300 |
Maximum time to wait for all enabled services |
readiness_poll_interval_seconds |
5 |
Delay between readiness checks |
stabilization_seconds |
15 |
Continuous healthy period required before ready |
If the deadline expires, DUMB enters degraded instead of shutting down the
API/frontend. The dashboard identifies services that missed readiness, and one
consolidated degraded-startup notification can be routed to operators.
Startup-safe monitoring¶
Until startup reaches ready or degraded:
- Auto-restart does not health-check or restart services.
- Automatic service, resource, database, and recovery notifications are suppressed.
- Database Health does not probe a service that is still starting.
- Manual notification tests remain available.
- Docker health reports startup progress instead of declaring the container unhealthy merely because a slow service is still initializing.
When startup becomes terminal, notification monitoring records a fresh baseline. It does not send recovery messages for failures that existed only during startup. Persistent conditions must still satisfy their normal duration threshold before they alert.
Auto-restart then applies its grace period. A successful process spawn is only
an attempt; DUMB records service.auto_restart.succeeded after the restarted
service passes health checks.
Preinstall behavior¶
Every enabled instance is preinstalled. Instances of the same service key run sequentially so shared source/runtime trees are not modified concurrently, while different service keys can still preinstall in parallel.
A failed preinstall is retried through normal service startup. Startup is reported as degraded only if the service still misses the final readiness deadline.
Ownership and network storage¶
Startup ownership repair no longer performs a full count pass followed by a second walk. It caps ownership workers and treats correctly owned top-level trees as healthy, avoiding repeated traversal of large package caches on NFS. Service-specific setup still repairs a subtree when its top-level ownership is wrong.
JavaScript package caches are disposable. For NFS-backed /config, consider
moving these existing cache roots to host-local storage with the matching
environment overrides:
DUMB_PNPM_STORE_ROOTDUMB_BUN_CACHE_ROOTDUMB_YARN_CACHE_ROOT
Keep durable service configuration and databases on storage appropriate for their recovery requirements.
API¶
When capability startup_lifecycle is true:
GET /api/process/startup-status
The response includes the current phase, timestamps, expected services,
per-service pending/starting/ready state, and terminal failures.