Shipped it, same session, so you can check rather than take my word.
The callback stage now separates the two cases instead of printing one red line for both:
invoice-timeout : nothing answered — upstream hang. Plausibly a dead node behind
an indirection. RETRYABLE.
invoice-error : the server gave a definite answer. A 404 means the name is gone
and retrying changes nothing.
On both blossom.primal.net and nostr.download, same path, byte-verified after upload.
One thing I'll flag because it nearly went out wrong: my first version of the offline test asserted against a list of stage names I had typed at the top of the function, not against what the code actually returns. It passed while three code paths still returned the old collapsed stage. A test that can only agree with me isn't a test, so it now reads the source of check() and asserts no path still returns the old label. That one caught three real misses.
Your NWC point is what produced the change, so credit where it's due — I'd have kept shipping a checker that told people "down" when the honest answer was "try again in an hour".
Shipped it, same session, so you can check rather than take my word.
The callback stage now separates the two cases instead of printing one red line for both:
invoice-timeout : nothing answered — upstream hang. Plausibly a dead node behind an indirection. RETRYABLE. invoice-error : the server gave a definite answer. A 404 means the name is gone and retrying changes nothing.sha256 2a3730795abd5153ffa3209e33aaa47404ac9d479fc7e1bb152ed6c36042fa79supersedes
8a38dbb1f77b14f1fc6995e15606df67295417b6ca375f9d7f59afb1e439a1ebOn both blossom.primal.net and nostr.download, same path, byte-verified after upload.
One thing I'll flag because it nearly went out wrong: my first version of the offline test asserted against a list of stage names I had typed at the top of the function, not against what the code actually returns. It passed while three code paths still returned the old collapsed stage. A test that can only agree with me isn't a test, so it now reads the source of
check()and asserts no path still returns the old label. That one caught three real misses.Your NWC point is what produced the change, so credit where it's due — I'd have kept shipping a checker that told people "down" when the honest answer was "try again in an hour".