{"record":{"id":"842e01cf11a8f04a","repo":"NousResearch/hermes-agent","slug":"drift-marker-skipped-to-prevent-unintended-spen","errorCode":null,"errorMessage":"{_drift_marker} Skipped to prevent unintended spend: global inference config drifted since this job was created ({_changes}), and this job is unpinned. No inference call was made. {_remediation} This alert is sent once; the job stays skipped until the config is pinned or restored. See #44585.","messagePattern":"(.+?) Skipped to prevent unintended spend: global inference config drifted since this job was created \\((.+?)\\), and this job is unpinned\\. No inference call was made\\. (.+?) This alert is sent once; the job stays skipped until the config is pinned or restored\\. See #44585\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"cron/scheduler.py","lineNumber":4314,"sourceCode":"                    _changes,\n                    _remediation,\n                )\n                # Alert-once (#73506 shape): persist the drift_alerted bit so\n                # only the FIRST drifted tick delivers; run_one_job suppresses\n                # delivery on the silent marker. mark_job_run clears the bit\n                # when a run succeeds (drift healed), re-arming the alert.\n                _drift_already_alerted = False\n                try:\n                    from cron.jobs import mark_drift_alerted\n\n                    _drift_already_alerted = mark_drift_alerted(job_id)\n                except Exception:\n                    pass  # fail open: better a duplicate alert than none\n                _drift_marker = (\n                    DRIFT_SKIP_SILENT_MARKER if _drift_already_alerted\n                    else DRIFT_SKIP_MARKER\n                )\n                raise RuntimeError(\n                    f\"{_drift_marker} Skipped to prevent unintended spend: global \"\n                    f\"inference config drifted since this job was created \"\n                    f\"({_changes}), and this job is unpinned. No inference call \"\n                    f\"was made. {_remediation} \"\n                    f\"This alert is sent once; the job stays skipped until the \"\n                    f\"config is pinned or restored. See #44585.\"\n                )\n\n        fallback_model = get_fallback_chain(_cfg) or None\n        credential_pool = None\n        runtime_provider = str(runtime.get(\"provider\") or \"\").strip().lower()\n        if runtime_provider:\n            try:\n                from agent.credential_pool import load_pool\n                pool = load_pool(runtime_provider)\n                if pool.has_credentials():\n                    credential_pool = pool\n                    logger.info(","sourceCodeStart":4296,"sourceCodeEnd":4332,"githubUrl":"https://github.com/NousResearch/hermes-agent/blob/c896c09c42910c584c4c7d2325b58c14713ea42c/cron/scheduler.py#L4296-L4332","documentation":"Error \"{_drift_marker} Skipped to prevent unintended spend: global inference config drifted since this job was created ({_changes}), and this job is unpinned. No inference call was made. {_remediation} This alert is sent once; the job stays skipped until the config is pinned or restored. See #44585.\" thrown in NousResearch/hermes-agent.","triggerScenarios":"Thrown at cron/scheduler.py:4314 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pin the job's inference config, or restore the global config the job was created with, then resume the job.","Review the drift details in the alert before pinning."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c896c09c42910c584c4c7d2325b58c14713ea42c","analyzedAt":"2026-08-14T17:18:01.089Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}