test/projection-dom-adversarial.test.js → "mutating a d3 projection invalidates live geometry on the next update" fails intermittently on CI's Node 22 job and only there.
Evidence
- Failed on three consecutive
main pushes: 2cfa91d, e37297b, 5f09263 (runs 33899867799, 33900298310, 33901825240), each time only the test (22) job; test (24) passed every time.
- Re-running the failed job on 5f09263 passed with no code change.
- Locally on Node 22.22.2 the file passes 5/5 runs.
Failure
Expected "actual" to be strictly unequal to: 'custom-3|-58|84|state-1'
at test/projection-dom-adversarial.test.js:104
After raw.rotate([-90, 0]); map.update({ figureColor }) and settle(), map.projection.key had not changed. The key ends in state-N, so the adapter's re-read of the d3 projection state did not happen before the assertion on that runner.
Suspects
settle() waits too little for the update path on the CI runner's Node 22 (a timing race, not a logic bug), or
- the d3 state signature (
it(t)) memoises per projection object and the mutation is read late.
Until it is fixed, a red test (22) with this single failure is noise: re-run the job.
test/projection-dom-adversarial.test.js→ "mutating a d3 projection invalidates live geometry on the next update" fails intermittently on CI's Node 22 job and only there.Evidence
mainpushes: 2cfa91d, e37297b, 5f09263 (runs 33899867799, 33900298310, 33901825240), each time only thetest (22)job;test (24)passed every time.Failure
After
raw.rotate([-90, 0]); map.update({ figureColor })andsettle(),map.projection.keyhad not changed. The key ends instate-N, so the adapter's re-read of the d3 projection state did not happen before the assertion on that runner.Suspects
settle()waits too little for the update path on the CI runner's Node 22 (a timing race, not a logic bug), orit(t)) memoises per projection object and the mutation is read late.Until it is fixed, a red
test (22)with this single failure is noise: re-run the job.