Added
- Per-KB sync locking — prevents overlapping syncs to the same Knowledge Base. If a webhook fires while a scheduled sync is running, the duplicate is skipped with a log message.
- Dry-run via API —
POST /sync/{id}?dry_run=truepreviews changes without uploading, returns added/modified/deleted counts. - Environment variable interpolation in
.oikb.yaml—${VAR}and${VAR:-default}syntax in all string values. Enables GitOps workflows where secrets come from the runtime.