fix: enable schedule commands against OSS Conductor#86
Merged
Conversation
The scheduler module was upstreamed by Orkes into conductor-oss/conductor
and is mounted at /api/scheduler/* — the same paths the conductor-go SDK
already calls. The CLI's hardcoded "Not supported in OSS Conductor" guards
on every schedule subcommand were stale and blocked OSS users from features
that work fine against the default OSS server.
Changes:
- Drop isEnterpriseServer() guards on list/get/create/update/delete/pause/
resume/search. Schedule commands now hit the server for both OSS and Orkes.
- Add parseSchedulerAPIError: when a scheduler call returns 404 (e.g. a
custom OSS build without the scheduler module), surface a clear hint plus
a curl verification command rather than a raw 404.
- Fix duplicate-detection on create against OSS: OSS returns 200 with an
empty body when a schedule does not exist (Orkes returns 404). The SDK
unmarshals into a zero WorkflowSchedule and does not error, so the
existence check treated every name as "already exists". Check for an
empty Name on the returned schedule to handle both servers uniformly.
- Fix `schedule search`: it required a positional arg and then issued the
same query per-arg. Now runs once with --workflow/--status/--count, and
the --workflow flag is finally declared (it was being read but never
registered).
- Remove an empty `if update {}` block; surface non-404 errors from the
pre-save existence check instead of silently treating them as
"doesn't exist".
Verified end-to-end against a local OSS Conductor server:
create -> list -> get -> update -> duplicate-create errors -> delete.
Docs (CLAUDE.md, README.md) updated to reflect that schedule commands now
work against both OSS and Orkes Conductor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
shaileshpadave
approved these changes
May 21, 2026
manan164
approved these changes
May 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
"Not supported in OSS Conductor"if--server-typewasn't Enterprise. Butconductor-oss/conductorships ascheduler/module (upstreamed by Orkes) mounted at/api/scheduler/*— exactly the paths theconductor-goSDK already calls. The guards were stale and locked OSS users out of a feature that works fine against the default OSS server.schedule create, fixesschedule search, and improves 404 messaging when the scheduler module isn't loaded.What changed
cmd/scheduler.go:isEnterpriseServer()early-returns fromlist / get / create / update / delete / pause / resume / search.parseSchedulerAPIError: on a 404 from a scheduler endpoint, return a clear hint that the scheduler module may not be enabled, plus acurlverification command.200 OKwith an empty body when a schedule doesn't exist (Orkes returns404). The SDK'sGetScheduleunmarshals that into a zeroWorkflowSchedule{}and does not error, so the pre-save existence check thought every name already existed. Now also requiresexisting.Name != ""to treat the schedule as present. Handles both servers uniformly.schedule search. It required a positional arg, then iteratedargsissuing the same query each time. Now runs once with--workflow / --status / --countflags. The--workflowflag was being read by the handler but never registered — now declared onsearchSchedulerCmd.if update {}block; surface non-404 errors from the pre-saveGetScheduleinstead of silently treating them as "doesn't exist".CLAUDE.md,README.md:conductor server startdoes).Test plan
go build ./...cleango test ./cmd/...passesconductor server start):schedule create -n hello -c "0 0 * ? * *" -w hello_world→ succeeds (was failing as "already exists" before the duplicate-detection fix)schedule list→ shows the new scheduleschedule get hello→ returns full JSONschedule update -n hello -c "0 0 12 ? * *" -w hello_world→ updates cronschedule update -n nope ...→ "no such schedule by name nope"schedule create -n hello ...→ correctly errors as duplicateschedule delete hello -y→ "deleted successfully"; subsequentschedule listis emptytest/e2e/schedule.bats) — not run in this PR; needs CI with a live Conductor server🤖 Generated with Claude Code