Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:h503k9k7s7 was degraded 26 minutes today: trevato/forge: "apps, runs and the crew on the web > the runs list, one run's log page, and the short door to it" faile… #3034
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/3031-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 1 commit fork
1 file
changed +6
−4
test/web-apps.test.ts +6 −4
| @@ -332,7 +332,9 @@ describe("apps, runs and the crew on the web", () => { | ||
| 332 | 332 | }); |
| 333 | 333 | |
| 334 | 334 | test("the runs list, one run's log page, and the short door to it", async () => { |
| 335 | const [run] = await runsOf(hello); | |
| 335 | // Every wait here is on the machine, not the code: give each a wide | |
| 336 | // bound so a loaded check lane fails only on a real hang. | |
| 337 | const [run] = await runsOf(hello, () => true, 30_000); | |
| 336 | 338 | expect(run).toBeDefined(); |
| 337 | 339 | // The live log exists only while it is going, and the page never |
| 338 | 340 | // reloads itself either way (#2873). |
| @@ -348,7 +350,7 @@ describe("apps, runs and the crew on the web", () => { | ||
| 348 | 350 | // Read the state before and after the render and assert only when they |
| 349 | 351 | // agree: a run that settles mid-render says nothing, so render again. |
| 350 | 352 | // A run only moves forward, so this ends once it is done. |
| 351 | const deadline = Date.now() + 5_000; | |
| 353 | const deadline = Date.now() + 15_000; | |
| 352 | 354 | for (;;) { |
| 353 | 355 | const before = isGoing(); |
| 354 | 356 | const html = await bodyOf(alice, `/alice/hello/runs/${run!.id}`); |
| @@ -368,7 +370,7 @@ describe("apps, runs and the crew on the web", () => { | ||
| 368 | 370 | // Let the deploy settle before the list and log are read: a queued run |
| 369 | 371 | // has no log lines yet and moves between the list's words, so those |
| 370 | 372 | // assertions would depend on how loaded the machine is. |
| 371 | const settleBy = Date.now() + 20_000; | |
| 373 | const settleBy = Date.now() + 60_000; | |
| 372 | 374 | while (isGoing()) { |
| 373 | 375 | if (Date.now() >= settleBy) { |
| 374 | 376 | throw new Error(`run ${run!.id} never settled`); |
| @@ -413,7 +415,7 @@ describe("apps, runs and the crew on the web", () => { | ||
| 413 | 415 | } |
| 414 | 416 | expect((await web(alice, "/runs/nope")).status).toBe(404); |
| 415 | 417 | expect((await web(alice, "/alice/hello/runs/nope")).status).toBe(404); |
| 416 | }, 40_000); | |
| 418 | }, 120_000); | |
| 417 | 419 | |
| 418 | 420 | test("cancelling a run: a writer may, a reader may not", async () => { |
| 419 | 421 | const [run] = await runsOf(hello); |
new above
offline