Skip to content

Releases: xoxd-ai/scheduling-kit

v1.0.0

Choose a tag to compare

@Jesssullivan Jesssullivan released this 15 Oct 11:59
Immutable release. Only release title and notes can be modified.
v1.0.0
e439322

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-svelte 7.3.1 and @sveltejs/package 3, 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 svelte is exactly 5.57.2 (was ^5.0.0). The optional Skeleton
    peers stay exactly 5.0.1.
  • In-house peers removed from package.json. @tummycrypt/tinyland-calendar,
    @tummycrypt/tinyland-caldav-client and @tummycrypt/tinyland-auth-pg are no
    longer declared as (optional) npm peers or dev dependencies. They are still
    loaded lazily at runtime by ./recurrence, ./caldav/./availability and the
    legacy HomegrownAdapter schema fallback; consumers supply them through Bazel
    (see Migration).
  • Bazel module: depends on tummycrypt_tinyland_calendar 1.0.0 and
    tummycrypt_tinyland_caldav_client 1.0.1 (was 0.2.3 each). The TypeScript
    subpackage targets (//:core, //:adapters, //:payments, ...) and the
    aspect_rules_ts / aspect_rules_swc dependencies are removed; //:pkg is the
    artifact and nothing consumed the subpackage targets. //:typecheck is now a
    test suite (bazel test //:typecheck).
  • No SvelteKit. The library never used Kit at runtime; @sveltejs/kit,
    @sveltejs/adapter-auto and the svelte-kit sync step are gone.
    tsconfig.json is standalone and svelte.config.js only sets vitePreprocess.
  • The package is private and is not published to npmjs or GitHub Packages
    (RU8). Earlier npm versions stay where they are.

TypeScript 7 (RU13 / RU13b)

  • svelte-check runs in its TypeScript 7 native mode (--tsgo) with the shared
    site.scaffold patch patches/svelte-check@4.7.6.patch;
    //:svelte_check_canary_test proves a seeded .ts and .svelte error still
    fails the gate.
  • .pnpmfile.cjs (copied from site.scaffold) gives the in-process parsers
    (svelte2tsx, @sveltejs/package, typescript-eslint) the
    @typescript/typescript6 companion. All type checking runs on TypeScript
    7.0.2; the declaration emit of svelte-package runs on the companion until
    upstream supports TypeScript 7.

Migration

  1. 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 (the tinyland-inc registry URL only redirects). Bazel MVS also lifts
    tummycrypt_tinyland_calendar to >= 1.0.0 and
    tummycrypt_tinyland_caldav_client to >= 1.0.1.

  2. Link the package as before:
    npm_link_package(name = "node_modules/@tummycrypt/scheduling-kit", src = "@tummycrypt_scheduling_kit//:pkg").
    drizzle-orm and zod still travel with //:pkg; effect stays a consumer
    dependency (pin it exactly at 4.0.2).

  3. If you use ./recurrence, ./caldav or ./availability, add
    bazel_deps on tummycrypt_tinyland_calendar (and
    tummycrypt_tinyland_caldav_client for CalDAV) and link their //:pkg next to
    the kit. Drop any npm @tummycrypt/* specifiers, dependenciesMeta and
    overrides entries for them.

  4. Consumers that type-check the shipped .d.ts files should use TypeScript
    7.0.2 and Svelte 5.57.2 (the estate manifest in site.scaffold).

v0.12.0

Choose a tag to compare

@Jesssullivan Jesssullivan released this 07 Oct 19:53
Immutable release. Only release title and notes can be modified.
v0.12.0
531029b

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.

  • effect dependency: ^3.19.14 -> 4.0.1.
  • Peers @skeletonlabs/skeleton and @skeletonlabs/skeleton-svelte: ^4.0.0 -> 5.0.1.
  • Context tags are now Context.Service classes. The keys are unchanged: scheduling-kit/DateMatcher, FieldMatcher and ServiceMatcher.
  • withRetry and withTimeout keep 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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 13 Jul 20:46
Immutable release. Only release title and notes can be modified.
9a00ee3

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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 13 Jul 20:37
Immutable release. Only release title and notes can be modified.
46cd46d

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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 03 Jul 16:05
d57eddb

What's Changed

Full Changelog: v0.9.2...v0.10.0

v0.9.2

Choose a tag to compare

@Jesssullivan Jesssullivan released this 14 Jun 12:22
c59c610

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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 11 Jun 17:56
d2b3ddb

Patch release: external-Bzlmod-module packaging fix (#106).

  • svelte-package output anchored to the declared Bazel output tree so //:pkg carries dist/ when this module is built as a bazel_dep external module (previously silently empty)
  • drizzle-orm and zod npm package store deps declared on the packaged js_library so module-graph consumers resolve the kit's runtime imports; effect deliberately 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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 11 Jun 12:54
e0aca24

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 canonical card id; internal adapter naming is unchanged. Consumers
    asserting or matching on stripe in public surfaces must switch to card.
  • Structured PaymentReference codec 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 keep MI confirmation codes must set
    confirmationCodePrefix: 'MI' explicitly.
  • Branded component defaults removed (#102). BookingConfirmation and
    AcuityEmbedHandoff no longer ship business-specific default copy/props;
    pass business props explicitly.
  • defaultPractitionerHandle 'jen' fallback removed (#102). A missing
    practitioner handle now fails with a typed ValidationError instead of
    silently falling back.

MassageIthaca migration checklist

  • set confirmationCodePrefix: 'MI'
  • pass business props explicitly to BookingConfirmation / AcuityEmbedHandoff
  • expect card (not stripe) in public payment surfaces

Added

  • New ./capabilities subpath — extractCapabilities is now
    kit-canonical (#98). Bridge delegation to the kit implementation is pending
    bridge#82.
  • idempotencyKey now deduplicates createBooking (#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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 08 May 17:04
v0.8.0
4072de3

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

Choose a tag to compare

@Jesssullivan Jesssullivan released this 07 May 05:32
dfb922b

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.