Closing the Loop: Proxy-Aware Rate Limiting With X-Forwarded-ForTL;DR The previous PR fixed getLocalAddr() → getRemoteAddr() for rate limiting. That fix is still broken behind a reverse proxy: getRemoteAddr() returns the proxy's IP, so all real clients share one Mar 6, 2026·5 min read
When Your Interface Knows Too Much: Splitting ShelfFacade on the Query/Command Axis TL;DR ShelfFacade had grown to 9 methods mixing reads and writes. All 12 consumers — CLI commands, REST controllers, cross-module adapters — depended on the full interface regardless of which half thFeb 28, 2026·10 min read
Eight Files for One Operation: Why the Placement Module Had to GoTL;DR A standalone placement module existed with its own facade, ports, adapter, domain model, entity, repository, mapper, and controller — 8+ files for a single write operation with no independent lFeb 27, 2026·13 min read
Three Fixes That Should Have Been There From the StartTL;DR Three commits, five files, eight lines added. A hardening pass on the shelf module after four PRs of boundary migration work. ShelfPortModelMapper relocated from ports/inbound/mapper/ into porFeb 27, 2026·10 min read
Sealing the Boundary: ShelfFacade Now Imports Zero Domain TypesTL;DR After three PRs of incremental migration, ShelfFacade's inbound boundary is fully sealed. All eight methods now speak exclusively in port models — no Shelf, no ShelfSummary, no ShelfId crosses Feb 25, 2026·13 min read
The Second Migration Is Nearly Free: Completing ShelfFacade's List Query ContractTL;DR After PR #324 introduced ShelfResponse and migrated findShelvesByBookcaseId(), ShelfFacade.findAll() still returned List<Shelf>. The same port had two list-query methods with two different retuFeb 25, 2026·9 min read
Ports Should Define Their Own Types: Introducing the ShelfResponse Port ModelTL;DR ShelfFacade.findShelvesByBookcaseId() returned List<Shelf> — raw domain objects flowing through the inbound port boundary into CLI commands and web adapters. Every consumer was coupled to domaFeb 24, 2026·11 min read