- Shipped
- August 29, 2026 at 7:53 AM UTC
- Author
- Kamo
- Commit
- 291a2f9
The document printed every number exactly as stored — "9495550134" on the letterhead, and the same again under Your Contact. Formatting goes through `app/lib/phone.ts`, the platform's one display stack, which every other read view on this app already uses. The customer's own number in the addressee block is formatted too. It was not in the report, but it sits on the same sheet, and one raw number beside two formatted ones reads as a bug rather than a decision. Formatting stays on the client rather than moving into QuotePresentation, which is otherwise the right home for anything the two documents must agree about. There is no phone library on the Java side, and adding Google's libphonenumber to kamo-shared-library would land a dependency on the whole fleet for a display concern. The server still decides WHICH number is published; this decides only how it is spelled. quotePhoneShapes.test.ts pins the three ways this regresses quietly. The one worth naming: an agent's line arrives from `lineWithExtension()` as "8005551212 ext. 204", a shape nothing else on the platform produces, and it has to come out as "(800) 555-1212 ext. 204" with the extension still attached — an extension without its org line is not a number anyone can call.