@odla-ai/chapter 0.49.0 → 0.50.0

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
@@ -1631,8 +1631,18 @@ These bite silently — a smoke test won't catch them:
1631
1631
  Full renewal/refund/seat lifecycle wiring and live provider journey proof
1632
1632
  remain prerequisites for enabling this adapter in a host.
1633
1633
 
1634
- `drainMembershipEffects` recovers pending provider work and expires unpaid or
1635
- unaccepted seats within one exact configured runtime. Pair its
1634
+ `drainMembershipEffects` recovers pending provider work and cancels unpaid
1635
+ seats within one exact configured runtime. It never refunds an unaccepted
1636
+ seat: a purchased seat waits for its recipient for the whole paid term, and a
1637
+ refund is a super admin's decision on request. Refunding the recipient's own
1638
+ application (`POST /api/admin/applications/:id/refund`) requires a super
1639
+ admin when it carries a gifted seat. On a chapter,
1640
+ `GET /api/admin/applications/:id/named-seat` shows a purchaser's seat and
1641
+ `POST …/named-seat/refund` returns its payment through the signed edge; on the
1642
+ network owner, `membershipAuthorityOperator: { makeDb }` mounts
1643
+ `GET /api/admin/membership-seats` and `POST …/membership-seats/:seatId/refund`
1644
+ over the authority storage. Both refuse anyone but a super admin, and the
1645
+ recipient's own `…/refund` route does the same for a gifted seat. Pair its
1636
1646
  `deliverChapterEffect` callback with `deliverMembershipChapterEffect` and a
1637
1647
  chapter `createMembershipChapterEffectRoute({ sender, secretName, origin,
1638
1648
  readEffect: adapter.readEffect })`. The receiver reloads current network state
@@ -1655,6 +1665,23 @@ These bite silently — a smoke test won't catch them:
1655
1665
  it never sends mail. Confirmed non-delivery permits only the original workflow
1656
1666
  to retry its frozen payload. Non-production recipient redirection still applies.
1657
1667
 
1668
+ The public join config asks the authority, per paid tier, what a founding
1669
+ applicant pays today (`offer-preview`, read-only: nothing is reserved) and
1670
+ exposes it as `tiers[].founding` ({ cohortLabel, dueTodayCents, discountCents,
1671
+ renewalCents, discountDuration }). The placeholder chooser and membership
1672
+ cards show that rate with the list price struck; a site's `renderTiers` should
1673
+ read the same field instead of hard-coding a founding price. The issued offer
1674
+ at checkout remains the only promise.
1675
+
1676
+ On a chapter, a person record with no linked application — someone invited or
1677
+ a candidate — is managed by the chapter's own admins the way the network
1678
+ owner manages it: the record's Invitation tab sets or revokes the local
1679
+ admission decision (`/api/admin/admission-grants`), and its Stage tab moves the
1680
+ person only through the CRM's pre-application stages. Declare those stages
1681
+ ahead of the application statuses in the person pipeline (for example
1682
+ `candidate` and `invited`); an application status is never set by hand, on
1683
+ the chapter or through the leader's delegated lane.
1684
+
1658
1685
  ### Install + scope notes
1659
1686
 
1660
1687
  - **Bootstrap the first admin according to the selected auth source.** Prefer