Conversation
Summary
Add support for object-style option values in framework config.json with per-value config overrides
Option values can now be a plain string (existing behavior) or { "value": "...", "overrides": {...} } to override modelOverrides, skip, or toolNameMapping for that specific option combination
Overrides are deep-merged into the framework config during test matrix expansion
Example
{
"options": {
"modelSetup": [
"single",
{
"value": "fallback",
"overrides": {
"modelOverrides": { "request": "some-other-model" }
}
}
]
}
}
The "single" variant uses the framework's default config. The "fallback" variant overrides modelOverrides.request for all checks in that test run.
Motivation
Some framework variants need different validation expectations (e.g., a different expected model name, different checks to skip, or different tool name mappings). Previously this required duplicating the entire framework folder. With option overrides, a single config.json can express variant-specific config inline.
| id: runId, | ||
| index: matrix.length, // Track original order for consistent reporting | ||
| framework: { | ||
| ...framework, |
There was a problem hiding this comment.
Bug: Option overrides for skip and toolNameMapping are shallow-merged, causing them to completely replace base configurations instead of merging with them.
Severity: MEDIUM
Suggested Fix
Explicitly deep-merge the skip and toolNameMapping properties from optionOverrides into the framework configuration, similar to how modelOverrides is currently handled. This will ensure that nested values from both the base and override configurations are combined correctly.
Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: src/orchestrator.ts#L667
Potential issue: When applying option-specific overrides to a framework configuration,
the `skip` and `toolNameMapping` properties are shallow-merged via a spread operator.
This is inconsistent with `modelOverrides`, which is explicitly deep-merged. As a
result, if a base framework config and an option override both define `skip` or
`toolNameMapping` objects, the override's object will completely replace the base
object, leading to the loss of pre-existing rules from the base configuration. This
behavior contradicts the documented intent to deep-merge overrides.
Did we get this right? 👍 / 👎 to inform future reviews.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| ...framework.modelOverrides, | ||
| ...optionOverrides.modelOverrides, | ||
| } | ||
| : framework.modelOverrides, |
There was a problem hiding this comment.
Shallow override of skip and toolNameMapping loses framework config
Medium Severity
The ...optionOverrides spread on the framework object shallow-replaces skip and toolNameMapping, while modelOverrides gets explicit deep-merge treatment. If an option override specifies a partial skip (e.g., only checks), the framework's existing skip.tests entries are silently lost. Similarly, if an override specifies one toolNameMapping entry, all other framework-level tool name mappings disappear. The same shallow-replacement issue exists in getOptionCombinations when combining overrides across multiple option dimensions.
Additional Locations (1)
🟡 AI SDK Integration Test ResultsStatus: 286 tests failing (no regressions) Summary
Test MatrixAgent Tests
Embedding Tests
LLM Tests
Legend: ✅ Pass | ❌ Fail | ✅🔧 Fixed | ❌📉 Regressed | ✅🆕 New (pass) | ❌🆕 New (fail) | 🗑️ Removed | str=streaming blk=blocking a=async s=sync hi=highlevel lo=lowlevel Generated by AI SDK Integration Tests |


Add support for object-style option values in framework config.json with per-value config overrides
Option values can now be a plain string (existing behavior) or
{ "value": "...", "overrides": {...} }to override modelOverrides, skip, or toolNameMapping for that specific option combinationOverrides are deep-merged into the framework config during test matrix expansion
Example
{ "options": { "modelSetup": [ "single", { "value": "fallback", "overrides": { "modelOverrides": { "request": "some-other-model" } } } ] } }The "single" variant uses the framework's default config. The "fallback" variant overrides modelOverrides.request for all checks in that test run.
Motivation
Some framework variants need different validation expectations (e.g., a different expected model name, different checks to skip, or different tool name mappings). Previously this required duplicating the entire framework folder. With option overrides, a single config.json can express variant-specific config inline.