All notable changes to this project will be documented in this file.
[0.13.0] - 2026-10-14
๐ Bug Fixes
(release) GitHub release notes and changelog use the new version tag
๐ผ Other
[JEEVES-0] chore(deps): jeeves 0.7.0 and dependency updates
@karmaniverous/jeeves 0.6.0 -> 0.7.0 (exact) in core, service, openclaw
all other dependencies to latest within peer constraints; typescript
held at ^6.0.3 (typescript-eslint 8.71.2 peers typescript <6.1.0);
happy-dom 20 -> 21
plugin tests: fetchJson now passes its default timeout signal (jeeves#119)
[JEEVES-0] fix: no default launcher timeout, trigger status codes, release notes
core: a manifest without timeout_seconds means no timeout; remove
DEFAULT_LAUNCHER_TIMEOUT_MS (#119)
service: typed scheduler errors; POST /jobs/:id/run returns 404/409/500;
CLI trigger exits 1 on a non-OK response (#118)
openclaw: runner_trigger uses a 30-minute client timeout (jeeves 0.7.0
fetchJson defaults to 2 minutes; the route waits for the job)
release-it: releaseNotes use git-cliff --unreleased
(karmaniverous/npm-package-template-ts#30)
Closes #118
Closes #119
[JEEVES-0] fix: address PR #121 review
CLI trigger reads the body as text so a non-JSON error still reports
the HTTP status (adds 502 test)
docs: no-timeout applies to script jobs; session jobs keep the
5-minute session default
Updated core
[0.12.0] - 2026-10-13
๐ผ Other
[116] feat: sync-jobs from jeeves-scripts list --json; shared manifest mapping in runner-core
core: pure manifestEntryToJob mapping, list --json schemas, launcher path
normalisation (DD#61, DD#62, DD#70); scriptsDir config, jobsDir deprecated (DD#64)
core: update schema built from a defaults-free base so omitted fields stay
unchanged on PATCH (#114, DD#75)
service: sync-jobs --scripts-dir/--dry-run/--reset-enabled/--prune; enabled set
on insert only with drift report (#103, DD#65); manifest schedule applied and
reverts reported (DD#66); prerequisite informational and printed on add (DD#76);
orphans disabled only with --prune, never deleted (DD#69); fatal list failures
write nothing (DD#63); single transaction
Refs #116, #103, #114
[116] fix: compare path scripts after normalisation so equivalent launcher paths are not rewritten (DD#70)
[116] fix: pass the release tag to git-cliff so releases are not filed under [unreleased]
Refs #115
[116] fix: record and alert scheduled runs skipped at maxConcurrency (no retry)
A scheduled fire that hits maxConcurrency now writes a runs row
(status skipped, error 'max_concurrency: n/max running (...)') and alerts the
job's on_failure, falling back to notifications.defaultOnFailure. Retry is
deferred (DD#73).
Refs #113
[116] feat!: remove init-scripts command
BREAKING CHANGE: jeeves-runner init-scripts is removed (no stub). New script
projects use npx @karmaniverous/jeeves-scripts-core init.
[116] feat: 10s default timeout for launcher jobs; review fixes
core: DEFAULT_LAUNCHER_TIMEOUT_MS (10s) for manifests without
timeout_seconds, applied on insert only (DD#71)
docs: stop recommending a tsx runners entry; generic runners example;
document the 10s default
tests: exact --dry-run report output; list --json timeout is fatal;
default timeout on insert only
Refs #116
[116] feat: defaultOnFailure/defaultOnSuccess as per-job fallbacks; SOLID/DRY pass
scheduler: one resolveChannels helper; job result alerts and #113 skip
alerts fall back to notifications.defaultOnFailure/defaultOnSuccess (DD#77)
core: mapping reports the fields a manifest specifies (JobField,
OPTIONAL_JOB_KEYS, specifiedJobFields) so every consumer gets
omitted-means-unchanged
service: one toDesiredJob row builder for both sync sources; recordSkip and
errorMessage helpers; runSyncCommand returns an exit code (testable)
tests: in-process sync-command suite incl. real-launcher end to end;
deterministic #113 tests; channel fallback; legacy validation and I/O
errors; transaction rollback; report labels; CLI flag wiring end to end
(replaces --help string test)
docs: fallback semantics in README, configuration guide and skill
Refs #116
[116] fix: address Copilot review on #117
sync: orphan detection uses every manifested id, so an entry skipped for
an invalid schedule is never pruned
core: explicit timeout_seconds: null means no timeout; only an absent key
gets the 10s default
legacy sync: unreadable jobs dir counts as a skip
scheduler: failure alerts (#113 skip and startup) catch and log
notifier errors; alert helpers moved to scheduler/alerts.ts
tests: typed output mock; split oversized test files (sync-scripts,
sync-orphans, run-scripts-list, sync-jobs.cli, job-routes.fields) with
a shared scripts-sync harness; regression tests for each fix
[104] fix: tests and typecheck read source, not dist
Service and openclaw vitest configs alias, and tsconfigs path-map,
@karmaniverous/jeeves-runner-core to packages/core/src, so typecheck and
tests pass on a clean checkout with no dist/. The rollup TS and dts
plugins override paths so the build still types against built core and
keeps it external. CLI tests run the CLI from source via tsx, and the
service test script no longer builds first.
Closes #112
[104] fix(release): update root package-lock in after:bump hook
[91-96] docs: sync guides, README, and plugin manifest with 0.10.1 changes
[91-96] fix: prevent reconcile retry loop for never-firing schedules
Store schedule string for failed registrations so reconcile only
retries when the schedule actually changes. Clean up schedule strings
for disabled/deleted never-firing jobs.
[77] [89] fix: guard JSON.parse for job env/args with try/catch
Malformed JSON in the env or args DB columns would crash the scheduler.
Wrap parsing in try/catch with a warn-level log. Job proceeds without
the malformed env/args rather than failing to start.
[87] feat: add jobsDir config field and sync-jobs command (#87)
Add optional jobsDir field to runnerConfigSchema for specifying job
definition file locations. Add sync-jobs CLI command that reads JSON
files from the jobs directory and upserts job definitions into the
SQLite database with schedule validation.
Replace nested gateway.url/gateway.tokenPath with flat gatewayUrl/gatewayApiKey.
Replace log.level/log.file with logging.level/logging.file.
Add backward-compat preprocess transform for old config shape.
gatewayApiKey is a direct string value (no more file indirection via tokenPath).
Add npm publish safety net (.npmignore + gitignore *.local)
Move changelog generation to after:bump hook
Migrate changelog from auto-changelog to git-cliff (#75)
Bump @karmaniverous/jeeves to ^0.5.10
Apply minor/patch dependency updates via ncu
Standardize all packages to rollup with TS config
Release @karmaniverous/jeeves-runner v0.9.9
[0.9.8] - 2026-05-03
๐ผ Other
Updated jeeves-core
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.8
[0.9.7] - 2026-04-22
๐ผ Other
Updated jeeves core
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.7
[0.9.6] - 2026-04-15
๐ผ Other
Updated jeeves-core
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.6
[0.9.5] - 2026-04-08
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.5
[0.9.4] - 2026-04-05
๐ผ Other
Unhoisted jeeves
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.4
[0.9.3] - 2026-04-05
๐ผ Other
Hoisted jeeves
Removed knip from packages
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.3
[0.9.2] - 2026-04-05
๐ Bug Fixes
Resolve runner version at runtime instead of build time
๐ผ Other
[65] fix: remove redundant replace plugin from runner rollup config
[67] fix: consume core importMetaUrl in plugin CLI, bump @karmaniverous/jeeves to ^0.5.4
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.2
[0.9.1] - 2026-04-05
โ๏ธ Miscellaneous Tasks
Update dependencies, bump @karmaniverous/jeeves to ^0.5.3
Release @karmaniverous/jeeves-runner v0.9.1
[0.9.0] - 2026-04-03
๐ Features
Bump @karmaniverous/jeeves to ^0.5.1
Bump @karmaniverous/jeeves to ^0.5.1
๐ Bug Fixes
Resolve all build/docs warnings
๐ Refactor
Remove hoisted script utilities from runner
Adopt core v0.5.1 APIs across runner and plugin
Extract shared scheduler test helpers and deduplicate constants
Adopt core v0.5.1 APIs across runner and plugin
Extract shared scheduler test helpers and deduplicate constants
๐ Documentation
Update skill, guides, and tests for v0.9.0 core adoption
Update skill, guides, and tests for v0.9.0 core adoption
๐งช Testing
Close coverage gaps for v0.9.0 core adoption
Close coverage gaps for v0.9.0 core adoption
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.9.0
[0.8.3] - 2026-03-31
๐ผ Other
[CORE-046] chore(core): integrate 0.4.6 init fix
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.8.3
[0.8.2] - 2026-03-30
๐ Bug Fixes
(core) Integrate descriptor run callback
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.8.2
[0.8.1] - 2026-03-30
๐ Bug Fixes
(service) Correct startCommand path doubling in descriptor
โ๏ธ Miscellaneous Tasks
Release @karmaniverous/jeeves-runner v0.8.1
[0.8.0] - 2026-03-30
๐ Features
(service) Implement v0.8.0 Phase 1 foundation tasks\n\nP1.1: Config path migration - migrateConfig() function with auto-migration\n from legacy flat config to nested directory layout (#42)\nP1.2: Bind address - replace hardcoded 127.0.0.1 default with\n DEFAULT_BIND_ADDRESS from @karmaniverous/jeeves (#42)\nP1.3: Version reporting fix - inject version at build time via\n @rollup/plugin-replace instead of runtime package.json reads (#39, #26)\nP1.4: Session executor validation - added comprehensive tests verifying\n type='session' flows correctly through cron-registry -> scheduler ->\n session-executor for both manual triggers and scheduled fires (#43)\nP1.5: RRStack reconciliation fix - track next fire times in cron-registry\n and re-register jobs whose fire time is in the past during\n reconciliation, preventing stale timers after failed re-arms (#44)\nP1.6: Script utilities hoist - copied and genericized fs-utils, shell,\n run-script, runner-client, google-auth, spawn-worker, and\n slack-workspace from jeeves-runner-scripts into client/ (#49)\n\nAlso fixes pre-existing TSDoc lint warnings in executor.ts.
Implement v0.8.0 Phase 2 โ descriptor + independent plugin work
Implement v0.8.0 Phase 3 โ factory consumers
(service) Add init-scripts CLI command
๐ Bug Fixes
(service) Resolve TSDoc warnings in google-auth
Require Node >=22 (node:sqlite), skip Node 20 in CI
๐ Refactor
(service) Remove redundant version prop from route/server deps