Перейти до вмісту

All versions since 34.3.0

34.3.0

  • docs: :wrench: added tech comments
  • docs(scripts): :memo: record partner media Metronome runs across all three accounts (#696)
  • feat(analytics): :sparkles: cache assembled chart responses in the consumer facades (#702)
  • feat(analytics): :sparkles: incremental rollup writer with watermarks, lease, and backfill endpoint (#700)
  • feat(analytics): :sparkles: rollup document schema for booking, link, and API usage time series (#699)
  • feat(analytics): :sparkles: route chart and usage reads to the rollup collections behind a flag (#701)
  • feat(media): env/account CDN folders, asset metadata standard, migration suite (#695)
  • feat(partner): partner media retrieval API with per-hotel metering (#693)
  • fix(analytics): :bug: accept the staging analytics database name in the rollup index script (#705)
  • fix(analytics): :bug: repair grouped-chart group keys, projection copy-paste bugs, and quadratic gap-fill (#698)
  • fix(booking): cap Stripe refunds at the PaymentIntent’s remaining refundable amount (#694)
  • fix(pricing-view): :bug: compare EFFECTIVE currency in the shadow snapshot diff (#697)
  • fix(scripts): :bug: eviction reminder printed prod for staging-target hotels (#706)
  • fix(scripts): :bug: harden media-migration suite from live-run findings (#704)

34.4.0

  • fix(subscription): :white_check_mark: pin PARTNER_MEDIA_API into the platform pricing rate card test

34.5.0

  • feat(checkout): :sparkles: guard checkout against charging more than quoted
  • fix(open-api): :white_check_mark: publish Media in the gRPC OpenAPI test so the 64-bit assertion runs

34.5.1

  • refactor(analytics): :truck: move rollup documents out of the api layer (#708)

35.0.0

  • chore: :fire: removed currences MCP tool
  • chore: :recycle: updated Siteminder password in prod
  • chore: :wrench: added booking sync entried for missing bookings
  • chore: :wrench: replaced with toList()
  • chore: :zap: removed HOTEL_GURU from HotelCodeContext enum
  • chore: :zap: removed HOTEL_LINK_SOLUTIONS from HotelCodeContext enum
  • chore(booking-sync): record the #733 async-wedge bookingSyncEntry recovery scripts (#796)
  • chore(booking): add repair script for misclassified fully-refunded bookings (#785)
  • chore(booking): add the read-only refund triage reports (#821)
  • chore(deps): :arrow_up: bump stripe.version to 33.3.0
  • chore(partner-app): enable DEBUG gRPC logging in the local dev profile (#797)
  • docs: :globe_with_meridians: updated translations
  • docs: :memo: PRD — split the Inventory sales-channel gate from its search projection
  • docs: :memo: updated PRD for improving fetching rates
  • docs: answer PRD Q10 — Option D needs a channel cache first, and should not go first (#744)
  • docs: answer PRD step 7.3 — the index reshaping, designed and measured (#748)
  • docs: answer PRD step C — the gate query, designed and measured (#747)
  • docs: record the deployed hostnames, and how to probe them without fooling yourself (#768)
  • docs: record the pre-D0 pricing baselines for prod and staging (#752)
  • docs: split the OpenAPI Bamboo artifact by the stage that actually produces it (#765)
  • feat(booking): deprecate the Travel Agent booking REST endpoints, and make partner-app able to start (#736)
  • feat(inventory): read rate modifiers from the cached sales channel (#745)
  • feat(mail): reliable email send with persisted-obligation retry outbox (#808)
  • feat(mcp): publish the 509-tool MCP surface as 16 job-shaped toolset endpoints (#775)
  • feat(openapi): disable the SpringDoc runtime endpoints in inventory-app and integrations-app (#767)
  • feat(openapi): generate integrations-app’s API reference at build time (#716)
  • feat(openapi): generate inventory-app’s ten API reference documents at build time (#717)
  • feat(partner): :sparkles: add the Inventory gRPC surface, prices-only (#712)
  • feat(partner): :sparkles: add the Search gRPC surface, move the billable account to metadata, and retire deprecated ScoreSort aliases (#710)
  • feat(partner): :sparkles: conditional content fetch via cache_token and NOT_MODIFIED (#728)
  • feat(partner): :sparkles: enable gRPC server reflection on local and staging (#726)
  • feat(partner): :sparkles: implement the Travel Agent Booking gRPC service (2/3)
  • feat(partner): :sparkles: price deterministically — remove IP and geo from the Partner pricing boundary (#753)
  • feat(partner): :sparkles: publish the Travel Agent Booking gRPC contract (1/3)
  • feat(partner): add account discovery to the gRPC partner API (#783)
  • feat(partner): collapse the rate-calendar cache key to seven bounded components (#754)
  • feat(partner): tune the gRPC transport, and prove the tuning actually applies (#757)
  • feat(pricing-view): :sparkles: serve /inventory, /inventory/list and /inventory/period from the read model (#770)
  • feat(reference): :sparkles: deprecate the reference-data listing endpoints (sunset 2026-10-01)
  • feat(scripts): capture the pre-D0 pricing baseline before the evidence is gone (#751)
  • feat(subscription): add admin-scoped PAYG subscription and usage endpoints
  • feat(webhook): outbox dispatcher, signed curated payloads and generated openapi webhooks reference (#786)
  • fix(async): :bug: bound and expose the shared @Async pool, the partner fan-out, and outbound HTTP
  • fix(booking): bound the whole-PaymentIntent refund guard to actual intent siblings (#809)
  • fix(booking): cancel booking on any successful refund, not only full ones (#805)
  • fix(booking): derive the refund axis from the cumulative ledger, not the last refund (#823)
  • fix(booking): honour the cancellation policy on hotel cancellations (#810)
  • fix(booking): refund the exact captured amount on full cancellations (#784)
  • fix(booking): split the refund axis out of bookingStatus (#811)
  • fix(build): purge jar-less build-cache entries and the remote cache to stop empty-jar installs (#787)
  • fix(cancellation-policy): :bug: rename NINENTY_PERCENT to NINETY_PERCENT (#806)
  • fix(ci): :bug: retry transient registry errors when pushing images
  • fix(computed-property): stop showHotel/images/videos/recognition from partitioning the inventory cache (#794)
  • fix(customization): itinerary advance-days ignored the visitor’s timezone (#177) (#801)
  • fix(IAB-1329): :bug: declare checked MailerSendException on shouldHandleNon2xxResponseCode (#825)
  • fix(inventory): :bug: fan inventory edits out atomically instead of per-document (#741)
  • fix(inventory): exclude DRAFT items from public reads, fix dead descriptions validation (#798)
  • fix(inventory): make address, location and multimedias optional so third parties can create inventory (#779)
  • fix(inventory): media pruning crash, hero images, commission rounding, and OpenAPI operation names (#790)
  • fix(itinerary): :bug: accept the pre-collapse items payload again, deprecated (#737)
  • fix(mcp): scope channel-manager to integrations, move room types to facilities (#776)
  • fix(mcp): thread the visitor ZoneId through the shortened-url MCP tool (#802)
  • fix(partner-grpc): round Search commission to 2 decimals (#793)
  • fix(partner-grpc): use snake_case in Accounts/DestinationLookup error messages (#795)
  • fix(partner): :bug: advance the property content version when content changes (#725)
  • fix(partner): :bug: bill partner search on hotels returned, not the one-unit floor (#709)
  • fix(partner): :bug: register the repositories the Content API made partner-app need (#727)
  • fix(partner): permit grpc.health.v1.Health/Check so the Cloud Run probe can reach it (#769)
  • fix(partner): take refund out of the booking status enum (#824)
  • fix(payment): stop shipping MockSpringBootApplication into deployed images (#764)
  • fix(property): aggregate properties by the status they actually have (#777)
  • fix(property): let the welcome-text editor remove a language, and require English (#780)
  • fix(special-rate): :bug: revive the timezone qualifier and wire up the geo-location one (#738)
  • perf(scripts): :zap: parallelize media migration and make interrupted rows resumable (#713)
  • perf(scripts): :zap: parallelize orphan quarantine (#722)
  • refactor: :recycle: UserLightweight now extends AbstractDto
  • refactor(computed): drop the dead geo parameters from the rate-calendar chain (#756)
  • refactor(inventory): consolidate the inventory write sites behind one seam (PRD step B) (#746)
  • refactor(inventory): remove the two unique indexes that enforce nothing (#749)
  • refactor(partner): :recycle: adopt a Partner protobuf naming convention and enforce it (#711)
  • refactor(pricing-view): :recycle: extract the public inventory-list fan-out and prime the read model (#771)
  • test(booking): pin roomStay date-range boundary behavior (#806) (#804)
  • test(inventory): cover SupplierAggregatePage’s empty-$count handling (#766)
  • test(openapi): close three holes in the spec-generation guards (#718)
  • test(property-aggregate): cover the listener failure paths and un-hide them from the gate (#763)

35.1.0

  • fix: :bug: guard commit-msg hook ANSI colors behind TTY check
  • fix(exchange-rate): :bug: add jakarta.servlet-api dep to exchange-rate-mcp (#828)
  • refactor: invert @Document entities out of published -api modules (91/108) (#829)

35.1.1

Housekeeping release — no user-facing changes.

35.2.0

  • fix(inventory-app): :bug: update ManagedTypeScannerTest counts after @Document eviction (#831)
  • fix(release): :bug: guard release-notes pipeline against an empty commit range (#830)

35.2.1

  • fix(cache): :bug: don’t let a slow L2 Redis at boot abort partner-app startup
  • fix(ci): :bug: retry Go net/http client timeouts in pushImages.bash

35.2.2

Housekeeping release — no user-facing changes.

35.3.0

  • docs(analytics): :memo: raw-retention TTL script and rollup deploy runbook
  • feat(booking-sync): :sparkles: detect paid bookings whose sync entry was never written (#834)
  • fix(metrics): :bug: export the executor meters #733 added but never shipped (#833)
  • fix(pricing-view): :bug: stop concurrent rebuilds silently truncating a hotel’s view

35.3.1

  • docs: :memo: buf and gh are provisioned on both Bamboo agents (#838)
  • fix(booking-sync): :bug: write the outbox row inline instead of on the shared @Async pool (#839)
  • fix(grpc-proto): :bug: make buf lint pass on the Partner proto release path (#837)

35.3.2

Housekeeping release — no user-facing changes.

35.3.3

  • fix(booking): :bug: only adjust local availability for direct inventory (#840)
  • fix(metrics): :bug: read the allow-list from the main properties, not the shadowed test copy

35.4.0

  • chore(logging): :wrench: log the booking fan-out at INFO in prod (#845)
  • chore(mongo): :wrench: finish the HOTEL_GURU -> rate-provider-identifier rename (#841)
  • docs(inventory): :memo: track production $indexStats snapshots as drop-decision evidence (#836)
  • docs(partner): :memo: correct the gRPC startup-probe command
  • feat(sales-channel): :sparkles: drop the embedded rate-modifier copies (PRD Option D, step D1) (#750)
  • feat(security): :lock: expose /actuator/threaddump behind SCOPE_ADMIN on inventory-app (#850)
  • fix: restore CI after PR #829 entity inversion (context wiring + JaCoCo coverage) (#854)
  • fix(846): :bug: correct inverted occupancy check in RatePlanLightweight.isValidOccupancy(Integer) (#848)
  • fix(activity-stream): :bug: write the audit row inline instead of on the shared @Async pool (#844)
  • fix(architecture-tests,inventory-app): :bug: restore CI after plan-688131-JOB1-1377 test failures (#869)
  • fix(architecture-tests): exempt PaymentTransitionResult/RefundHandlingResult’s nested Status enums (#885)
  • fix(architecture-tests): exempt single-sign-on’s deliberate lead/managing-entity access (#886)
  • fix(campaigns-domain): :bug: restore CI after plan-688131-JOB1-1374 JaCoCo gap (#864)
  • fix(cancellation-policy): :bug: migrate NINENTY_PERCENT on every RatePlanRef embed site (#889)
  • fix(checkout,analytics,managing-entity): restore CI after PR #829 test gaps (#859)
  • fix(computed-property,booking): :bug: restore CI after plan-688131-JOB1-1371 test gaps (#862)
  • fix(inventory-app): :bug: restore CI after plan-688131-JOB1-1393 OpenAPI golden drift (#887)
  • fix(invite-domain): restore CI after plan-688131-JOB1-1381 JaCoCo gap (#874)
  • fix(managed-social,scheduler-domain): restore CI after plan-688131-JOB1-1379 test failures (#871)
  • fix(media-migration): :bug: repair dangling media refs, restore wrongly-quarantined assets, finish the root reorganisation (#800)
  • fix(notification-endpoint,message-template,winklinks): :bug: restore CI after PR #829/#834 test gaps (#861)
  • fix(notification,inventory): :bug: restore CI after plan-688131-JOB1-1373 test gaps (#863)
  • fix(partner-app): :bug: poll gRPC health every 60s instead of 5s (#898)
  • fix(partner-grpc): :bug: restore CI after plan-688131-JOB1-1376 test failures
  • fix(point-of-interest,notification-endpoint): :bug: restore CI after plan-688131-JOB1-1375 JaCoCo gap (#866)
  • fix(pricing-view): :bug: stop filtering pricing data on the pair enabled flag (#894)
  • fix(sales-channel,sellable-item): :bug: restore CI after PR #829/#750 gaps (#856)
  • fix(sentry): :bug: drop the traces sampler bean and halve sampling to 0.05 (#900)
  • fix(task-executor): :bug: isolate AI work and MVC dispatch from the shared @Async pool (#847)
  • fix(user): :bug: exclude UserReportDataSource from UserServiceIntegrationTest’s component scan (#853)
  • refactor(booking,channel-manager): retype ChannelManagerCommunicator to BookingLightweight (#880)
  • refactor(booking): extract BookingMapper ahead of the entity move (#883)
  • refactor(booking): move Booking.java out of booking-api (final entity, ArchUnit migration) (#884)
  • refactor(booking): narrow booking-api service interfaces off raw Booking (#882)
  • refactor(booking): narrow BookingConsumerService#findById to BookingLightweight (#881)
  • refactor(event-listener): :recycle: return void from every @EventListener (#843)
  • refactor(geo-name): move geo-name entities out of geo-name-api (#879)
  • refactor(inventory,computed): collapse InventoryAggregate/InventorySupplierAggregate onto their Lightweight siblings (#877)
  • refactor(inventory,property-aggregate): two-step-fetch InventoryAggregate hotel data (#873)
  • refactor(lead): move the GooglePlaceLead entity out of lead-api (94 of 108) (#870)
  • refactor(managing-entity): move the ManagingEntity entity out of managing-entity-api (93 of 108) (#867)
  • refactor(property-aggregate): move PropertyAggregate entity out of property-aggregate-api (#878)
  • refactor(sales-channel): :recycle: move the SalesChannel entity out of sales-channel-api (92 of 108) (#860)
  • test(api): restore JaCoCo coverage in 12 -api modules after the entity inversion (#829) (#842)

35.5.0

  • feat: implement Machine Payments Protocol (MPP) — Stripe SPT + Stripe-processed tempo USDC (#290)
  • feat(accounting): :sparkles: count ledger-time FX quotes so a silent gap is visible (#924)
  • feat(accounting): :sparkles: record the FX quote at ledger time on hotel entries (#914)
  • feat(bamboo): :sparkles: add Bamboo Specs export for WS-SP and WP-MJ (Platform)
  • feat(external-event): :sparkles: typed audit recorder with deferred serialization (#849) (#903)
  • fix(accounting): :bug: reverse refunds TO a target so a second settlement cannot double-reverse (#919)
  • fix(api): :bug: correct the day-of-week on the taxonomy and booking Sunset headers (#918)
  • fix(booking): :bug: add the #819 refund mislabelling repair script (#906)
  • fix(booking): :bug: pay the net on partially refunded bookings instead of dropping them (#913)
  • fix(booking): :bug: reverse the beneficiary ledger for Stripe-side refunds (#910)
  • fix(itinerary): :bug: accept a multi-entry items using the first entry, and tell the caller it is retiring (#897)
  • fix(itinerary): :bug: answer an unreadable request body with an actionable 400, not a 500 (#897)
  • fix(logging): :bug: log the channel-manager sync path in the app that actually runs it
  • fix(partner): write proto release notes for integrators, not the commit log (#908)
  • fix(scheduler): :bug: register the booking funds-available job and the guards that make it safe (#911)
  • perf(channel-manager): :zap: cache JAXBContext, gate CXF logging, batch cache eviction (#849) (#902)
  • test(channel-manager): :white_check_mark: cover JAXBException branch in TravelclickParserServiceImpl (#907)
  • test(google-hotel-web): :white_check_mark: cover recorder-failure and no-properties branches (#909)

35.6.0

  • feat(#938): :sparkles: backfill the default policy onto properties that declared none (#960)
  • feat(#957): :sparkles: enforce urlName uniqueness with a partial unique index (#961)
  • feat(#957): :sparkles: rename the duplicate side of each urlName collision (#969)
  • feat(accounting): admin ledger query API and account endpoints (#925, #926)
  • feat(cache): :sparkles: flip cache.l2.batched-broadcast to true now the two-step gate is satisfied (#965)
  • feat(media-migration): :sparkles: add 34_ to delete FAILED orphan placeholders 33_ structurally cannot reach (#966)
  • feat(pricing-view): :sparkles: serve the single-pair surfaces from the read model (#772)
  • feat(property): migrate property.socials to managingEntity.onlinePresence
  • feat(sentry): :sparkles: capture WARN as Sentry events, after removing the two sources that made it unaffordable (#964)
  • feat(sentry): :sparkles: file new Sentry groups as GitHub issues daily (#968)
  • fix(#938): :bug: guard PropertyPolicy dereference on the public inventory path (#954)
  • fix(#948): :bug: marshal SOAP response types that lack @XmlRootElement (#963)
  • fix(#955): wire up propertyAggregate reconciliation + drift repair scripts
  • fix(geo-name): :bug: make the City and GeoName urlName indexes actually unique (#970)
  • fix(inventory-app): restore inventory-app test compilation (broken on develop)
  • fix(media-migration): :bug: a root-id 404 in 34_ must not imply the asset is gone (#967)

35.7.0

  • feat(927): :sparkles: expose posting-group and booking money-trail lookups (#972)
  • fix(build-cache): :bug: force buf-breaking-check to run on cache hits (#976)
  • fix(build-cache): :bug: force write-partner-openapi to run on cache hits (#974)
  • fix(green-index): :bug: preserve lastUpdate in prepareAnswerForDisplay (#971)
  • fix(property-aggregate): :bug: add backfill script for drifted images/videos
  • fix(property-aggregate): :bug: narrow media backfill script to images only

35.7.1

  • fix(927): :bug: re-record payment OpenAPI golden for postingGroupId
  • fix(996): :bug: fix ClassNotFoundException in open-api-grpc exec:java on cache restore (#997)
  • refactor: :recycle: remove TRAVELIKO and RESAVENUE from HotelCodeContext (#994)

36.0.0 Latest

  • chore(payment): :wrench: declare fee-model per environment so each can be cut over separately (#1062)
  • chore(payment): :wrench: flip fee-model to Stripe pass-through in local + staging
  • feat(#1004): :sparkles: add BookingFeeModel flag, stamp it on bookings, gate the TripPay waterfall step (#1026)
  • feat(#1005): :sparkles: acquiring-fee state, multi-room apportioning and capture event (#1034)
  • feat(#1007): :sparkles: debit Stripe acquiring and refund fees to the hotel ledger (#1039)
  • feat(#1008): :sparkles: expose feeModel/acquiringFee/refundFee on BookingLightweight, LedgerBalanceResponse.withdrawable, property email Stripe fee rows
  • feat(pricing-view): :sparkles: add validated SHADOW gate reader (#1000)
  • feat(WINK-CLI): :sparkles: add OAuth2 device authorization grant (RFC 8628) to SSO (#1013)
  • fix: :bug: align isempty semantics across StateMongoQueryHelper overloads (#1063)
  • fix(#1030): :bug: route the wink-cli client seeding through a published service (#1055)
  • fix(#876): :bug: charge.updated webhook + acquiring-fee reconciliation sweep (#1036)
  • fix(channel-manager-d-edge): :bug: lazily initialize RoomElement collections + jacoco gate on 6 modules (#1044)
  • fix(channel-manager-exely): :bug: restub ExelyServiceIntegrationTest for #1021’s findRatePlansForRoomType (#1050)
  • fix(channel-manager-rate-tiger): :bug: correct booking-sync NPE and validation bugs found while adding jacoco coverage on 6 modules
  • fix(channel-manager,places,shortened-url,property): :bug: correct 4 production bugs found while adding jacoco coverage (#1037)
  • fix(channel-manager,special-rate,computed): :bug: correct booking-sync success-flag, card-payment lookup, and warning-NPE bugs found while adding jacoco coverage
  • fix(channel-manager): :bug: correct swapped rate modifiers and travelclick NPE guard (#1033)
  • fix(checkout,channel-manager,computed,web-shared): :bug: correct pricing-multiplier, booking-sync success-flag, duplicate-key, and equals bugs found while adding jacoco coverage (#1046)
  • fix(inventory-app): change pending stripe fee copy to “pending” (#1067)
  • fix(lookup): :bug: build the local-name lookup entry from localName, not name (#1035)
  • fix(mcp): :bug: aggregate tool specifications for grouped endpoints (#1054)
  • fix(mcp): :bug: include workflow prerequisites in grouped toolsets (#1066)
  • fix(mcp): :bug: preserve authentication in grouped tool calls (#1070)
  • fix(media,winklinks): :bug: correct secure-flag and inverted oEmbed-valid bugs found while adding jacoco coverage (#1045)
  • fix(payment,managed-social,computed): :bug: correct wrong-field display, date-dependent validation, and page/size default bugs found while adding jacoco coverage (#1041)
  • fix(pricing-view): make ON-mode fallback coverage-aware, not just empty-aware (#1072)
  • fix(report): add refundState and lifecycleStatus columns to the booking CSV export (#1069)
  • fix(stripe-api,computed-api): :bug: correct status-transitions, shipping-address NPE, and cheapest-item fallback bugs found while adding jacoco coverage on 3 modules
  • fix(web-shared): :bug: drop printAllRequestHeaders from WARN to DEBUG (#1002)
  • perf(channel-manager): batch per-row master-rate lookups across all four ARI handlers (#1017)
  • refactor(channel-manager): :recycle: address code review on the ARI batching (#1021)
  • refactor(sso): :recycle: route DCR client registration through RegisteredClientService (#1057)
  • test(jacoco): :white_check_mark: wave0 enable coverage gate on 31 modules already at 80%+ (#998)
  • test(jacoco): :white_check_mark: wave0-step3 enable coverage gate on 6 zero-instruction modules (#999)
  • test(jacoco): enable coverage gate on ai-property (#1060)
  • test(jacoco): wave1 quick-wins — enable coverage gate on 6 modules (#1001)
  • test(jacoco): wave1 step2 — enable coverage gate on 6 more modules (#1003)
  • test(jacoco): wave1 step3 — enable coverage gate on 6 more modules (#1012)
  • test(jacoco): wave1 step4 — enable coverage gate on 6 more modules + fix jacoco-check agents bug (#1014)
  • test(jacoco): wave1 step5 — enable coverage gate on 6 more modules (#1015)
  • test(jacoco): wave1 step6 — enable coverage gate on 6 more modules (#1020)
  • test(jacoco): wave1 step7 — enable coverage gate on final 4 named quick-wins modules (#1022)
  • test(jacoco): wave2 step1 — enable coverage gate on 6 more modules (#1025)
  • test(jacoco): wave2 step2 — enable coverage gate on 6 more modules (#1027)
  • test(jacoco): wave2 step3 — enable coverage gate on 6 more modules (#1029)
  • test(jacoco): wave2 step4 — enable coverage gate on 6 more modules (#1031)
  • test(jacoco): wave3 final step — enable coverage gate on datasource-mongodb-utils (#1061)
  • test(jacoco): wave3 step1 — enable coverage gate on 6 more modules (#1051)
  • test(jacoco): wave3 step2 — enable coverage gate on 6 more modules (#1052)
  • test(jacoco): wave3 step3 — enable coverage gate on 3 more modules (#1053)
  • test(jacoco): wave3 step4 — enable coverage gate on 2 more modules (#1056)