Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:2b95l8mw5h was degraded 42 minutes today: trevato/forge: "password doors share the sign-in windows > the doors count in one window: tries at /signin close the AP… #4466
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/4419-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 1 commit fork 1 thread · 1 unresolved
1 file
changed +11
−3
test/signin-password-doors.test.ts +11 −3
| @@ -92,10 +92,18 @@ describe("password doors share the sign-in windows", () => { | ||
| 92 | 92 | |
| 93 | 93 | test("the doors count in one window: tries at /signin close the API door", async () => { |
| 94 | 94 | const { url } = await forge(); |
| 95 | for (let i = 0; i < TRIES; i++) | |
| 96 | await fetch(`${url}/signin`, { method: "POST", body: new URLSearchParams({ username: "pat", password: `wrong-${i}` }), redirect: "manual" }); | |
| 95 | // The process-wide hash gate refuses (and does not count) a try made while | |
| 96 | // other hashes fill it, as a busy check machine can: a counted try answers | |
| 97 | // 422, so repeat until three have been counted. | |
| 98 | for (let i = 0; i < TRIES; i++) { | |
| 99 | for (let attempt = 0; attempt < 50; attempt++) { | |
| 100 | const res = await fetch(`${url}/signin`, { method: "POST", body: new URLSearchParams({ username: "pat", password: `wrong-${i}` }), redirect: "manual" }); | |
| 101 | if (res.status === 422) break; | |
| 102 | await Bun.sleep(50); | |
| 103 | } | |
| 104 | } | |
| 97 | 105 | expect((await post(`${url}/api/v1/sessions`, { username: "pat", password: PASSWORD })).status).toBe(429); |
| 98 | }); | |
| 106 | }, 30_000); | |
| 99 | 107 | }); |
| 100 | 108 | |
| 101 | 109 | describe("no door verifies a password around the windows", () => { |
new above
offline
If all 50 attempts stay gated, the loop exits quietly and the failure shows up later as an unexplained status mismatch. Track whether a 422 was seen and expect it here, so the failure names the stalled step.