Skip to content

loobric-server 0.15.0 — batch sync doors

Choose a tag to compare

@sliptonic sliptonic released this 17 Aug 18:40
· 3 commits to master since this release

Added

  • Batch sync doors (docs/BATCH_SYNC.md, grilled 2026-08-17): POST /tool-instance-records/sync and POST /tool-catalog-records/sync — upsert many records in ONE transaction per batch (cap 200). Items compose the existing doors: data (sync lane), asserts (the assert door's shared code path, every guard included), presets (the contribution door: floor + replace-own). Per-item outcomes (created | updated | unchanged | exists | error) in request order; ?include=records opt-in; merge-only — deliberately no snapshot mode. Scopes compose per lane: a sync-only key gets blocked/skipped counts, never a rejected batch. Catalog natural-key matches are exists: no canonical writes, but the client's own section still syncs. One SYNC_BATCH audit row per batch plus the per-entity rows as before.

Changed

  • Same-value asserts are now no-ops on the single-record assert doors (value + unit + actor all matching the stored leaf): re-syncs are idempotent end to end — no source overwrite, no version bump, no audit churn. A different actor's identical value still applies in full, so corroboration stays a recorded provenance claim. This is the release's one behavior change.

Why: a 327-tool CAM library import was ~2,600 requests ≈ 11 minutes against SQLite's single writer even with 8 parallel client workers; through the door it is 3 requests ≈ 4 seconds. Pairs with loobric-cli 1.8.0 (sync_tool_records() / sync_catalog_records()).