Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:14z6ct5gje is past its budget: trevato/forge: "MCP backups_test > an unreachable one says why, and never echoes a secret" failed on 3 pulls in the las… #8128
Check · Review · Land · Live done — Landed and live in production.
The flaky test "MCP backups_test > an unreachable one says why, and never echoes a secret" no longer depends on how long the real S3 client takes to give up. I couldn't reproduce the red here: the test passed before and after the change. I'm inferring the cause from the code and the symptom. The forge's check on this push is the real test.
shipped production is serving it deploy eb43263
The flaky test "MCP backups_test > an unreachable one says why, and never echoes a secret" no longer depends on how long the real S3 client takes to give up. I couldn't reproduce the red here: the test passed before and after the change. I'm inferring the cause from the code and the symptom. The forge's check on this push is the real test.
What changed: the test used to point Bun's real S3 client at 127.0.0.1:1 and wait for it to fail. That client retries a closed port, so on a loaded check machine it could run past the test's 20-second timeout. The test now swaps in a client whose list() throws at once. The error message contains the secret key and the access key, so the "never echoes a secret" assertions now check that the scrubbing works. Before, they only passed because the real error happened to leave the secrets out. The change is in test/mcp-backups-test.test.ts. No source code changed.
What I ran:
bun test test/mcp-backups-test.test.tspasses.bun x tsc --noEmitis clean.- I did not run
test/mcp-size.test.ts, because no tool or schema changed. - The test file still takes about 9 seconds after the change. I didn't look into why, and I didn't measure the unreachable-case test on its own.
What I chose not to do: I left the "reachable" test alone, since it already stubs the client. I added no timeout or retry settings to the app code.
To try it: bun test test/mcp-backups-test.test.ts. The cause shared:01m23vygyffx5hg2f5vm8r74sr:14z6ct5gje should leave the degraded list once main's next check is green.
🤖 Generated with Claude Code
Clean, test-only change. The stubbed client throws at once with both secrets in its message, so the test no longer waits on S3 retries. It also now exercises scrubReason in src/snapshot/destination.ts, which removes both keys. The stub is restored inline and again in afterAll, the same pattern as the reachable test. No source, dependency or security surface changed. I did not run the tests or the preview; this is a read-only review of the diff.
The flaky test "MCP backups_test > an unreachable one says why, and never echoes a secret" no longer depends on how long the real S3 client takes to give up. I couldn't reproduce the red here: the test passed before and after the change. I'm inferring the cause from the code and the symptom. The forge's check on this push is the real test.
What changed: the test used to point Bun's real S3 client at
127.0.0.1:1and wait for it to fail. That client retries a closed port, so on a loaded check machine it could run past the test's 20-second timeout. The test now swaps in a client whoselist()throws at once. The error message contains the secret key and the access key, so the "never echoes a secret" assertions now check that the scrubbing works. Before, they only passed because the real error happened to leave the secrets out. The change is intest/mcp-backups-test.test.ts. No source code changed.What I ran:
bun test test/mcp-backups-test.test.tspasses.bun x tsc --noEmitis clean.test/mcp-size.test.ts, because no tool or schema changed.What I chose not to do: I left the "reachable" test alone, since it already stubs the client. I added no timeout or retry settings to the app code.
To try it:
bun test test/mcp-backups-test.test.ts. The causeshared:01m23vygyffx5hg2f5vm8r74sr:14z6ct5gjeshould leave the degraded list once main's next check is green.🤖 Generated with Claude Code
Closes #8100