Tags: msgwing/ZeroSMTP
Tags
ci: drop Swift from the merge path; put the measurement in the countd… …own (#130) Two things. Swift was the merge bottleneck. Measured across five runs it took 2.8-3.3 minutes while every other job finished in 0.2-0.8 - four to ten times everything else, and it alone decided how long a merge waited. It is out of lint.yml and into swift-weekly.yml, which still builds the example on a schedule and on pushes that touch it, so it cannot rot unnoticed. That matters more than usual here: Package.swift pins swift-smtp 2.16.0 only because setup-swift cannot install the Swift 6.3 that 2.17+ needs, and that pin will break when something upstream moves. A weekly build is how we hear about it on a Monday instead of from a contributor. `swift` was also removed from the required status checks on main, first and deliberately. Deleting a job that branch protection still requires leaves every future PR waiting forever on a check that never reports - the failure mode the comment at the top of lint.yml already warns about. The countdown bot now leads with the measurement. A countdown on its own is a reminder, and reminders get ignored; "90 days" is not news. "24,960 public files still name smtp.office365.com, down 3% since August" is, because nobody else publishes it and it answers the question the deadline itself does not: is anyone actually fixing this. The figure is read from data/blast-radius.json rather than written into the workflow, so it cannot go stale. The section is skipped entirely if the data is missing or the latest sample failed to count - a milestone post with a wrong number would be worse than one without. The caveats travel with it: files containing a hostname, not systems that will break, a floor rather than a census, with the method linked and free to cite. jq emits raw fields and the shell formats them. Doing thousands separators inside jq is possible and unreadable.
feat: give every decision-guide recommendation its own link (#97) Two defects in the decision guide, both commercial rather than cosmetic. A recommendation had no URL. Somebody answering a question on a forum or in an issue could not link "here is the answer for your case" - they had to describe the path in prose and hope the reader followed it. A decision tool that cannot be cited is a toy. Results now write location.hash and are restored on load, so a shared link opens straight at the outcome. The tree also never asked whether the vendor had shipped OAuth firmware for the model - the one question this project answers better than anyone else, and the route into docs/NO-OAUTH-FIRMWARE.md. An ineo 266 owner walked straight past it and got told to change SMTP settings when the real first question was whether an update exists. Recommendations now link somewhere too. "SendGrid, Mailgun, SES" as bare text is a dead end on a page whose whole job is routing the reader. The text flowchart, which is the version GitHub readers see, is updated to match - the two cannot be allowed to disagree. Verified with node: syntax checks, all seven paths terminate, every result is reachable, and the key-to-hash round trip holds for all of them including result_relay_or_paid with its multiple underscores. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>