{"record":{"id":"514d68292111e49e","repo":"NousResearch/hermes-agent","slug":"unknown-day-day-r","errorCode":null,"errorMessage":"unknown day {day!r}","messagePattern":"unknown day (.+?)","errorType":"validation","errorClass":"BlueprintFillError","httpStatus":null,"severity":"warning","filePath":"cron/blueprint_catalog.py","lineNumber":722,"sourceCode":"        m = _TIME_RE.match(str(time_val).strip())\n        if not m:\n            raise BlueprintFillError(f\"invalid time {time_val!r} — use HH:MM (24h)\")\n        repl[\"hour\"] = str(int(m.group(1)))\n        repl[\"minute\"] = str(int(m.group(2)))\n\n    # weekday set -> dow\n    if \"{dow}\" in sched:\n        if \"recurrence\" in values:\n            preset = str(values.get(\"recurrence\", \"everyday\")).lower()\n            if preset not in WEEKDAY_PRESETS:\n                raise BlueprintFillError(\n                    f\"unknown recurrence {preset!r} — one of {', '.join(WEEKDAY_PRESETS)}\"\n                )\n            repl[\"dow\"] = WEEKDAY_PRESETS[preset]\n        elif \"day\" in values:\n            day = str(values.get(\"day\", \"\")).lower()\n            if day not in _DAY_TO_DOW:\n                raise BlueprintFillError(f\"unknown day {day!r}\")\n            repl[\"dow\"] = _DAY_TO_DOW[day]\n        else:\n            repl[\"dow\"] = \"*\"\n\n    # interval (minutes) for */N schedules\n    if \"{interval_min}\" in sched:\n        iv = str(values.get(\"interval_min\", \"\")).strip()\n        if not iv.isdigit() or int(iv) <= 0:\n            raise BlueprintFillError(f\"invalid interval {iv!r} — minutes as a positive integer\")\n        repl[\"interval_min\"] = iv\n\n    # Any remaining {slot} placeholders are filled verbatim from validated\n    # enum/text slot values (e.g. an hour-range window). Enum options have\n    # already been checked in fill_blueprint, so these are safe to interpolate.\n    for name in re.findall(r\"\\{(\\w+)\\}\", sched):\n        if name not in repl and name in values:\n            repl[name] = str(values[name])\n","sourceCodeStart":704,"sourceCodeEnd":740,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/cron/blueprint_catalog.py#L704-L740","documentation":"BlueprintFillError: the template has {dow}, no `recurrence` was given, but a `day` value was supplied that is not a key in _DAY_TO_DOW after lowercasing. Only recognized weekday names map to cron day-of-week numbers.","triggerScenarios":"fill_blueprint with day='morning', day='monday-friday', day='tues', or day='' on a {dow} template without recurrence.","commonSituations":"Abbreviated or misspelled weekday names; passing an interval or phrase in the day slot; localization ('lundi').","solutions":["Use the full English weekday name, lowercase is fine: 'monday', 'tuesday', ...","For multi-day patterns use `recurrence` presets or a free-text `schedule` value"],"exampleFix":"# before\nfill_blueprint(bp, {\"time\": \"07:15\", \"day\": \"mon\"})\n# BlueprintFillError: unknown day 'mon'\n\n# after\nfill_blueprint(bp, {\"time\": \"07:15\", \"day\": \"monday\"})","handlingStrategy":"validation","validationCode":"from cron.blueprint_catalog import _DAY_TO_DOW\n\ndef valid_day(d: str) -> bool:\n    return d.lower() in _DAY_TO_DOW","typeGuard":null,"tryCatchPattern":"try:\n    spec = fill_blueprint(bp, values)\nexcept BlueprintFillError as e:\n    if str(e).startswith(\"unknown day\"):\n        values[\"day\"] = resolve_weekday(values[\"day\"])  # 'mon' -> 'monday' via difflib\n        spec = fill_blueprint(bp, values)\n    else:\n        raise","preventionTips":["Use full weekday names; expand common abbreviations client-side","Offer a day picker instead of free text","Remember `day` is only consulted when `recurrence` is absent"],"tags":["cron","blueprint","validation","scheduling"],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}