@odla-ai/chapter 0.47.8 → 0.47.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1579,6 +1579,34 @@ These bite silently — a smoke test won't catch them:
1579
1579
  merge-`PATCH`es only the public role, so it cannot clobber the private profile.
1580
1580
  All take an injectable `fetch` and the vault `clerk_secret_key`.
1581
1581
 
1582
+ ### Multi-site acceptance tests
1583
+
1584
+ `@odla-ai/chapter/testing` exports a schema-validated manifest, scenario planner,
1585
+ public join-contract probe, serial suite runner, and text report formatter.
1586
+ Declare every logical chapter and every authoritative developer runtime in the
1587
+ manifest; runtime identity is separate from Stripe test/live mode.
1588
+
1589
+ - `probeChapterJoinContracts(manifest)` reads deployed health and catalog routes.
1590
+ It compares effective app/chapter/data-environment/runtime health headers with
1591
+ the manifest; missing headers or a legacy `test` runtime are failures, not an
1592
+ inferred match. Chapter's health body remains `{ ok: true }`.
1593
+ It refuses redirects, caps responses at 64 KiB and ten seconds, and reports
1594
+ malformed or unavailable targets independently without retaining raw bodies
1595
+ or provider error messages. It does not create an application or prove payment.
1596
+ - `planChapterAcceptanceMatrix(manifest)` requires test Stripe and literal `dev`
1597
+ runtime/data environments. Test Stripe alone cannot authorize production data.
1598
+ - `runChapterAcceptanceSuite(manifest, suite, executor)` runs the actual adapter
1599
+ supplied by the host. A provider adapter must execute the deployed journey,
1600
+ assert resulting application and provider state, and supply an immutable
1601
+ deployment version. Returning assertion labels from a mock proves only the
1602
+ runner contract, never a real user flow.
1603
+ - Provider cleanup is mandatory, including after a failed attempt. Unconfirmed
1604
+ cleanup stops further attempts; remaining cases fail with
1605
+ `not_run_cleanup_failed`. Reconcile the exact test resources before rerunning.
1606
+ - Evidence is copied only after validation. Extra fields and rejected payloads
1607
+ are discarded; check labels must contain no personal data, and references must
1608
+ be opaque provider IDs or digests, never client secrets or raw provider objects.
1609
+
1582
1610
  ### Verify from the types, not this file
1583
1611
 
1584
1612
  At several releases a day, prose lags. Treat this README as intent and verify the
package/dist/index.cjs CHANGED
@@ -681,6 +681,29 @@ var stripeEventReceiptsEntity = {
681
681
  receivedAt: attr4("number", { indexed: true })
682
682
  }
683
683
  };
684
+ var subscriptionCheckoutIntentsEntity = {
685
+ attrs: {
686
+ id: attr4("string", { unique: true, indexed: true }),
687
+ applicationId: attr4("string", { unique: true, indexed: true }),
688
+ appId: attr4("string", { indexed: true }),
689
+ chapterId: attr4("string", { indexed: true }),
690
+ environment: attr4("string", { indexed: true }),
691
+ runtime: attr4("string", { indexed: true, optional: true }),
692
+ groupId: attr4("string", { indexed: true }),
693
+ tierId: attr4("string", { indexed: true }),
694
+ priceId: attr4("string", { indexed: true }),
695
+ priceCents: attr4("number"),
696
+ currency: attr4("string", { indexed: true }),
697
+ interval: attr4("string", { indexed: true }),
698
+ purchaserEmailNormalized: attr4("string", { indexed: true }),
699
+ requestedCustomerId: attr4("string", { indexed: true, optional: true }),
700
+ providerCustomerId: attr4("string", { indexed: true, optional: true }),
701
+ providerSubscriptionId: attr4("string", { unique: true, indexed: true, optional: true }),
702
+ status: attr4("string", { indexed: true }),
703
+ createdAt: attr4("number", { indexed: true }),
704
+ updatedAt: attr4("number", { indexed: true })
705
+ }
706
+ };
684
707
 
685
708
  // src/schema-network-person.ts
686
709
  var string = (flags = {}) => ({
@@ -1011,6 +1034,7 @@ function chapterDb(mode, auth, includeNetworkNotes = false, application = resolv
1011
1034
  entities.meetings = meetings;
1012
1035
  entities.emailLog = emailLog;
1013
1036
  entities.stripeEventReceipts = stripeEventReceiptsEntity;
1037
+ entities.subscriptionCheckoutIntents = subscriptionCheckoutIntentsEntity;
1014
1038
  entities.admissionGrants = admissionGrantsEntity;
1015
1039
  entities.admissionGrantRevisions = admissionGrantRevisionsEntity;
1016
1040
  entities.giftPurchaseIntents = giftPurchaseIntentsEntity;