Repository navigation
Releases: xoxd-ai/scheduling-kit
Release list
v1.0.0
Major release: the estate RU1 stack uplift, Bazel-only delivery (RU6/RU8) and
in-house dependencies through the Bazel module graph. The runtime API (every
export subpath and its symbols) is unchanged from 0.12.0.
Breaking
- Toolchain: TypeScript 7.0.2, Svelte 5.57.2, Vite 8.3.3, Vitest 5.0.3,
@sveltejs/vite-plugin-svelte7.3.1 and@sveltejs/package3, all exact
except the last (RU5). Effect moves to exactly 4.0.2 (R-C444). Node
^22.17.0 || >=24 <25; the Bazel node toolchain is 22.22.0 and pnpm is
10.13.1. - Peer
svelteis exactly5.57.2(was^5.0.0). The optional Skeleton
peers stay exactly5.0.1. - In-house peers removed from package.json.
@tummycrypt/tinyland-calendar,
@tummycrypt/tinyland-caldav-clientand@tummycrypt/tinyland-auth-pgare no
longer declared as (optional) npm peers or dev dependencies. They are still
loaded lazily at runtime by./recurrence,./caldav/./availabilityand the
legacy HomegrownAdapter schema fallback; consumers supply them through Bazel
(see Migration). - Bazel module: depends on
tummycrypt_tinyland_calendar1.0.0 and
tummycrypt_tinyland_caldav_client1.0.1 (was 0.2.3 each). The TypeScript
subpackage targets (//:core,//:adapters,//:payments, ...) and the
aspect_rules_ts/aspect_rules_swcdependencies are removed;//:pkgis the
artifact and nothing consumed the subpackage targets.//:typecheckis now a
test suite (bazel test //:typecheck). - No SvelteKit. The library never used Kit at runtime;
@sveltejs/kit,
@sveltejs/adapter-autoand thesvelte-kit syncstep are gone.
tsconfig.jsonis standalone andsvelte.config.jsonly setsvitePreprocess. - The package is
privateand is not published to npmjs or GitHub Packages
(RU8). Earlier npm versions stay where they are.
TypeScript 7 (RU13 / RU13b)
svelte-checkruns in its TypeScript 7 native mode (--tsgo) with the shared
site.scaffold patchpatches/svelte-check@4.7.6.patch;
//:svelte_check_canary_testproves a seeded.tsand.svelteerror still
fails the gate..pnpmfile.cjs(copied from site.scaffold) gives the in-process parsers
(svelte2tsx,@sveltejs/package, typescript-eslint) the
@typescript/typescript6companion. All type checking runs on TypeScript
7.0.2; the declaration emit ofsvelte-packageruns on the companion until
upstream supports TypeScript 7.
Migration
-
Re-pin the module:
bazel_dep(name = "tummycrypt_scheduling_kit", version = "1.0.0")
with
https://raw.githubusercontent.com/xoxd-ai/bazel-registry/<commit>as a
registry (thetinyland-incregistry URL only redirects). Bazel MVS also lifts
tummycrypt_tinyland_calendarto >= 1.0.0 and
tummycrypt_tinyland_caldav_clientto >= 1.0.1. -
Link the package as before:
npm_link_package(name = "node_modules/@tummycrypt/scheduling-kit", src = "@tummycrypt_scheduling_kit//:pkg").
drizzle-ormandzodstill travel with//:pkg;effectstays a consumer
dependency (pin it exactly at 4.0.2). -
If you use
./recurrence,./caldavor./availability, add
bazel_deps ontummycrypt_tinyland_calendar(and
tummycrypt_tinyland_caldav_clientfor CalDAV) and link their//:pkgnext to
the kit. Drop any npm@tummycrypt/*specifiers,dependenciesMetaand
overridesentries for them. -
Consumers that type-check the shipped
.d.tsfiles should use TypeScript
7.0.2 and Svelte 5.57.2 (the estate manifest in site.scaffold).
v0.12.0
Moves the kit to Effect 4.0.1 and Skeleton / Skeleton-Svelte 5.0.1, all pinned exactly (RS11). Merged as #129.
BREAKING: Effect types are part of the public API.
effectdependency:^3.19.14->4.0.1.- Peers
@skeletonlabs/skeletonand@skeletonlabs/skeleton-svelte:^4.0.0->5.0.1. - Context tags are now
Context.Serviceclasses. The keys are unchanged:scheduling-kit/DateMatcher,FieldMatcherandServiceMatcher. withRetryandwithTimeoutkeep their behaviour on the Effect 4 Schedule and timeout APIs.
CI: the Integration (GF PostgreSQL) job now runs PostgreSQL unprivileged when the GF runner pod runs as root.
Release truth is this tag and the tummycrypt_scheduling_kit@0.12.0 entry in xoxd-ai/bazel-registry. Nothing is published to npmjs.
v0.11.1
Supersedes v0.11.0 (which missed the BUILD.bazel npm_package version attr; caught by check-release-metadata in CI). Functionally identical: ships the TIN-2764 sprint-1 write-path correctness work (#118, #119).
See v0.11.0 notes for the full changelog: write-time slot validation, practitioner and local-day advisory locks, soft-hold admission gating, real-Postgres concurrency suite.
BREAKING BEHAVIOR: new typed SLOT_TAKEN failure on previously-succeeding createBooking/rescheduleBooking inputs. Supply withTransaction for advisory-lock atomicity.
v0.11.0
Ships the TIN-2764 sprint-1 write-path correctness work (#118, #119).
- Write-time slot validation inside the booking pipeline (createBooking / rescheduleBooking).
- Practitioner + local-day pg advisory transaction locks (FNV-1a keys, padded day span).
- Soft holds now gate admission: active unexpired holds join the occupied set, and softHoldSlot itself is occupancy-checked before payment.
- Real-Postgres concurrency integration suite (two-writer same-slot, soft-hold races, own-hold checkout, overlapping starts).
BREAKING BEHAVIOR: createBooking and rescheduleBooking can now fail with the typed SLOT_TAKEN error on inputs that previously succeeded. Consumers must handle it.
ATOMICITY NOTE: consumers supplying only withDb get validation but not atomicity; supply withTransaction (for example (fn) => db.transaction(fn)) to engage advisory-lock serialization.
v0.10.0
What's Changed
- ci(bazel): enroll scheduling-kit in the shared cache-backed lane (TIN-2110) by Jess Sullivan (@Jesssullivan) in #111
- ci: adopt ci-templates v2.5.0 enrollment gate (TIN-2109) by Jess Sullivan (@Jesssullivan) in #112
- docs: SchedulingAdapter parity matrix — 17 methods, real vs advisory with citing test IDs (prompt-03) by Jess Sullivan (@Jesssullivan) in #113
- feat(adapters): availability substrate — RRULE windows minus CalDAV busy overlay (TIN-1996) by Jess Sullivan (@Jesssullivan) in #114
- test(integration): cassette-backed idempotency replay proof (TIN-1995) by Jess Sullivan (@Jesssullivan) in #115
- feat(kit): availability snapshot freshness attribution (TIN-945 row 3) by Jess Sullivan (@Jesssullivan) in #116
- release: scheduling-kit 0.10.0 — availability substrate (TIN-1996) by Jess Sullivan (@Jesssullivan) in #117
Full Changelog: v0.9.2...v0.10.0
v0.9.2
Release 0.9.2 graduates the fuzzy scorer primitives into scheduling-kit for TIN-2098.
Highlights:
- Adds the public ./fuzzy package surface with ServiceMatcher, DateMatcher, FieldMatcher, confidence scoring, and audit-friendly result shapes.
- Keeps delivery doctrine unchanged: GitHub Packages is the derived package artifact, npmjs remains disabled, and the tinyland Bazel registry is the SSOT for Bzlmod consumers.
- Prepares scheduling-bridge to consume shared fuzzy matchers via bazel_dep instead of owning duplicated scorer code.
Validation:
- package / validate (20) passed
- package / validate (22) passed
- local release metadata, build, publint, and bazel //:pkg checks passed on the release branch
v0.9.1
Patch release: external-Bzlmod-module packaging fix (#106).
- svelte-package output anchored to the declared Bazel output tree so
//:pkgcarriesdist/when this module is built as abazel_depexternal module (previously silently empty) drizzle-ormandzodnpm package store deps declared on the packagedjs_libraryso module-graph consumers resolve the kit's runtime imports;effectdeliberately remains consumer-provided to keep effect identity shared across the package boundary
First consumer: scheduling-bridge resolves tummycrypt_scheduling_kit 0.9.1 from tinyland-inc/bazel-registry and delegates extractCapabilities to @tummycrypt/scheduling-kit/payments (xoxd-ai/scheduling-bridge#82).
v0.9.0
scheduling-kit 0.9.0
First release after the merged train #96 #97 #98 #99 #101 #102.
Breaking / migration required
- Public payment ids normalized
stripe->card(#99). Public payment
surfaces (payment method options, selector ids, booking payloads) now emit
the canonicalcardid; internal adapter naming is unchanged. Consumers
asserting or matching onstripein public surfaces must switch tocard. - Structured
PaymentReferencecodec with typed parse failures (#101,
breaking). Payment references are now a structured codec; malformed input
yields typed parse failures instead of silent passthrough. The legacy string
format is still accepted on parse, so stored references keep working. - Confirmation-code prefix default changed
MI->BK(#102). Adopters
that want to keepMIconfirmation codes must set
confirmationCodePrefix: 'MI'explicitly. - Branded component defaults removed (#102).
BookingConfirmationand
AcuityEmbedHandoffno longer ship business-specific default copy/props;
pass business props explicitly. defaultPractitionerHandle'jen'fallback removed (#102). A missing
practitioner handle now fails with a typedValidationErrorinstead of
silently falling back.
MassageIthaca migration checklist
- set
confirmationCodePrefix: 'MI' - pass business props explicitly to
BookingConfirmation/AcuityEmbedHandoff - expect
card(notstripe) in public payment surfaces
Added
- New
./capabilitiessubpath —extractCapabilitiesis now
kit-canonical (#98). Bridge delegation to the kit implementation is pending
bridge#82. idempotencyKeynow deduplicatescreateBooking(#102). Replayed
create requests with the same key return the original booking instead of
double-booking.
Changed / fixed
- Homegrown adapter maps failures to typed errors instead of
InfrastructureError('UNKNOWN')(#102). - Availability-engine tests are clock-deterministic (#97); unit suite is fully
green. - Docs and toolchain truth normalization (#96): Node 22 LTS devShell, doc
surfaces generated from package truth (pnpm docs:generate).
scheduling-kit v0.8.0
Rename reservation-facing adapter contracts to advisory soft holds, preserving the correctness boundary at final booking write and backend rejection.
scheduling-kit v0.7.8
Release scheduling-kit 0.7.8.
- Decouple HomegrownAdapter from a mandatory tinyland-auth-pg schema authority by supporting injected schema authorities.
- Keep tinyland-auth-pg as optional compatibility surface rather than a required Bzlmod edge.
- Preserve Bazel package artifact validation and release metadata parity.