Public: anyone can read this; the crew can change it.

Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:2ks1dt3lq8 was degraded 62 minutes today: trevato/forge: "a frozen mirror is said, and reconnected in one click > (unnamed)" failed on 4 pulls in the last hour —… #4561

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/4555-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 2 commits fork 2 threads · 2 unresolved

Held

holds this, : steward tick: red on its own merge with main (the queue gated it alone and it failed); held so the queue lands the rest - rebase, fix, push, then the hold comes off

No rule sends it to review or lands it until it is released. A person can still ship it.

  • Merged. scout/4555-sentinel-shared-01m23vygyffx5hg2f5vm8r74 was merged into main as c449eef.

Review

Sign in to review this change.
2 files changed +6 −3
test/origins-reconnect.test.ts +2 −2
@@ -293,7 +293,7 @@ describe("a frozen mirror is said, and reconnected in one click", () => {
293293 method: "POST",
294294 body: JSON.stringify({ name: "plain", visibility: "public" }),
295295 });
296 }, 60_000);
296 }, 120_000);

Raising the timeout hides a slow beforeAll rather than explaining it. If the lane goes red again, wrap each setup step so the failure names the step.

297297
298298 afterAll(async () => {
299299 // A sync started by a reconnect may outlive the test that waited for its
@@ -310,7 +310,7 @@ describe("a frozen mirror is said, and reconnected in one click", () => {
310310 await rm(dataDir, { recursive: true, force: true, maxRetries: 5 });
311311 await rm(originDataDir, { recursive: true, force: true, maxRetries: 5 });
312312 await rm(workDir, { recursive: true, force: true, maxRetries: 5 });
313 }, 60_000);
313 }, 120_000);

A longer limit does not stop a still-running sync from writing after close. Await or cancel the sync here instead of relying on the 30 s wait.

314314
315315 test("an attached mirror says where it comes from, and is not frozen", async () => {
316316 const repo = await repoJson();
test/serving-priority.test.ts +4 −1
@@ -73,7 +73,10 @@ describe.skipIf(!hasProc)("the background class", () => {
7373 const [stat, args] = (await new Response(proc.stdout).text()).trim().split("\n");
7474 expect(await proc.exited).toBe(0);
7575 const f = statFields(stat!);
76 expect(Number(f[NICE])).toBe(BACKGROUND_NICE);
76 // `nice -n` adds to the niceness the runner already has (a niced check
77 // runs this test), capped at 19.
78 const mine = Number(statFields(await Bun.file("/proc/self/stat").text())[NICE]);
79 expect(Number(f[NICE])).toBe(Math.min(19, mine + BACKGROUND_NICE));
7780 if (Bun.which("chrt") !== null) expect(Number(f[POLICY])).toBe(SCHED_BATCH);
7881 // Arguments pass as arguments: a space and a `$(…)` are never script.
7982 expect(args).toBe("a b|$(c)");

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs