From ec633d0daf17ab5806c563b7a95d6721b7b73c7b Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Tue, 27 Oct 2026 07:39:19 +0000 Subject: Write down a refused token instead of only remembering it 401 and 403 are permanent by decision -- a refused token cannot fix itself -- and the notice saying so was held in memory. So it vanished with the process and only came back once the next refresh had gone and been refused all over again, which for 61 feeds is hours of the app quietly downloading from publishers with nothing on screen to say why. It now lives in the preferences file and is there at launch. Saving different credentials clears it at once rather than waiting for a request to prove it, because that is the one act that answers the complaint. Saving the same ones again proves nothing and leaves the notice standing. Behind a small interface so SkipServer does not have to know whether it is writing to a preferences file or to nothing: every test wants it in memory, without a Context to hang a DataStore off. The stored one takes the reading and the writing as two narrow seams rather than a Preferences. Passing Preferences dragged a Context in and made it the one piece of the server client that could only be exercised on a device -- the coverage gate caught that, which is what it is for. What it actually decides, when *not* to write, is now plain Kotlin with five tests on it: clearing runs after every successful reply, so two hundred successes in a sweep must write nothing. Verified on a device: a refusal written by one Preferences instance is read back by another, and four cases around saving credentials behave as described. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B --- .../plans/2026-10-20-corrections-and-signature-library.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'docs/superpowers') diff --git a/docs/superpowers/plans/2026-10-20-corrections-and-signature-library.md b/docs/superpowers/plans/2026-10-20-corrections-and-signature-library.md index 146581c..331e883 100644 --- a/docs/superpowers/plans/2026-10-20-corrections-and-signature-library.md +++ b/docs/superpowers/plans/2026-10-20-corrections-and-signature-library.md @@ -388,8 +388,10 @@ everything measured, though not directly caught in a probe. - **Compose has no automated coverage** — no Robolectric. Everything visual is verified by eye on the emulator only. -- **The rejected-token notice is in-memory**, so after a process restart it reappears on the next - refresh rather than at launch. +- **The rejected-token notice is written down — fixed 2026-10-27.** It lives in the preferences + file now, so it is on the Settings screen at launch rather than after the next refresh has gone + and been refused all over again. Saving *different* credentials clears it at once; saving the + same ones again proves nothing and leaves it standing. - **Library and Settings redesign (step 4 of the UI plan) — done 2026-10-25.** The library is one list: Up Next as a heading and a row, shows as a dot, a title and a waiting count. Settings is three groups ordered by how often they are touched, with the build hash last under About. -- cgit v1.2.3