> **Note:** On pure Capacitor builds, the runtime is `capacitor.js`. Only include `cordova.js/cordova_plugins.js` if Cordova-compat is enabled; otherwise remove those references for accuracy.
- **Validation**: Input validation before processing
### Exact-Alarm Decision Rule (User-Visible)
If `SCHEDULE_EXACT_ALARM` is **granted** → schedule with `setExactAndAllowWhileIdle`.
If **denied or quota-limited** → schedule via WorkManager (exp backoff + jitter) and surface `E_EXACT_ALARM_DENIED` (with "Degraded timing — Doze may delay" hint).
### 3. Service Locator
**Purpose**: Dependency injection for testability
@ -413,12 +417,12 @@ export class SchemaValidator {
errors.push('Time must be in HH:mm format');
}
// Validate title length
// Validate title length (enforce exactly: title ≤ 100 chars)
if (request.title && request.title.length > 100) {
errors.push('Title must be 100 characters or less');
}
// Validate body length
// Validate body length (enforce exactly: body ≤ 500 chars)
if (request.body && request.body.length > 500) {
errors.push('Body must be 500 characters or less');
}
@ -433,9 +437,17 @@ export class SchemaValidator {
errors.push('Priority must be low, default, or high');