What
App\Mail\InvoicePaymentAcknowledgmentClientMail fires when a new on-chain payment is detected against an invoice — including partial payments. Body opens with:
A Bitcoin payment of X BTC was detected.
No action is needed right now.
The invoice issuer has been notified to review it promptly.
In a partial-payment scenario, the line No action is needed right now reads as reassurance that the recipient is done. A client who knew they sent partial reads it correctly; a client who accidentally underpaid (or didn't realize) reads it as confirmation they've paid in full. The system's intent is "no action while confirmations settle, downstream underpay alert will fire if applicable" — but that's not what the phrasing communicates.
Where
resources/views/mail/invoice-payment-acknowledgment-client.blade.php (line ~8)
Fix direction
Tighten the copy so it signals "confirmations are still settling — we'll follow up if anything's off" rather than "all done." Candidate phrasings:
Confirmations are still settling — no action is needed from you while that completes.
We'll follow up if anything needs attention from you.
Final wording up to maintainer/Nate. Bar: a skimming client should not walk away thinking the invoice is fully paid based on this mail alone, when in fact a downstream underpay alert may follow.
Why the gap exists
By design, the detection-time ack is intentionally low-info because the system doesn't 100% trust state until confirmations settle, and a separate underpay alert handles the "you owe more" call after thresholds confirm. The separation is defensible; the phrasing just needs to match it.
Test plan
- Re-fire mail against the §5.4 partial-payment fixture (50% paid, status
partial); eyeball QA confirms the new copy doesn't read as completion
- No spec change required (
docs/specs/NOTIFICATIONS.md describes the mail as "low-info ack" — matches new direction)
- Existing tests in
tests/Feature/InvoiceDeliveryTest.php and WatchPaymentsCommandTest.php still pass
Tracked in
docs/strategies/19.1_NOTIFICATION_COVERAGE_AUDIT.md §5.4 (post-restructure: findings + fix + re-verify nested under §5.4).
What
App\Mail\InvoicePaymentAcknowledgmentClientMailfires when a new on-chain payment is detected against an invoice — including partial payments. Body opens with:In a partial-payment scenario, the line
No action is needed right nowreads as reassurance that the recipient is done. A client who knew they sent partial reads it correctly; a client who accidentally underpaid (or didn't realize) reads it as confirmation they've paid in full. The system's intent is "no action while confirmations settle, downstream underpay alert will fire if applicable" — but that's not what the phrasing communicates.Where
resources/views/mail/invoice-payment-acknowledgment-client.blade.php(line ~8)Fix direction
Tighten the copy so it signals "confirmations are still settling — we'll follow up if anything's off" rather than "all done." Candidate phrasings:
Confirmations are still settling — no action is needed from you while that completes.We'll follow up if anything needs attention from you.Final wording up to maintainer/Nate. Bar: a skimming client should not walk away thinking the invoice is fully paid based on this mail alone, when in fact a downstream underpay alert may follow.
Why the gap exists
By design, the detection-time ack is intentionally low-info because the system doesn't 100% trust state until confirmations settle, and a separate underpay alert handles the "you owe more" call after thresholds confirm. The separation is defensible; the phrasing just needs to match it.
Test plan
partial); eyeball QA confirms the new copy doesn't read as completiondocs/specs/NOTIFICATIONS.mddescribes the mail as "low-info ack" — matches new direction)tests/Feature/InvoiceDeliveryTest.phpandWatchPaymentsCommandTest.phpstill passTracked in
docs/strategies/19.1_NOTIFICATION_COVERAGE_AUDIT.md§5.4 (post-restructure: findings + fix + re-verify nested under §5.4).