Lewati ke konten

Changelog

Version 32.0.0

  • chore: disable automatic claude-code-review workflow (#517)
  • chore(mongo): single combined Initiative D migration (run-once) (#626)
  • chore(scripts): :wrench: shut down local redis in stopServices
  • docs: :memo: added some custom agents
  • docs: :memo: updated banner.txt
  • docs: :memo: updated claude
  • docs(webhook): add AsyncAPI 3.0 spec for the outbound webhook contract (Initiative C) (#617)
  • feat: add-on sub-resource endpoints for six inventory types (#635)
  • feat(api-usage): weighted hotel-day metering for the Partner API (#631)
  • feat(billing): pay-as-you-go platform billing via Metronome (#641)
  • feat(cache): optional L2 (Redis/Memorystore) tier behind L1 Caffeine (#633)
  • feat(computed): add refundableUntilDays to RoomTypeBestPriceForDateRange (#629)
  • feat(dto): :sparkles: add optimistic-locking version to AbstractDto and wire If-Match
  • feat(dto): add Lightweight DTOs for 7 more entities (batch 2) (#622)
  • feat(dto): add Lightweight DTOs for 8 entities lacking them (batch 1) (#621)
  • feat(inventory): add dedicated active-flag PATCH endpoint per hub
  • feat(inventory): draft-create + per-section PATCH hub endpoints for 7 inventory types (#627)
  • feat(lookup): Atlas Search autocomplete, remove lookup cache, fix public-endpoint ReDoS (#639)
  • feat(openapi): document Page responses as the pagination envelope
  • feat(payment): :sparkles: reconcile Stripe refunds whose settlement webhook never arrived (#638)
  • feat(rate-limit): per-user Redis token-bucket rate limiter for the Partner API (#634)
  • feat(rate): cache daily rates per RateKey with precise + prefix eviction (#630)
  • feat(webhook): add schemaVersion to the webhook delivery envelope (Initiative C foundation) (#613)
  • fix(api-usage-subscription): restore compile-scope cache-api/events-command-gateway deps (#607)
  • fix(booking): :bug: settle Stripe refunds that are created as pending (#637)
  • fix(cache): :bug: exclude Redis autoconfigs that break with two connection factories
  • fix(integrations-app): bundle netty-resolver-dns-native-macos for local reactor-netty
  • fix(mail): eliminate partner-app/integrations-app pdf boot crash; split booking/external-event mail listeners (#628)
  • fix(module-boundary): fix 2 remaining MasterRate leaks found by independent review
  • fix(module-boundary): fix remaining MasterRate test fixtures surfaced by full-reactor sweep
  • fix(module-boundary): fix remaining MasterRate test/consumer fixtures surfaced by full-reactor sweep
  • fix(module-boundary): fix unrelated geo-name compile-scope break, regenerate stale ArchUnit baseline
  • fix(mongo): add missing roomType/guestRoom/review identifier->id migration steps
  • fix(security): un-break MCP OAuth for browser clients — DCR proxy contamination, SSO discovery CORS, session-id exposure (#601)
  • fix(shared-api): :lock: enforce VariableCharge percent/fixedAmount are always non-negative
  • fix(test,master-rate): repair runtime test regressions from event-retype waves + a MasterRate NPE (#620)
  • refactor: :recycle: added a strict monetary amount deserializer everywhere
  • refactor: :recycle: fixing tests and some configs
  • refactor: :recycle: updated Exely daily rate amounts
  • refactor: :wrench: updated index name
  • refactor(architecture-tests): widen ModuleBoundaryTest from review+booking pilot to all of travel.wink (#549)
  • refactor(dto): migrate 4 read-projection Lightweights onto AbstractDto (Initiative A batch 1) (#603)
  • refactor(dto): migrate apex Lightweights onto AbstractDto (batch 3) (#605)
  • refactor(dto): migrate BookingLightweight, GooglePlaceLeadLightweight, ShortenedUrlLightweight onto AbstractDto (batch 2) (#604)
  • refactor(dto): migrate BookingSyncEntryLightweight onto AbstractDto (keep local version) (#608)
  • refactor(dto): migrate InventoryAggregate onto AbstractDto + fix escaped compile breaks (#606)
  • refactor(dto): migrate travel-inventory Lightweight hierarchy onto AbstractDto (BREAKING: identifier→id) (#609)
  • refactor(events,webhook): retype 6 cluster entities’ events to Lightweight — webhook now delivers the DTO (Initiative C) (#614)
  • refactor(events,webhook): retype Property + ManagingEntity events to Lightweight (Initiative C apex) (#616)
  • refactor(events,webhook): retype RatePlan/MasterRate/SalesChannel/SpecialRate events to Lightweight (Initiative C) (#615)
  • refactor(events,webhook): widen BookingLightweight + retype Booking events (Initiative C, final) (#619)
  • refactor(events): retype 12 non-webhook tail entities’ events to Lightweight (Initiative B tail) (#618)
  • refactor(events): retype 7 entities’ event payloads from raw entity to Lightweight (Initiative B wave 1) (#610)
  • refactor(events): retype Attraction + Place event payloads to Lightweight (Initiative B wave 2) (#611)
  • refactor(events): retype Inventory/SalesChannelRequest/Customization/User event payloads to Lightweight (Initiative B wave 3) (#612)
  • refactor(module-boundary): consumer-side repository rerouting — 12 modules gated off foreign repositories (#503)
  • refactor(module-boundary): evict Activity entity from Consumer service interfaces (#594)
  • refactor(module-boundary): evict AddOn entity, widening AddOnLightweight for write-path parity (#597)
  • refactor(module-boundary): evict Attraction entity from Consumer service interfaces (#595)
  • refactor(module-boundary): evict Booking entity from BookingConsumerService (#585)
  • refactor(module-boundary): evict BookingSyncEntry entity from Consumer/Publisher interfaces (#581)
  • refactor(module-boundary): evict CancellationPolicy entity from Consumer/Publisher interfaces (#583)
  • refactor(module-boundary): evict Customization entity from CustomizationConsumerService (#574)
  • refactor(module-boundary): evict DynamicList entity from DynamicListConsumerService (PRD Phase 3, entity #5) (#562)
  • refactor(module-boundary): evict GooglePlaceLead entity from Consumer/Publisher interfaces (#580)
  • refactor(module-boundary): evict Inventory entity from cross-domain interfaces (Phase 3) (#575)
  • refactor(module-boundary): evict InventoryMap entity from InventoryMapConsumerService (PRD Phase 3, entity #12) (#569)
  • refactor(module-boundary): evict Lookup entity from lookup-api (PRD Phase 3 pilot) (#559)
  • refactor(module-boundary): evict ManagedSocialPost entity from Consumer/Publisher interfaces (#584)
  • refactor(module-boundary): evict ManagingEntity from Consumer/Publisher interfaces (phase 1) (#578)
  • refactor(module-boundary): evict MeetingRoom entity from Consumer service interfaces (#593)
  • refactor(module-boundary): evict OrganizationView entity from organization-api (PRD Phase 3) (#560)
  • refactor(module-boundary): evict Perk entity from PerkConsumerService (#599)
  • refactor(module-boundary): evict Place entity from Consumer service interfaces (#596)
  • refactor(module-boundary): evict Place/Post/PostRendition entities from PlacesConsumerService (PRD Phase 3, entity #4) (#561)
  • refactor(module-boundary): evict Profile entity from ProfileConsumerService (PRD Phase 3, entity #13) (#570)
  • refactor(module-boundary): evict Property entity from Consumer/Publisher interfaces (Phase 3, final apex entity) (#579)
  • refactor(module-boundary): evict PropertyAggregate entity from Consumer/Publisher service interfaces (#588)
  • refactor(module-boundary): evict Rate entity from cross-domain interfaces (Phase 3) (#576)
  • refactor(module-boundary): evict RatePlan entity from RatePlanConsumerService (#573)
  • refactor(module-boundary): evict Restaurant entity from Consumer service interfaces (#591)
  • refactor(module-boundary): evict RoomType entity from Consumer service interfaces (#592)
  • refactor(module-boundary): evict SalesChannel entity from SalesChannelConsumerService (#572)
  • refactor(module-boundary): evict SellableInventoryUrl entity from SellableInventoryUrlConsumerService (PRD Phase 3, entity #11) (#568)
  • refactor(module-boundary): evict SellableItem entity from SellableItemConsumerService (PRD Phase 3, entity #10) (#567)
  • refactor(module-boundary): evict SellableList entity from SellableListConsumerService (PRD Phase 3, entity #8) (#565)
  • refactor(module-boundary): evict SellableRankedList entity from SellableRankedListConsumerService (PRD Phase 3, entity #7) (#564)
  • refactor(module-boundary): evict SellableSupplierUrl entity from SellableSupplierUrlConsumerService (PRD Phase 3, entity #9) (#566)
  • refactor(module-boundary): evict ShortenedUrl entity from ConsumableShortenedUrlService (#587)
  • refactor(module-boundary): evict ShortenedUrl entity from Publisher/Consumer service interfaces (#586)
  • refactor(module-boundary): evict Spa entity from Consumer service interfaces (#590)
  • refactor(module-boundary): evict SpecialRate entity from SpecialRateConsumerService (PRD Phase 3, entity #15) (#571)
  • refactor(module-boundary): evict SpecialRateBundle entity from SpecialRateBundleConsumerService (PRD Phase 3, entity #6) (#563)
  • refactor(module-boundary): evict StaticList/StaticListItem entities from cross-domain surfaces (#598)
  • refactor(module-boundary): exempt api-usage + cache as shared platform infra in ArchUnit (#554)
  • refactor(module-boundary): expand ManagingEntityConsumerService, gate 13 consumers off ManagingEntityRepository (#522)
  • refactor(module-boundary): expand MasterRateConsumerService, gate 34 consumers off MasterRateRepository (#521)
  • refactor(module-boundary): extract lean booking-consumer module, route notification-endpoint off booking repository (#508)
  • refactor(module-boundary): extract property-aggregate-datasource + consumer/publisher services, gate 9 consumers off PropertyAggregateRepository (#520)
  • refactor(module-boundary): extract property-datasource + consumer/publisher services, gate 24 consumers off PropertyRepository (#519)
  • refactor(module-boundary): extract shortened-url-datasource + consumer/publisher services, gate 6 consumers (#513)
  • refactor(module-boundary): flip dead/leeched cross-family compile-scope deps to runtime (Tier 5 hygiene sweep) (#558)
  • refactor(module-boundary): fold RoomTypeLightweight into AbstractCommonTravelInventoryLightweight hierarchy (#589)
  • refactor(module-boundary): fully gate computed-property-review off review repository via ReviewService (#511)
  • refactor(module-boundary): gate 8 inventory domains off TravelInventoryService via PropertyConsumerService (#542)
  • refactor(module-boundary): gate booking and checkout off ProfileRepository via ConsumerService (#536)
  • refactor(module-boundary): gate campaigns off PlacesPlaceRepository/PostRepository/PostRenditionsRepository via ConsumerService (#537)
  • refactor(module-boundary): gate cancellation-policy off CancellationPolicyRepository via CancellationPolicyConsumerService (#532)
  • refactor(module-boundary): gate channel-manager cluster off booking repository via consumer + new publisher service (#512)
  • refactor(module-boundary): gate channel-manager-internal off OrganizationViewRepository via ConsumerService (#535)
  • refactor(module-boundary): gate check-list off GreenIndexAnswerRepository via ConsumerService (#534)
  • refactor(module-boundary): gate computed-curated/computed-grid off StaticListRepository via full boundary closure (#540)
  • refactor(module-boundary): gate customization off raw CustomizationRepository injection (#528)
  • refactor(module-boundary): gate inventory-content cluster (8 domains) off raw repository injection (#523)
  • refactor(module-boundary): gate lookup-web off CityRepository/GeoNameRepository via GeoNameService (#541)
  • refactor(module-boundary): gate master-rate off PerkRepository via PerkConsumerService (#533)
  • refactor(module-boundary): gate notification-endpoint off booking-sync repository via consumer + publisher services (#514)
  • refactor(module-boundary): gate rate-cluster off raw RateRepository injection (#525)
  • refactor(module-boundary): gate registration and inventory-app off GooglePlaceLeadRepository via Consumer/Publisher services (#539)
  • refactor(module-boundary): gate remaining InventoryRepository consumers off raw repository injection (#527)
  • refactor(module-boundary): gate remaining RatePlanRepository consumers off raw repository injection (#531)
  • refactor(module-boundary): gate sales-channel off raw SalesChannelRepository injection (#526)
  • refactor(module-boundary): gate sellable-cluster (8 domains) off raw repository injection (#524)
  • refactor(module-boundary): gate special-rate off raw SpecialRateRepository injection (#529)
  • refactor(module-boundary): gate special-rate-bundle off raw SpecialRateBundleRepository injection (#530)
  • refactor(module-boundary): introduce BookingConsumerService, route caldav off booking repository (#506)
  • refactor(module-boundary): narrow AnalyticsTrackingConsumerService off BookingTimeSeries (#582)
  • refactor(module-boundary): narrow MasterRateConsumerService/RatePublisherService to MasterRateLightweight
  • refactor(module-boundary): publish PropertyTranslationService/AddOnTranslationService into their -api modules (#550)
  • refactor(module-boundary): remove dead CityRepository cross-domain injection from property-domain (#538)
  • refactor(module-boundary): remove dead syndication repo injections from managed-social (#518)
  • refactor(module-boundary): retype channel-manager-rate-gain MasterRate consumers to MasterRateLightweight
  • refactor(module-boundary): retype Inventory.of(MasterRate) and InventoryEventListener’s consumer-service path
  • refactor(module-boundary): retype remaining channel-manager MasterRate consumers
  • refactor(module-boundary): retype remaining computed-rate-core fan-out MasterRate consumers
  • refactor(module-boundary): retype remaining MasterRate leaf consumers to MasterRateLightweight
  • refactor(module-boundary): route 16 cross-domain consumers off RateService onto RatePublisherService (#548)
  • refactor(module-boundary): route 4 cross-domain consumers off CustomizationService onto CustomizationConsumerService (#544)
  • refactor(module-boundary): route activity-stream off user repository onto UserService (#507)
  • refactor(module-boundary): route AddOnContentCreator off AddOnService onto AddOnConsumerService (#546)
  • refactor(module-boundary): route AffiliateController/LeaderboardController off LeaderboardService onto new Consumer/Publisher services (#547)
  • refactor(module-boundary): route booking off CheckoutService onto CheckoutConsumerService (#557)
  • refactor(module-boundary): route booking/checkout/winklinks off GoogleMapsService onto GoogleMapsConsumerService (#555)
  • refactor(module-boundary): route city lookups off CityRepository onto GeoNameService (#515)
  • refactor(module-boundary): route computed-property/managed-social off PropertyService onto PropertyConsumerService (#543)
  • refactor(module-boundary): route ConsumableShortenedUrlServiceImpl off OpenGraphImageGeneratorService onto OpenGraphImageConsumerService (#552)
  • refactor(module-boundary): route managed-social + sellable-inventory-url off customization repository (#505)
  • refactor(module-boundary): route managed-social off property-embeddings-domain via PropertyEmbeddingsConsumerService (#553)
  • refactor(module-boundary): route notification off message-template repository onto MessageTemplateService (#510)
  • refactor(module-boundary): route PartnerLookupServiceImpl off LookupService onto LookupConsumerService (#551)
  • refactor(module-boundary): route rate-check + google-hotel off master-rate repository (#504)
  • refactor(module-boundary): route sellable-inventory-url off inventory repository onto InventoryConsumerService (#509)
  • refactor(module-boundary): route StudioBookingAnalyticsController off BookingService onto BookingConsumerService (#545)
  • refactor(module-boundary): route winklinks/consumer-web/shortened-url off ShareAnalyticsService and AnalyticsTrackingService (#556)
  • refactor(module-boundary): service-boundary enforcement + review pilot (#502)
  • refactor(shared-api): AbstractDto foundation — id wire name + createdDate/lastUpdate (#600)
  • refactor(shared-api): align AbstractDto to id + migrate first 2 Lightweights (Initiative A pilot) (#602)
  • refactor(web): evict *Repository injections + flip 8 non-auth -web modules to api-compile/domain-runtime (#632)
  • refactor(web): Initiative D — evict entities from -web + relocate @JsonView to DTOs (#624)