chore(repo): normalize fork to mirror-only upstream#10
Conversation
Removed: src/middleware/ (33 files), modal-app.py, Dockerfile, live tests, playwright deps. Version 0.3.1 to 0.4.0.
Scraper belongs in acuity-middleware, not the scheduling library. Deprecated since extract-business.ts + middleware wizard steps replaced all scraper functionality. BREAKING: AcuityScraper, createScraperAdapter, scrapeServicesOnce, scrapeAvailabilityOnce removed from @tummycrypt/scheduling-kit/adapters.
- MODULE.bazel: bzlmod config with rules_js 2.9.1, rules_ts 3.8.4, SWC, pnpm 9 - BUILD.bazel: svelte-package build, npm_package, 6 subpackage ts_project targets (core, adapters, payments, reconciliation, lib, testing), vitest, svelte-check typecheck - .bazelrc: build/CI/debug/release configs with disk cache - .bazelversion: pin to 8.1.1 - .npmrc: hoist=false (required by rules_js)
* chore: bump version to 0.5.0 * refactor!: remove acuity-scraper adapter Scraper belongs in acuity-middleware, not the scheduling library. Deprecated since extract-business.ts + middleware wizard steps replaced all scraper functionality. BREAKING: AcuityScraper, createScraperAdapter, scrapeServicesOnce, scrapeAvailabilityOnce removed from @tummycrypt/scheduling-kit/adapters. * build: add Bazel 8 configuration with subpackage targets - MODULE.bazel: bzlmod config with rules_js 2.9.1, rules_ts 3.8.4, SWC, pnpm 9 - BUILD.bazel: svelte-package build, npm_package, 6 subpackage ts_project targets (core, adapters, payments, reconciliation, lib, testing), vitest, svelte-check typecheck - .bazelrc: build/CI/debug/release configs with disk cache - .bazelversion: pin to 8.1.1 - .npmrc: hoist=false (required by rules_js)
build: add Bazel 8 + cleanup for v0.5.0
When payeeEmail is set in VenmoAdapterConfig, the PayPal order creation includes payee.email_address in purchase_units. This routes payments directly to the practitioner's PayPal account without requiring their API credentials. Ref: PayPal "Pay another account" docs
…e-email feat(venmo): payee-email routing for practitioner payments
chore: bump to 0.5.1 (payee-email)
…van#19) * fix(ci): use @Jesssullivan scope for GitHub Packages mirror * feat(venmo): add returnUrl/cancelUrl to experience_context PayPal requires return_url and cancel_url in the Venmo payment source experience_context for proper popup handling. Without them, PayPal may force additional buyer verification loops or block the popup flow. New optional fields on VenmoAdapterConfig: returnUrl, cancelUrl.
* fix(ci): use @Jesssullivan scope for GitHub Packages mirror * feat(venmo): add returnUrl/cancelUrl to experience_context PayPal requires return_url and cancel_url in the Venmo payment source experience_context for proper popup handling. Without them, PayPal may force additional buyer verification loops or block the popup flow. New optional fields on VenmoAdapterConfig: returnUrl, cancelUrl. * chore: bump to 0.5.2 (PayPal return URLs)
…livan#21-Jesssullivan#27) (Jesssullivan#28) New @tummycrypt/scheduling-kit/onboarding subpackage: Interfaces: - CredentialStore: app-provided key-value storage (PG, Redis, etc.) - EncryptionProvider: app-provided encryption (AES, Vault, etc.) - StripeConnectConfig, StripeAccountStatus, WebhookSetupResult types Stripe: - buildStripeAuthorizeUrl() + exchangeStripeCode() — Connect OAuth - getStripeAccountStatus() — account onboarding status - validateStripeKeys() — key validation against Stripe API - createStripeWebhook() + deleteStripeWebhooks() — webhook CRUD PayPal: - validatePayPalCredentials() — OAuth token validation - createPayPalWebhook() — webhook creation Build: - Bazel //src/onboarding target (deps: :core, :payments, effect) - Package.json ./onboarding export Pattern: library defines interfaces + helpers, application provides CredentialStore implementation. Same pattern as HomegrownAdapter's getDb callback — scheduling-kit doesn't know about databases. Closes Jesssullivan#21, Jesssullivan#22, Jesssullivan#23, Jesssullivan#24, Jesssullivan#27. Partial Jesssullivan#25, Jesssullivan#26.
…esssullivan#26) (Jesssullivan#30) - createAdapterFactory(): settings-driven singleton with cache, promise dedup, reset, and disable lifecycle - 21 tests: Stripe OAuth URL, key validation, account status, PayPal credential validation, factory lifecycle (cache, reset, disable, store passthrough) - Updated vitest.config.ts to include onboarding test glob Closes Jesssullivan#25, Jesssullivan#26.
* feat: adapter factory pattern + 21 onboarding tests (Jesssullivan#25, Jesssullivan#26) - createAdapterFactory(): settings-driven singleton with cache, promise dedup, reset, and disable lifecycle - 21 tests: Stripe OAuth URL, key validation, account status, PayPal credential validation, factory lifecycle (cache, reset, disable, store passthrough) - Updated vitest.config.ts to include onboarding test glob Closes Jesssullivan#25, Jesssullivan#26. * chore: strip sourcemaps from npm package (2,711 .map files excluded)
…inc (Jesssullivan#45) * feat(payments)!: converge PaymentCapabilities contract from tinyland-inc Cherry-pick tinyland-inc/main squash (v0.7.0) onto Jesssullivan/main. Keeps Jess's CI/publish workflows and Bazel structure. Bumps all version references to 0.7.0. - PaymentCapabilities, StripeCapability, VenmoCapability types - getDefaultCapabilities() factory - HybridCheckoutDrawer: capabilities prop replaces individual payment props - Cash at Visit structurally removed (cash: false) * fix(ci): skip prepublish scripts in gh packages mirror
…-artifacts build(bazel): publish scheduling-kit from bazel artifact
Replace hardcoded hex CSS with light-dark() for 8 components: skeleton loading shimmer, border colors, scrollbar tracks. Ensures proper dark-mode rendering when consumed by host apps.
* fix(ci): ignore npm scripts when publishing bazel pkg * fix(ci): clean stale bazel publish artifacts on runners
Greptile SummaryThis PR fast-forwards the Confidence Score: 5/5Safe to merge — no functional regressions; all remaining findings are non-blocking P2 suggestions. Version metadata is aligned across all three files (package.json, MODULE.bazel, BUILD.bazel at 0.7.1), the publish blocker is in place, and the validation-only workflow correctly omits any actual publish step. The two P2 findings (unpinned bazelisk, silent undefined on missing packageManager) are hardening improvements that don't affect current correctness. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A([push / PR / release]) --> B{Workflow}
B -->|push or PR| C[CI — test job]
B -->|release:published| G[Release Validation — Fork Mirror]
C --> C1[Clean workspace]
C1 --> C2[check-release-metadata.mjs]
C2 --> C3[pnpm install frozen]
C3 --> C4[TypeScript check\ncontinue-on-error]
C4 --> C5[Lint\ncontinue-on-error]
C5 --> C6[Unit + Integration tests]
C6 --> C7[pnpm build]
C7 --> D[CI — build job\nneeds: test]
D --> D1[check-release-metadata.mjs]
D1 --> D2[pnpm build]
D2 --> D3[publint]
G --> G1[check-release-metadata.mjs]
G1 --> G2[pnpm install frozen]
G2 --> G3[bazelisk build /pkg]
G3 --> G4[npm pack --dry-run\nbazel-bin/pkg]
G4 --> G5[pnpm test:unit]
G5 --> G6[pnpm build]
G6 --> G7[publint]
G7 --> G8([Validation complete\nno publish])
style G8 fill:#d4edda,stroke:#28a745
style G fill:#fff3cd,stroke:#ffc107
Reviews (1): Last reviewed commit: "chore(repo): normalize fork to mirror-on..." | Re-trigger Greptile |
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Validate Bazel package artifact | ||
| run: npx --yes @bazel/bazelisk build //:pkg |
There was a problem hiding this comment.
npx --yes @bazel/bazelisk always resolves to the latest published version of bazelisk. While Bazel itself is pinned (via .bazelversion or MODULE.bazel), a breaking bazelisk release could silently change how Bazel is downloaded or invoked. Pinning the version makes the step reproducible.
| run: npx --yes @bazel/bazelisk build //:pkg | |
| - name: Validate Bazel package artifact | |
| run: npx --yes @bazel/bazelisk@1 build //:pkg |
Or install it as a dev dependency so the lockfile pins it exactly.
|
|
||
| const expectedVersion = packageJson.version; | ||
| const expectedPackageName = packageJson.name; | ||
| const expectedPnpmVersion = packageJson.packageManager?.replace(/^pnpm@/, ''); |
There was a problem hiding this comment.
Silent
undefined when packageManager is absent
If packageManager is missing from package.json, expectedPnpmVersion becomes undefined. The pnpm version check then always fails with a confusing message like expected "undefined", found "9.15.9" rather than calling out the missing field. Consider an explicit guard:
| const expectedPnpmVersion = packageJson.packageManager?.replace(/^pnpm@/, ''); | |
| const expectedPnpmVersion = packageJson.packageManager?.replace(/^pnpm@/, ''); | |
| if (!expectedPnpmVersion) { | |
| throw new Error('packageManager field is missing or not a pnpm version in package.json'); | |
| } |
Summary
Why
The fork should remain a mirror/integration surface, not a second release authority for .
Refs Jesssullivan#57