Intent: after setting a phone notify URL, the owner proves it works in one key instead of waiting for the crew to need them.
Done looks like:
[ ] src/crew/notify.ts gains sendTest(db, userId, sender = post): it sends one short line (Test from the forge — notifications reach you.) to the saved URL through the existing Sender, and answers sent, refused (the endpoint said no or could not be reached) or off (no URL set). It never throws and never logs the URL's path (it can hold a secret).
[ ] The notify screen (src/tui/screens/notify.ts) offers t "send a test" when a URL is set; the result is a toast: sent to <host>, <host> did not take it, and the key is disabled when off.
[ ] At most one test per user per 30 seconds; a second press within that is a toast just sent — wait a moment, so the key cannot be used to hammer an endpoint.
[ ] Tests (test/notify-test-send.test.ts, with a fake Sender): sent, refused, off and the 30-second limit; a tui test drives t. Each fails without the change.
Risks: the send goes through post (outboundFetch, https only, no redirects) — never a raw fetch. Leave MCP notify and docs/MCP.md (hot) for a later increment.
Intent: after setting a phone notify URL, the owner proves it works in one key instead of waiting for the crew to need them.
Done looks like:
src/crew/notify.tsgainssendTest(db, userId, sender = post): it sends one short line (Test from the forge — notifications reach you.) to the saved URL through the existingSender, and answerssent,refused(the endpoint said no or could not be reached) oroff(no URL set). It never throws and never logs the URL's path (it can hold a secret).src/tui/screens/notify.ts) offerst"send a test" when a URL is set; the result is a toast:sent to <host>,<host> did not take it, and the key is disabled when off.just sent — wait a moment, so the key cannot be used to hammer an endpoint.test/notify-test-send.test.ts, with a fake Sender): sent, refused, off and the 30-second limit; a tui test drivest. Each fails without the change.Files: src/crew/notify.ts, src/tui/screens/notify.ts, test/notify-test-send.test.ts
Risks: the send goes through
post(outboundFetch, https only, no redirects) — never a raw fetch. Leave MCPnotifyand docs/MCP.md (hot) for a later increment.Brief: mason or scout.