6bd9cf8018
The independent-verifier caught that my first loop-level test did not actually prove anything. The 502/SVG coordinate fixture I reused from gmoranxyz's unit-level test does not contain the substring 403 once case-folded, so the old naive substring classifier already treated it as transient. A test that passes under both the buggy code and the fix proves nothing about the fix. I replaced the fixture with a plain connection timeout whose message wraps the real Matrix sync pagination token, an arbitrary digit string that happens to contain 401. I verified this directly: with the pre-fix classifier restored, the retry test now fails (the old code stops the loop on this fixture), and with the fix in place it passes (the loop retries as it should). That is the RED/GREEN proof the maintainer originally asked for. I also documented in the stop test's docstring that it does not discriminate old from new, since the word forbidden in its message trips the old naive check too. It is still worth keeping as a regression test proving genuine auth errors stop the loop, just not as proof of this specific fix. While I was in there I also fixed a stale comment above the M_UNKNOWN_TOKEN sync-object pre-check. It said nio returns SyncError objects, but the dependency here is mautrix, not matrix-nio, and importing nio raises ModuleNotFoundError in this codebase. The pre-check logic itself was already correct and untouched. Co-authored-by: gmoranxyz <gmoranxyz@users.noreply.github.com> (cherry picked from commit ad3aad579a675a5aae544a50f88a82717c0ac3b6)