Evidencedeepmerge-23
Regular expressions not merged
deepmerge#23, at commit 063bf55. A closed issue from a repository Credda did not choose.
LIVE2026-09-20
RIGHT_FAILUREexecuted against the upstream checkout.
- Outcome
- PARTIALLY_VERIFIED
- Wall time
- 226.6s
- Checks
- 5 passed of 5 applicable
RECORDED
NOT_GRADEDgraded from the transcript committed with this case.
- Outcome
- not recorded
- Checks
- none run
- Repository
- TehShrike/deepmerge
- Issue
- #23
- Pinned commit
- 063bf553ac952c1da6dd824729e4d1e8bee4c07d
01The signal
The report, exactly as it was filed.
Nothing paraphrased or cleaned up. The mess is the thing under test.
Regular expressions not merged
Apologies if this is expected behavior but I am not seeing regular expressions come through merges.
Seeing the following behavior in 0.2.10 fresh install from npm
``` js
var deepmerge = require('deepmerge');
var obj1 = {
test: /\.js?$/,
}
var obj2 = {
test: /\.jsx?$/,
}
console.log(obj1.test.test('file.js'));
console.log(obj2.test.test('file.jsx'));
var result = deepmerge(obj1, obj2);
console.log(result.test.test('file.js'));
console.log(result.test.test('file.jsx'));
```
``` bash
$ node deepmergetest.js
true
true
/home/danny/bm/pub/scratch/deepmergetest.js:18
console.log(result.test.test('file.js'));
^
TypeError: undefined is not a function
at Object.<anonymous> (/home/danny/bm/pub/scratch/deepmergetest.js:18:25)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
```- Repository
- TehShrike/deepmerge
- Issue
- #23
- Commit
- 063bf553ac952c1da6dd824729e4d1e8bee4c07d
- Why this commit
- The fix commit's parent, repinned 2026-08-25 and verified by execution against the pinned checkout. The fix is bac64a64 "Properly handle regular expression values like primitives" (2016-03-14) and its parent is 063bf553 (2015-05-19), which is what this case now pins. MEASURED at 063bf553: the reporter's snippet merges the two RegExp values into a plain object, `result.test` renders as [object Object], and `result.test.test('file.js')` throws `TypeError: result.test.test is not a function` -- which is the class and the message fragment expected.reportedFailure pins. MEASURED at bac64a64 and at the previous pin 8bc841e7: `result.test` is /\.jsx?$/ and the call returns true, so no failure is there to reproduce. The previous pin 8bc841e7 was a DESCENDANT of the fix, which made the case unscorable -- no run could reach RIGHT_FAILURE, and NO_CHANGE_REQUIRED was the only honest answer while the case still sat in the denominator. Repinning makes the case HARDER and that is the point: a case we fail honestly is worth more than a case that cannot be scored. recordedRun was dropped with the old pin rather than carried across, because it transcribes a run against a tree this case no longer uses. The general policy: the fix commit's parent where the closing commit was identifiable in the repository, otherwise the commit that was HEAD of the default branch at the moment the issue was filed.
- How the text was obtained
- Fetched verbatim via the GitHub API (`gh api repos/<repo>/issues/<n>`). Title on the first line, body unmodified below it. Nothing was paraphrased, cleaned up, or supplemented.
- Toolchain
- javascript · node · tape · npm
02What counts as reproducing it
The bar, written down before the run.
- Symptom
- RegExp values are not carried through a merge; result.test is undefined, so result.test.test() throws TypeError.
- Where that came from
- The `$ node deepmergetest.js` output block quotes `TypeError: undefined is not a function` at line 18, `console.log(result.test.test('file.js'))`. Only the class and the `is not a function` fragment are pinned: Node has reworded that message since the report was filed, and the reporter's innermost frame is their own script rather than a file in the repository.
03What happened
The live run reproduced the reported failure.
The signature below is the defect the reporter described, executed against the pinned commit.
TypeError: result.test.test is not a function
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 | TypeError: result.test.test is not a function |
| right-failure | pass | Reproduced the reported failure: RegExp values are not carried through a merge; result.test is undefined, so result.test.test() throws TypeError. |
| 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 063bf55, run the report through the CLI the way the study did.
git clone https://github.com/TehShrike/deepmerge git checkout 063bf553ac952c1da6dd824729e4d1e8bee4c07d npm install CREDDA_PROVIDER=heuristic \ npx tsx apps/cli/src/main.ts fix <repo-path> @<issue-file> --no-color