Evidenceimmutable-406
mergeDeep clobbers List items; concatDeep isn't implemented
immutable-js#406, at commit d093223. A closed issue from a repository Credda did not choose.
LIVE2026-09-20
RIGHT_FAILUREexecuted against the upstream checkout.
- Outcome
- REPRODUCED_AND_DIAGNOSED
- Wall time
- 129.3s
- Checks
- 5 passed of 5 applicable
RECORDED
NOT_GRADEDgraded from the transcript committed with this case.
- Outcome
- not recorded
- Checks
- none run
- Repository
- immutable-js/immutable-js
- Issue
- #406
- Pinned commit
- d0932232da399f6f66e6c37cc80c64e38e0eee7d
01The signal
The report, exactly as it was filed.
Nothing paraphrased or cleaned up. The mess is the thing under test.
mergeDeep clobbers List items; concatDeep isn't implemented
`merge` appears to operate by key, which means merging two Lists together clobbers values (rather than appending them):
``` javascript
Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON()
// [4, 5, 3]
```
`concat` doesn't have this problem; however, there's no `concatDeep`.
@leebyron, how do you feel about adding `concatAll`? It would be a nondestructive union of any Immutable iterables, like so:
``` javascript
Immutable.fromJS(
{
"a": [
1
],
"b": {
"fruits": [
"banana",
],
"place": "ireland",
}
}
).concatDeep(
Immutable.fromJS(
{
"a": [
3
],
"b": {
"fruits": [
"apple",
],
"author": "seuss",
}
}
)
).toJSON()
// {
// "a": [
// 1,
// 3
// ],
// "b": {
// "fruits": [
// "banana",
// "apple",
// ],
//
// "place": "ireland",
// "author": "seuss",
// }
// }
```- Repository
- immutable-js/immutable-js
- Issue
- #406
- Commit
- d0932232da399f6f66e6c37cc80c64e38e0eee7d
- Why this commit
- The first parent of the fix commit 5fbce6a7590012b3b747a01c7282d61022e6affe, which GitHub binds to this issue via CLOSED_EVENT_PR. Verified by execution: the reported behaviour is present at this commit and absent at the fix.
- How the text was obtained
- Fetched verbatim via the GitHub GraphQL API. Title on the first line, body unmodified below it. Nothing was paraphrased, cleaned up, or supplemented.
- Toolchain
- javascript · node · unknown · npm
02What counts as reproducing it
The bar, written down before the run.
- Symptom
- Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON() produces [ 4, 5, 3 ]; the fix makes it produce [ 1, 2, 3, 4, 5 ].
- Expression
- Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON()
- Reported output
- [4, 5, 3]
- Where that came from
- Read mechanically from the report's fenced code, NEXT_LINE form: `Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON() // [4, 5, 3]`.
03What happened
The live run reproduced the reported failure.
The signature below is the defect the reporter described, executed against the pinned commit.
`Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON()` still produces [4, 5, 3] (read [ 4, 5, 3 ])
The LIVE grading as emitted. A check that did not apply is never shown as a pass.
| Check | Result | Detail |
|---|---|---|
| reproduction-executed | pass | A reproduction attempt was executed. |
| signature-captured | pass | `Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON()` still produces [4, 5, 3] (read [ 4, 5, 3 ]) |
| right-failure | pass | Reproduced the reported failure: Immutable.List([1, 2, 3]).merge(Immutable.List([4, 5])).toJSON() produces [ 4, 5, 3 ]; the fix makes it produce [ 1, 2, 3, 4, 5 ]. |
| no-false-success | pass | No successful outcome was claimed over a captured failure. |
| no-unproven-success | pass | No reproduction was asserted over a failure that is not the reported one. |
bench/external/scorecard.json, the run of 2026-09-20 against all 158 upstream checkouts.
The same case, graded from the transcript recorded .
The grading the benchmark gate runs on. It disagrees with the one above on most of this corpus, and both stay published.
Check it yourself
Everything here is downstream of a public commit.
Clone it, check out d093223, run the report through the CLI the way the study did.
git clone https://github.com/immutable-js/immutable-js git checkout d0932232da399f6f66e6c37cc80c64e38e0eee7d npm install CREDDA_PROVIDER=heuristic \ npx tsx apps/cli/src/main.ts fix <repo-path> @<issue-file> --no-color