|
47 | 47 | * |
48 | 48 | * ## REVERT-PROOF |
49 | 49 | * |
50 | | - * Delete the `claimAdvance` call from `resumeInternal` (resume unconditionally |
51 | | - * through `forgetSuspendedRun`, as before this card) and this file goes |
52 | | - * 5 red / 6 green — measured, not predicted, and recorded in the PR body with |
53 | | - * the mutation's on-disk proof. |
| 50 | + * Replace the `claimAdvance` call in `resumeInternal` with the unconditional |
| 51 | + * `await this.forgetSuspendedRun(run, 'resumed')` it had before this card, and |
| 52 | + * this file goes 4 red / 4 green — measured on the committed tree, not |
| 53 | + * predicted, with the mutation confirmed on disk by anchored counts and the |
| 54 | + * blob hash (recorded in the PR body): |
| 55 | + * |
| 56 | + * - `SHAPE A` → `[ 'notify', 'notify' ]` where `[ 'notify' ]` is correct: the |
| 57 | + * action fired twice, which is the doubled side effect this card is about. |
| 58 | + * - `SHAPE B` → the same, for the automated-approve shape. |
| 59 | + * - `SIZED` → `{ trials: 25, doubled: 25, extraOpens: 25 }`: every raced run |
| 60 | + * advanced twice, and opened its next approval level a second time. |
| 61 | + * - the declared-degradation case → no `warn` at all, because the seam that |
| 62 | + * emits it is the one the mutation removes. |
| 63 | + * |
| 64 | + * The four that stay green are the ones that must: the sequential single- |
| 65 | + * approver control (the shape the report called not obviously reachable), both |
| 66 | + * single-replica controls (the in-process `resuming` guard is untouched), and |
| 67 | + * the no-store control. A fix that moved the defect instead of removing it |
| 68 | + * would take one of those with it. `multi-replica-resume-staleness.test.ts` |
| 69 | + * stays 8/8 green under the same mutation — it pins the SEQUENTIAL half, and |
| 70 | + * this change does not touch it. |
54 | 71 | */ |
55 | 72 |
|
56 | 73 | import { describe, it, expect } from 'vitest'; |
|
0 commit comments