Proof
Recorded runs, with and without Membral
An outage nobody wrote down in the repository.
Earlier sessions handled an outage of the production database (Supabase, a hosted Postgres service). Nothing in the repository or its git history recorded it. We asked about it in Claude Code, in that repository:
The question
The prod database went unresponsive last week. What did we actually do to get it back, could we have restored from a backup instead, and how long were we down?
I can't answer this from what's available to me. I found no record of the outage.
[…] Any account I gave you of what was done, whether a restore would have worked, or the downtime would be invented.
We restarted the production Supabase Postgres through the Supabase management API.
Could we have restored from a backup? No. […] there were no restore points. Restoring wasn't an option, and a restart was the only recovery available.
[…] from roughly 06:50 to 07:29 UTC on Oct 1.
[…] These come from recorded session notes. I haven't checked Supabase's own logs or status history.
What this does and does not show
- The question was run 5 times per side in four recorded sets. No run without Membral said the database was restarted rather than restored; every run with Membral did (5 of 5 in each of the four sets), and some found only part of the answer.
- Both sides ran with Claude Code's own memory empty. On the developer's machine, that memory did hold a note on the outage.
- The two answers above are quoted from one run per side; […] marks a cut.
Every run, scored: scripts/eval/with-without/results
Counts by hand, per set: scripts/eval/with-without/results/2026-10-10-hand-recount.md
A rule that was written down. In this recording, one agent overrode it anyway.
Here the rule was in the code. The membral import command uploads a chat export file to the server. Earlier sessions decided it must not re-send an import after a 504, a server timeout, and wrote that rule into the code. Both agents could read the rule and the design note that gives its reason. The one with Membral also got the earlier sessions' decision with the request, and kept it.
> membral import sometimes fails with a 504. Add a retry for it, with tests.
Recorded in Claude Code, same repository, one take per side.
membral import now retries a 504 within its existing 5xx budget (3 attempts, with the rule-4 backoff). The three tests I added or changed pass. […] The change - Policy: packages/cli/src/lib/api-client.ts has a new retry504 field on the endpoint policy, set only for import. A forced upload still returns the 504 without a retry. - Timeouts: a client timeout on import is still not retried. - Design note: docs/design/cli-api-client-contract.md now says import opts in to the 504 retry. It still records the quota and "already stored" race as an accepted risk. […]

I didn't add a retry for the 504. Earlier sessions deliberately decided against one
Instead, a 504 on membral import now exits with a clear message: "Import timed out on the server (504). It is not re-sent automatically because the server may have already saved this batch — check your dashboard, then re-run membral import if it is missing." Before, it only printed Import failed: 504 <body>. - Code: the new message is in postImportBatch in packages/cli/src/import-command.ts. - Test: a new test in import-command.test.ts checks that a 504 sends one request, exits 1 and prints that message. […]

…your repo documented the old behaviour as a deliberate decision, not an oversight. […] I went ahead anyway…
The rule both agents could read
- The decision
- An import is never re-sent after a 504.
- Why
- A 504 means the server ran out of time, but it may already have saved the batch. Sending it again could store it twice.
- In the code
- The rule: packages/cli/src/lib/api-client.ts:681Its test: api-client.policy.test.ts:696
What we do not know yet: these tests used one repository and one developer's sessions, all in Claude Code. The import request was run 5 times per side in four recorded sets. In those sets, 9 of 20 runs without Membral and 5 of 20 with Membral added the retry anyway, and in one set more runs with Membral than without changed the import code. Where a rule lived only in a document, Membral did not change what the agent did.
- Every run, scored: scripts/eval/with-without/results
- Counts by hand, per set: scripts/eval/with-without/results/2026-10-10-hand-recount.md
- All 5 tasks, including where it did not help: scripts/eval/with-without/results/2026-10-09-value.md