All versions since 30.31.5
30.31.5
• perf: :zap: fixed test. fixes #189 • perf: :zap: improved booking query by adding 2 more indexes. resolves #190 • refactor: :zap: rewrote rate period db query. resolves #188 • test: :green_heart: fixed test. fixes #188
30.32.0
• chore: :see_no_evil: add .claude local settings to .gitignore • docs: :memo: add CLAUDE.md for Claude Code guidance • feat: :sparkles: complete Exely Channel Manager integration with full API implementation • feat: :sparkles: merging Exely integration to be ready for certification on staging. resolves #156 • feat: :sparkles: starting Exely integration. resolves #156 • fix: :bug: New managing entity now has correct ShortenedUrl. fixes #194 • perf: :zap: improved booking query by simplying group step. resolves #190 • refactor: :_recycle: renamed WinkLinks items created from studio • test: :green_heart: fixed all Exely web tests • test: :green_heart: fixed failing tests due to missing mock bean • test: :green_heart: fixed failing tests due to new rate provider
30.33.0
• feat: :sparkles: add tracking pixel support to Customization • fix: :bug: fixed ShortenedUrl not updating profile picture on managing entity • fix: :rotating_light: fixed compiler error
30.33.1
• docs: :memo: Create comprehensive README.md for developer onboarding • docs: contrib-readme-action has updated readme • refactor: :recycle: a few managing entity types are set to pending approval upon creation
30.33.2
• fix: :bug: fixes subscription provisioning
30.33.3
• test: :green_heart: fixed single IT test
30.34.0
• chore: :globe_with_meridians: added payment-web to translation step • docs: :memo: Add comprehensive JavaDoc to BookingContractCalculator (Phase 7) (#211) • docs: :memo: Add comprehensive JavaDoc to BookingServiceImpl (Phase 6) (#210) • docs: :memo: Add comprehensive JavaDoc to InventoryRepositoryImpl (Phase 9) (#213) • docs: :memo: Add comprehensive JavaDoc to WinkBookingContract (Phase 8) (#212) • docs: :memo: change Create account to Register • docs: :memo: comprehensive JavaDoc for AcquiringInformation (#217) • docs: :memo: comprehensive JavaDoc for Booking domain document (#218) • docs: :memo: comprehensive JavaDoc for BookingItinerary (#222) • docs: :memo: comprehensive JavaDoc for BookingUserSession (#223) • docs: :memo: comprehensive JavaDoc for GeoNameLightweight (#216) • docs: :memo: comprehensive JavaDoc for PublicBooking (#219) • docs: :memo: comprehensive JavaDoc for PublicBookingAncillary (#221) • docs: :memo: comprehensive JavaDoc for PublicRoomStay (#220) • docs: :memo: comprehensive JavaDoc for SimpleMultimedia (#215) • docs: :memo: comprehensive JavaDoc for StayRate (pricing engine) (#226) • docs: :memo: update Git Workflow section to use native git-flow commands • docs: comprehensive JavaDoc for AbstractCommonTravelInventory (#214) • docs: comprehensive JavaDoc for pricing engine classes (#227) • docs: comprehensive JavaDoc for RoomStay (computed) (#224) • fix: :bug: added a more lenient JsonView on TravelAgent • fix: :bug: added support for empty JsonNode values. • fix: :bug: copied messages key/values from TripPay to Wink • fix: :bug: fixed leaderboard query • fix: :bug: saving legalName • fix: resolve Mockito UnnecessaryStubbingException in payment-domain tests • refactor: :globe_with_meridians: re-configured where we put i18n files • refactor: :recycle: added JUnit mockito and Claude skills • refactor: :recycle: added payment-mail-api • refactor: :recycle: added support for 4, 16, 20 and 25 posts per month • refactor: :recycle: improved logic on Booking Itinerary • refactor: :recycle: moved email events to their respective domains • refactor: :recycle: TripPay U.S. is now active • refactor: :wrench: updated OpenApi docs • test: :green_apple: all tests pass • test: :green_apple: fixed test • test: :green_heart: fixed failing test • test: :white_check_mark: add comprehensive InventoryService tests (#208) • test: :white_check_mark: add comprehensive Payment webhook tests (#207) • test: :white_check_mark: Add comprehensive Stripe event listener tests (Phase 5) (#209)
30.34.1
• fix: :bug: Removed default query param values on endpoint
30.35.0
• feat: :sparkles: Add Meta auto-reply for DMs and comments with AI sentiment analysis • feat: :sparkles: Exely self-certification is complete • feat: :sparkles: Integrated social replies with Inventory app. • feat: :sparkles: Merge meta-autoreply feature into develop • fix: :bug: Resolve PR #237 Sentry review comments • fix: :wrench: fixed Facebook and Instagram config • refactor: :wrench: moved Google Hotel endpoin configuration to Integrations • refactor: :wrench: updated Exely’s API password in prod • test: :green_heart: Fixed Exely tests • test: :green_heart: Fixed Meta webhook tests
30.35.1
• fix: :wrench: fixed XML marshalling for Googel Hotel list • test: :green_heart: fixed Googel Hotel endpoint test
30.35.2
• fix: :bug: PropertyAggregate now receives profile updates
30.35.3
• refactor: :recycle: moved online presence to ManagingEntity • test: :green_heart: fixed tests related to Online Presence
30.35.4
• refactor: :recycle: added OpenAI test
30.36.0
• feat: :sparkles: added Anthropic • fix: :bug: connected account-web and booking-contract-web to Inventory app • fix: :bug: guard allMatch with isEmpty check for MongoBulkWriteException • fix: :bug: handle MongoBulkWriteException on idempotent event replays • fix: :bug: rate upsert concurrency and reliability improvements • fix: :recycle: Exely service updates • fix: :recycle: made currency check on Exely conditional • refactor: :arrow_down: downgraded to Spring Boot 4.0.2 • refactor: :recycle: added account-web • refactor: :recycle: finalized CloudBeds self-certification and updated JSON objects • refactor: :recycle: improved CORS config readability • refactor: :recycle: normalized exception return object • refactor: :recycle: now using Selenium for web scraping and jsoup for parsing exclusively • refactor: :recycle: now using Selenium for web scraping. Resolves #241 • refactor: :recycle: updated Social notification email to use a ctaUrl • test: :green_heart: fixed failing test
30.37.0
• feat: :sparkles: added marketing and places to inventory • feat: add campaigns domain with public REST endpoint (#246) • fix: :bug: fixed an error in Yanolja that caused • test: :green_heart: fixed campaign tests
30.38.0
• feat: add mobile OAuth2 refresh token support (#249) • fix: :bug: Turnstyle issue fixed • refactor: :recycle: supports mobile registered clients with less privs • refactor: replace Persona with PostType + ToneOfVoice model (#251)
30.39.0
• feat: :sparkles: improve auth form visual design and add JS validation
30.39.1
• refactor: :recycle: changed prompts a bit • test: :green_heart: fixed compilation error
30.40.0
• refactor: :recycle: allowed the removal of profilePicture • refactor: :recycle: create static image map for syndicated map entries • refactor: :recycle: updated link wot Academy • test: comprehensive unit test coverage for domain services (#228)
30.40.1
• test: :green_heart: added tests and fixed tests
30.40.2
• test: :green_heart: added tests and fixed tests
30.40.3
30.40.4
• test: :green_heart: added tests and fixed tests
30.40.5
• fix: :bug: fixed grid not loading
30.40.6
• fix: :bug: added default booking URIs to all registered clients • fix: :bug: fixed openapi path
30.40.7
- fix: :green_heart: added support for more registered client types
- fix: :recycle: all map markers returned
- refactor: :recycle: added faceBookAppId to open graph model
- refactor: :recycle: added some extra logging to welcome text AI helper
- refactor: :recycle: added support for more registered client types
- refactor: :recycle: added travelAgent to ManagingEntity
- refactor: :recycle: make it so that our own currency is prioritized of CLoudBeds currency
- refactor: :recycle: preemptive Csrf token in login
- refactor: :recycle: refreshing tokens now possible for mobile registered clients only
- refactor: :recycle: set httpOnly false to better accommodate JS
- refactor: :recycle: SSO works perfectly now
- refactor: :recycle: updated with Yann’s prompts
30.41.0
30.41.1
30.42.0
- feat(payment): add server-side GA4 purchase tracking via Measurement Protocol (#262)
- refactor: :recycle: added OpenGraph image url filter
- refactor: :zap: removed unsued code
- refactor(payment): move GA4 code to google/google-analytics module (#263)
- test: :green_heart: fixed test
30.43.0
- feat(winklinks): add background, gradient, profile sizing, and font fields (#266)
- feat(winklinks): add social list design customization fields
- fix: :bug: fixed transactionInventoryList everywhere
- test: :green_heart: updated test to include new properties
30.43.1
- refactor: :recycle: logo can now be removed
30.43.2
- refactor: :recycle: improved oEmbed code
- test: :green_heart: fixed failing test
- test: :white_check_mark: verify zero-priced BookingAncillary support across pipeline
30.44.0
- docs: :memo: add README.md to every Maven sub-module (#274)
- feat: :sparkles: improve social post quality with key facts, seasonality, occasions, and diversity
- feat: :sparkles: Revolut Business payout integration (Phases 1-7)
- feat: forward Revolut payout fees to beneficiary with double-entry ledger entries
- feat: Revolut Business payout integration (Phases 1-7) (#271)
- feat: Revolut OAuth2 private_key_jwt + API-managed webhooks (#273)
- fix: :bug: took into account different types of principan
- refactor: :fire: removed all reactive modules
- refactor: :recycle: added support for Revolut fees
- refactor: :recycle: all Exely business errors should have 200 status code
- refactor: :recycle: improved oEmbed code
- refactor: :sparkles: improve double-entry ledger with accountName field, typed metadata, and bug fixes
- refactor: :zap: removed Wise code
- test: :green_heart: fixed failing test
- test: :green_heart: fixed Revolut tests
- test: :green_heart: fixed tests
- test: :white_check_mark: verify zero-priced BookingAncillary support across pipeline
- test: fix CoverageServiceImplTest and AdminLedgerControllerTest after Wise removal and withdrawal refactor
30.44.1
30.44.2
- refactor: :recycle: updated post renditions campaign query
30.44.3
- refactor: :recycle: added support for GTM Container ID
- refactor: :rotating_light: fixed compiler error
30.45.0
- docs: :memo: added readme files for the new AI code
- feat: :sparkles: add ai-rag-advisor, ai-agent modules + media metadata in embeddings (#280)
- feat: :sparkles: add ResilientChatModel and ChatClient.Builder support (#281)
- feat: :sparkles: hotel identity federation for third-party vector store access (#286)
- feat: add property embeddings pipeline with vector store (#277)
- feat: replace static key facts with vector store retrieval in content creators (#282)
- fix: :bug: resolve PR review findings from #279-#283 (#284)
- refactor: :recycle: added rag to index creator task. fixed the reputation text for vector store ingest
- refactor: :recycle: added support for 3rd party GTM and GA4 IDs
- refactor: :recycle: decompose Prompts.java into focused domain classes (#279)
- refactor: :recycle: fixed Vector store. Tests pass.
- refactor: :recycle: unify content creators with vector store as single source of truth (#285)
- refactor: :wrench: added Revolut prod keys
- refactor: :wrench: added Voyage AI vector store to the mix Using MongoDb Atlas Embeddings
- refactor: meta-autoreply uses ChatClient + RagContextAdvisor (#283)
- refactor: migrate property-embeddings to sliced Spring AI VectorStore documents (#278)
- test: :green_heart: fixed test
- test: :green_heart: fixed text
30.45.1
- refactor: :recycle: subscribing fb / ig page to our app at the same time we do auth
30.46.0
- chore: :art: nothing special
- chore: :fire: removed unused classes
- chore: :loud_sound: updated logging levels
- chore: :wrench: this fails in CI and doesn’t even compile
- chore: remove .claude/worktrees from tracking
- docs: :globe_with_meridians: updated i18n values
- docs: :memo: bring all README.md files in line with the current codebase
- docs: :memo: fix all Javadoc doclint errors across codebase
- docs: :memo: updated delete user text
- docs: :memo: updated descriptions
- docs: :memo: updated i18n keys for email
- feat: :sparkles: add acquiringInformation to booking refund property email event
- feat: :sparkles: added MCP tools
- feat: :sparkles: expose git commit hash via environment.git-hash property
- feat: :sparkles: fix direct checkout data loss and add QR code generation
- feat: :sparkles: make REST endpoints MCP-friendly with @McpToolDescription (#314)
- feat: :sparkles: populate FinancialBreakdown on agent bookings
- feat: :sparkles: populate FinancialBreakdown on test bookings
- feat: add Sign in with Apple as federated OAuth2 provider (#294)
- feat: add Sign in with Microsoft as federated OAuth2 provider (#295)
- feat: group booking confirmation email for multi-room carts (#302)
- feat: populate financialBreakdown on ancillaries, stay rate, and room stay
- feat: preserve OAuth2 state across OTT magic-link authentication (#296)
- feat: support RoomStay quantity>1 and multi-room-type group bookings (#312)
- feat: sync withdrawable funds to ledger as single source of truth (#310)
- feat(application): drop clientType from update request
- feat(booking): :sparkles: single refund model, email audit trail, all-day calendar events
- feat(booking): consolidate supplier refund to single admin-approval flow (#317)
- feat(booking): expose admin refund respond and issue endpoints
- feat(booking): unify cancellation rule across roles; split refund preview from cancellation (#340)
- feat(IAM): convert SSO inline-HTML emails to Wink templates (#305)
- feat(IAM): federated account linking with case-insensitive email matching (#303)
- feat(lead): add bulk status update endpoint with service impl and tests
- feat(managing-entity): add bulk status update endpoint with service impl and tests
- feat(managing-entity): add unique city/country affiliate list endpoints (#299)
- feat(managing-entity): manager grant administration + safe ownership transfer (#341)
- feat(payment-admin): add booking aggregate data endpoints, managing-entity type counts, and property status aggregation
- feat(property): add bulk status update endpoint with service impl and tests
- feat(scheduler): auto-provision Google Cloud Scheduler jobs for /task/ endpoints (#321)
- feat(security): extend platform ACL to ManagingEntity, CalDav & Feature controllers (#325)
- feat(security): modernize roles, scopes & grants onto the platform ACL (#324)
- feat(security): platform-wide object-level ACL framework and rollout (#322)
- feat(security): secure /mcp as OAuth2 resource server with per-tool ACL (#326)
- feat(special-rate): :sparkles: add bundle-level descriptions for offerDetails
- feat(user): add bulk enable/disable endpoint with service impl and tests
- feat(user): self-service account removal + 30-day purge lifecycle (#345)
- fix: :bug: disable OTel OTLP exporters to prevent localhost:4318 connection errors
- fix: :bug: fixed refunding
- fix: :bug: move email template i18n keys to correct app message bundles
- fix: :bug: populate booking email payment details from PAYMENT_TEXT
- fix: :bug: removed a assert required check
- fix: :bug: use custom booker from BookingTestRequest instead of authenticated user
- fix: :recycle: add-on data now show correctly
- fix: :recycle: fixed profile domain issue
- fix: :wrench: added qrCodeImageUrl to group booking event
- fix: charge ancillaries through the full fee structure and dedupe beneficiaries by party
- fix: exclude bundled agents from JaCoCo report to fix duplicate-class error
- fix: report Exely multi-room bookings as N duplicate room stays
- fix: send Revolut counterparty bank details at top level (code 2101) (#311)
- fix(application): return scopes in Application response
- fix(booking): :bug: apply quantity at the rate leaf to fix add-on double-count (#331)
- fix(booking): after-refund breakdown uses refund-adjusted net + amount-refunded row
- fix(booking): apply room quantity to booking financialBreakdown (#327)
- fix(booking): make the refund webhook the single source of refund completion (#319)
- fix(booking): migration honors payment.vendor and preserves SALE beneficiary classification
- fix(booking): one TripPay payment confirmation email per group booking (#339)
- fix(booking): refund the correct amount and reconcile refunds against the beneficiary ledger (#342)
- fix(booking): repair BookingStayRate compile breakage and pagination totals (#334)
- fix(booking): show actual room quantity in booking emails (#329)
- fix(build): :bug: bake OTEL exporter-disable env vars into the Cloud Run image
- fix(channel-manager): send actual room quantity to partners (#330)
- fix(IAM): :bug: accept Microsoft logins without email_verified claim
- fix(IAM): :bug: strip upstream nbf/jti from federated id_token claims (#307)
- fix(IAM): :bug: unblock federated logins for Spring Security 7 (#306)
- fix(IAM): enable Apple Sign-In web flow + extranet→app URL rename (#304)
- fix(openapi): :bug: realign springdoc groups and scopes to ACL URL scheme
- fix(security): :bug: match ACL caller by user_id claim, not JWT subject (#343)
- fix(single-sign-on): :bug: make passkey registration work end-to-end
- fix(web): :bug: return 401 for failed authentication, not 403 (#344)
- refactor: :perf: tried to improve inventory retrieval
- refactor: :recycle: added @PersistenceCreator annotation to constructors
- refactor: :recycle: added 2 more properties to email event POJO to be able to generate a google calendar URL
- refactor: :recycle: added add item to cart
- refactor: :recycle: added address update method for admin
- refactor: :recycle: added custom font on Customization
- refactor: :recycle: added endpoint for Revolut transfer fee
- refactor: :recycle: added more comments on purge managing entities
- refactor: :recycle: added my account support directly in IAM
- refactor: :recycle: added Revolut entries
- refactor: :recycle: added some convenience methods on Booking
- refactor: :recycle: added Some Sentry code and
- refactor: :recycle: added webhook self-healing to Stripe
- refactor: :recycle: checkout session booking works now
- refactor: :recycle: consolidated migration script
- refactor: :recycle: fixed ancillary emails being sent out by filtering appointment-type extras
- refactor: :recycle: fixed pdf report creation
- refactor: :recycle: fixed POJOs with missing @JsonView annotations and constructors
- refactor: :recycle: fixed reputation entry
- refactor: :recycle: looking at booking ancillaries
- refactor: :recycle: removed unused getters
- refactor: :recycle: updated events after TripPay / Wink merge
- refactor: :recycle: upgraded aplication and webhook list endpoints to use ME ID
- refactor: :recycle: upgraded Spring AI to M8
- refactor: :recycle: we are no longer creating an app per new account
- refactor: :zap: removed Groq / Grok AI from Resilient manager
- refactor: :zap: removed Groq from resilient manager
- refactor(api): normalize account-scoped URLs to /api/managing-entity/{id}/{context}/… (#323)
- refactor(pricing): :recycle: use BigDecimal(scale 3) for discount/premium/channel percentages (#338)
- style: :lipstick: fixed QR code
- style: :lipstick: made better email content
- test: :green_heart: added test
- test: :green_heart: fix shouldFailWhenIdentifiersAreEmpty in AdministrationLeadServiceImplTest
- test: :green_heart: fixed a breaking test
- test: :green_heart: fixed all tests
- test: :green_heart: fixed compilation error
- test: :green_heart: fixed controller test
- test: :green_heart: fixed Handlebars render tests
- test: :green_heart: fixed missing mock bean
- test: :green_heart: fixed test
- test: :green_heart: fixed test by removing one redundant legacy status check
- test: :green_heart: fixed test by updating mock dependencies
- test: :green_heart: fixed tests
- test: :green_heart: remove unused import in AdministrationLeadServiceImplTest
- test: :green_heart: updated test
- test: :white_check_mark: added booking tests
- test: :white_check_mark: comprehensive cancellation and refund test coverage
- test: :white_check_mark: fix BookingPaymentHandlerImplTest compilation and runtime failures
- test: :white_check_mark: fix BookingReportServiceTest by mocking QrCodeService
- test: :white_check_mark: fix CheckoutServiceIntegrationTest by mocking GoogleMapsService
- test: :white_check_mark: fix ManagingEntityControllerTest after UpsertBankAccountRequest gained address param (#313)
- test: :white_check_mark: fix UnfinishedStubbingException in WithdrawalServiceImplTest (#308)
- test: :white_check_mark: mock QrCodeService in booking-domain integration tests
- test: add domain/web coverage and fix a pagination total bug in ReviewRepository (#333)
- test: enable JaCoCo 85% gate on calendar + 23 MCP modules (#336)
- test: fix BookingReportServiceTest context configuration
- test: fix BookingServiceImplTest by adding CustomizationService mock
- test: fix CheckoutServiceImplTest
- test: fix CheckoutServiceIntegrationTest
- test: fix DirectCheckoutServiceImplTest for sync checkout API
- test: hermetic transactional email tests via shared HandlebarsTestSupport (#301)
- test: roll out JaCoCo 85% coverage gate across 55 modules (#335)
- test: roll out JaCoCo 85% gate across 13 more domain modules (#337)
- test: stub StayRate enrichment chain in DirectCheckoutServiceImplTest
- test(accounting): :white_check_mark: isolate ledger ITs from parallel-failsafe shared-Mongo race
- test(booking): :white_check_mark: end-to-end group booking cancellation refund test
- test(security): add auth + OAuth2 coverage, JaCoCo 85% gate, fix two persistence bugs (#332)
30.47.0 Latest
- chore: :art: nothing special
- chore: :loud_sound: updated logging levels
- chore: :wrench: this fails in CI and doesn’t even compile
- docs: :globe_with_meridians: updated i18n values
- docs: :memo: bring all README.md files in line with the current codebase
- docs: :memo: fix all Javadoc doclint errors across codebase
- docs: :memo: updated delete user text
- docs: :memo: updated descriptions
- docs: :memo: updated i18n keys for email
- docs(openapi): :lock: hide internal endpoints and reorganize public API docs (#350)
- docs(stripe): correct webhook signing-secret fallback docs and drop dead config
- feat: :sparkles: add acquiringInformation to booking refund property email event
- feat: :sparkles: added MCP tools
- feat: :sparkles: expose git commit hash via environment.git-hash property
- feat: :sparkles: fix direct checkout data loss and add QR code generation
- feat: :sparkles: make REST endpoints MCP-friendly with @McpToolDescription (#314)
- feat: :sparkles: populate FinancialBreakdown on agent bookings
- feat: :sparkles: populate FinancialBreakdown on test bookings
- feat: group booking confirmation email for multi-room carts (#302)
- feat: populate financialBreakdown on ancillaries, stay rate, and room stay
- feat: support RoomStay quantity>1 and multi-room-type group bookings (#312)
- feat: sync withdrawable funds to ledger as single source of truth (#310)
- feat(application): drop clientType from update request
- feat(booking): :sparkles: single refund model, email audit trail, all-day calendar events
- feat(booking): consolidate supplier refund to single admin-approval flow (#317)
- feat(booking): expose admin refund respond and issue endpoints
- feat(booking): unify cancellation rule across roles; split refund preview from cancellation (#340)
- feat(IAM): convert SSO inline-HTML emails to Wink templates (#305)
- feat(IAM): federated account linking with case-insensitive email matching (#303)
- feat(managing-entity): manager grant administration + safe ownership transfer (#341)
- feat(scheduler): auto-provision Google Cloud Scheduler jobs for /task/ endpoints (#321)
- feat(security): extend platform ACL to ManagingEntity, CalDav & Feature controllers (#325)
- feat(security): modernize roles, scopes & grants onto the platform ACL (#324)
- feat(security): platform-wide object-level ACL framework and rollout (#322)
- feat(security): secure /mcp as OAuth2 resource server with per-tool ACL (#326)
- feat(special-rate): :sparkles: add bundle-level descriptions for offerDetails
- feat(user): self-service account removal + 30-day purge lifecycle (#345)
- fix: :bug: disable OTel OTLP exporters to prevent localhost:4318 connection errors
- fix: :bug: fixed refunding
- fix: :bug: move email template i18n keys to correct app message bundles
- fix: :bug: populate booking email payment details from PAYMENT_TEXT
- fix: :bug: removed a assert required check
- fix: :bug: use custom booker from BookingTestRequest instead of authenticated user
- fix: :recycle: add-on data now show correctly
- fix: :recycle: fixed profile domain issue
- fix: :wrench: added qrCodeImageUrl to group booking event
- fix: charge ancillaries through the full fee structure and dedupe beneficiaries by party
- fix: exclude bundled agents from JaCoCo report to fix duplicate-class error
- fix: report Exely multi-room bookings as N duplicate room stays
- fix: send Revolut counterparty bank details at top level (code 2101) (#311)
- fix(application): return scopes in Application response
- fix(booking): :bug: apply quantity at the rate leaf to fix add-on double-count (#331)
- fix(booking): after-refund breakdown uses refund-adjusted net + amount-refunded row
- fix(booking): apply room quantity to booking financialBreakdown (#327)
- fix(booking): make the refund webhook the single source of refund completion (#319)
- fix(booking): migration honors payment.vendor and preserves SALE beneficiary classification
- fix(booking): one TripPay payment confirmation email per group booking (#339)
- fix(booking): refund the correct amount and reconcile refunds against the beneficiary ledger (#342)
- fix(booking): repair BookingStayRate compile breakage and pagination totals (#334)
- fix(booking): show actual room quantity in booking emails (#329)
- fix(build): :bug: bake OTEL exporter-disable env vars into the Cloud Run image
- fix(channel-manager): send actual room quantity to partners (#330)
- fix(IAM): :bug: accept Microsoft logins without email_verified claim
- fix(IAM): :bug: strip upstream nbf/jti from federated id_token claims (#307)
- fix(IAM): :bug: unblock federated logins for Spring Security 7 (#306)
- fix(IAM): enable Apple Sign-In web flow + extranet→app URL rename (#304)
- fix(openapi): :bug: realign springdoc groups and scopes to ACL URL scheme
- fix(security): :bug: match ACL caller by user_id claim, not JWT subject (#343)
- fix(single-sign-on): :bug: make passkey registration work end-to-end
- fix(web): :bug: return 401 for failed authentication, not 403 (#344)
- refactor: :recycle: added 2 more properties to email event POJO to be able to generate a google calendar URL
- refactor: :recycle: added add item to cart
- refactor: :recycle: added endpoint for Revolut transfer fee
- refactor: :recycle: added more comments on purge managing entities
- refactor: :recycle: checkout session booking works now
- refactor: :recycle: fixed ancillary emails being sent out by filtering appointment-type extras
- refactor: :recycle: fixed pdf report creation
- refactor: :recycle: fixed reputation entry
- refactor: :recycle: looking at booking ancillaries
- refactor: :recycle: removed reliance on clientId in links
- refactor: :recycle: upgraded aplication and webhook list endpoints to use ME ID
- refactor: :recycle: upgraded Spring AI to M8
- refactor: :recycle: we are no longer creating an app per new account
- refactor: :zap: removed Groq / Grok AI from Resilient manager
- refactor: :zap: removed Groq from resilient manager
- refactor(api): normalize account-scoped URLs to /api/managing-entity/{id}/{context}/… (#323)
- refactor(pricing): :recycle: use BigDecimal(scale 3) for discount/premium/channel percentages (#338)
- style: :lipstick: fixed QR code
- style: :lipstick: made better email content
- test: :green_heart: fixed a breaking test
- test: :green_heart: fixed all tests
- test: :green_heart: fixed compilation error
- test: :green_heart: fixed controller test
- test: :green_heart: fixed Handlebars render tests
- test: :green_heart: fixed test
- test: :green_heart: fixed test by updating mock dependencies
- test: :green_heart: remove unused import in AdministrationLeadServiceImplTest
- test: :white_check_mark: comprehensive cancellation and refund test coverage
- test: :white_check_mark: enable JaCoCo 85% coverage gates — wave 3 (4 modules)
- test: :white_check_mark: enable JaCoCo 85% coverage gates — wave 4 (3 modules)
- test: :white_check_mark: enable JaCoCo 85% coverage gates — wave 5 (2 modules)
- test: :white_check_mark: fix BookingPaymentHandlerImplTest compilation and runtime failures
- test: :white_check_mark: fix BookingReportServiceTest by mocking QrCodeService
- test: :white_check_mark: fix CheckoutServiceIntegrationTest by mocking GoogleMapsService
- test: :white_check_mark: fix ManagingEntityControllerTest after UpsertBankAccountRequest gained address param (#313)
- test: :white_check_mark: fix UnfinishedStubbingException in WithdrawalServiceImplTest (#308)
- test: :white_check_mark: mock QrCodeService in booking-domain integration tests
- test: add domain/web coverage and fix a pagination total bug in ReviewRepository (#333)
- test: enable JaCoCo 85% coverage gates — wave 2 (43 modules) (#347)
- test: enable JaCoCo 85% gate on calendar + 23 MCP modules (#336)
- test: fix BookingReportServiceTest context configuration
- test: fix BookingServiceImplTest by adding CustomizationService mock
- test: fix CheckoutServiceImplTest
- test: fix CheckoutServiceIntegrationTest
- test: fix DirectCheckoutServiceImplTest for sync checkout API
- test: hermetic transactional email tests via shared HandlebarsTestSupport (#301)
- test: roll out JaCoCo 85% coverage gate across 55 modules (#335)
- test: roll out JaCoCo 85% gate across 13 more domain modules (#337)
- test: stub StayRate enrichment chain in DirectCheckoutServiceImplTest
- test(accounting): :white_check_mark: isolate ledger ITs from parallel-failsafe shared-Mongo race
- test(booking): :white_check_mark: end-to-end group booking cancellation refund test
- test(security): add auth + OAuth2 coverage, JaCoCo 85% gate, fix two persistence bugs (#332)