moeru-ai/airi · error · Error
Unsupported settle delay "${argv[settleMsFlagIndex + 1] ?? s
Error message
Unsupported settle delay "${argv[settleMsFlagIndex + 1] ?? settleMs}". Expected a number >= 0. What it means
After confirming --settle-ms has a value, the script converts it with Number() (capture.ts:25) and requires a finite result >= 0 (capture.ts:87). This error fires when the raw string is not numeric (Number() returns NaN), or is negative. The message echoes the original argv string (or the coerced value) so you can see exactly what was parsed.
Source
Thrown at packages/scenarios-stage-tamagotchi-browser/scripts/capture.ts:87
if (settleMsFlagIndex >= 0 && !argv[settleMsFlagIndex + 1]) {
throw new Error('Missing value for --settle-ms.')
}
if (avifMaxWidthFlagIndex >= 0 && !argv[avifMaxWidthFlagIndex + 1]) {
throw new Error('Missing value for --avif-max-width.')
}
if (avifQualityFlagIndex >= 0 && !argv[avifQualityFlagIndex + 1]) {
throw new Error('Missing value for --avif-quality.')
}
if (avifSpeedFlagIndex >= 0 && !argv[avifSpeedFlagIndex + 1]) {
throw new Error('Missing value for --avif-speed.')
}
if (!Number.isFinite(settleMs) || settleMs < 0) {
throw new Error(`Unsupported settle delay "${argv[settleMsFlagIndex + 1] ?? settleMs}". Expected a number >= 0.`)
}
if (!Number.isFinite(avifMaxWidth) || avifMaxWidth < 1) {
throw new Error(`Unsupported AVIF max width "${argv[avifMaxWidthFlagIndex + 1] ?? avifMaxWidth}". Expected a number >= 1.`)
}
if (!Number.isFinite(avifQuality) || avifQuality < 0 || avifQuality > 100) {
throw new Error(`Unsupported AVIF quality "${argv[avifQualityFlagIndex + 1] ?? avifQuality}". Expected a number between 0 and 100.`)
}
if (!Number.isFinite(avifSpeed) || avifSpeed < 1 || avifSpeed > 10) {
throw new Error(`Unsupported AVIF speed "${argv[avifSpeedFlagIndex + 1] ?? avifSpeed}". Expected a number between 1 and 10.`)
}
await captureBrowserRoots({
imageTransformers: requestedFormat === 'avif'
? [avifTransformer]
: undefined,View on GitHub (pinned to 677329427f)
Solutions
- Pass milliseconds as a plain non-negative number: `--settle-ms 1500`
- If you meant seconds, convert first: 0.5 s -> `--settle-ms 500`
- Check no other flag immediately follows --settle-ms without an intervening value
Example fix
// before pnpm capture --settle-ms 1s // after pnpm capture --settle-ms 1000
Defensive patterns
Strategy: validation
Validate before calling
function parseSettleMs(raw: string | undefined): number {
const value = raw === undefined ? 500 : Number(raw)
if (!Number.isFinite(value) || value < 0)
throw new Error(`Unsupported settle delay "${raw}". Expected a number >= 0.`)
return value
} Type guard
const isNonNegativeNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v) && v >= 0
Prevention
- Pass plain integer milliseconds; no units or suffixes
- Convert seconds to milliseconds in the calling script
- Ensure the token after --settle-ms is a value, not another flag
When it happens
Trigger: Passing a non-numeric value (`--settle-ms abc`, `--settle-ms 1s`, `--settle-ms 500ms`), a negative value (`--settle-ms -1`), or a string that Number() cannot coerce. Note that a following flag like `--settle-ms --format` coerces to NaN here because any non-empty string passes the presence check at capture.ts:70.
Common situations: Units confusion (typing seconds where milliseconds are expected, e.g. `--settle-ms 0.5s`), locale decimal separators, or the value slot silently swallowed by another flag.
Related errors
- Unsupported AVIF max width "${argv[avifMaxWidthFlagIndex + 1
- Unsupported AVIF quality "${argv[avifQualityFlagIndex + 1] ?
- Unsupported AVIF speed "${argv[avifSpeedFlagIndex + 1] ?? av
- Missing value for --output-dir.
- Missing value for --settle-ms.
AI-assisted analysis of moeru-ai/airi@677329427f (2026-08-18).
Data as JSON: /api/errors/7ed1d3db5e1f4a40.
Report an issue: GitHub.