{"record":{"id":"0b01c6bb40ca6faf","repo":"pulumi/pulumi","slug":"once-is-not-valid-for-drift-schedules-use-cro","errorCode":null,"errorMessage":"--once is not valid for drift schedules; use --cron","messagePattern":"--once is not valid for drift schedules; use --cron","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/cmd/pulumi/stack/stack_schedule_edit.go","lineNumber":235,"sourceCode":"\treturn flags.cronChanged ||\n\t\tflags.onceChanged ||\n\t\tflags.operationChanged ||\n\t\tflags.autoRemediateChanged ||\n\t\tflags.deleteAfterDestroyChanged\n}\n\nfunc validateScheduleEditFlags(kind string, flags stackScheduleEditFlags) error {\n\tswitch kind {\n\tcase scheduleKindRaw:\n\t\tif flags.autoRemediateChanged {\n\t\t\treturn errors.New(\"--auto-remediate is only valid for drift schedules\")\n\t\t}\n\t\tif flags.deleteAfterDestroyChanged {\n\t\t\treturn errors.New(\"--delete-after-destroy is only valid for ttl schedules\")\n\t\t}\n\tcase scheduleKindDrift:\n\t\tif flags.onceChanged {\n\t\t\treturn errors.New(\"--once is not valid for drift schedules; use --cron\")\n\t\t}\n\t\tif flags.operationChanged {\n\t\t\treturn errors.New(\"--operation is not valid for drift schedules\")\n\t\t}\n\t\tif flags.deleteAfterDestroyChanged {\n\t\t\treturn errors.New(\"--delete-after-destroy is only valid for ttl schedules\")\n\t\t}\n\tcase scheduleKindTTL:\n\t\tif flags.cronChanged {\n\t\t\treturn errors.New(\"--cron is not valid for ttl schedules; use --once\")\n\t\t}\n\t\tif flags.operationChanged {\n\t\t\treturn errors.New(\"--operation is not valid for ttl schedules\")\n\t\t}\n\t\tif flags.autoRemediateChanged {\n\t\t\treturn errors.New(\"--auto-remediate is only valid for drift schedules\")\n\t\t}\n\t}","sourceCodeStart":217,"sourceCodeEnd":253,"githubUrl":"https://github.com/pulumi/pulumi/blob/793f7b2e160db4321fb7fb6b0607461e01cb251e/pkg/cmd/pulumi/stack/stack_schedule_edit.go#L217-L253","documentation":"Drift schedules are triggered by cron expressions, not one-off timestamps. When editing a drift schedule, passing --once is rejected with a hint to use --cron instead. This keeps drift schedules periodic by construction.","triggerScenarios":"Running `pulumi stack schedule edit <drift-schedule> --once <timestamp>` (flags.onceChanged true while kind == scheduleKindDrift).","commonSituations":"Users confuse drift schedules with one-off (raw/ttl once) schedules and try to convert a recurring drift check into a single run, or copy a TTL edit command onto a drift schedule.","solutions":["Replace --once with --cron to set a recurring cadence for the drift schedule.","If a single one-off run is needed, edit or create a raw schedule that supports --once.","Check the schedule kind with `pulumi stack schedule ls` before choosing flags."],"exampleFix":"// before\npulumi stack schedule edit my-drift-schedule --once 2026-09-01T10:00:00Z\n// after\npulumi stack schedule edit my-drift-schedule --cron \"0 10 * * *\"","handlingStrategy":"validation","validationCode":"if kind === 'drift' && (process.argv.includes('--once')) {\n  throw new Error('use --cron for drift schedules');\n}","typeGuard":"function isDriftSchedule(s) { return s.kind === 'drift'; }","tryCatchPattern":null,"preventionTips":["Use --cron for all recurring/drift schedule edits.","Reserve --once for raw one-off schedules."],"tags":["cli","schedules","drift","flag-validation"],"backgroundTag":"invalid-flag-for-schedule-kind","analyzedSha":"793f7b2e160db4321fb7fb6b0607461e01cb251e","analyzedAt":"2026-08-31T09:36:43.099Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}