fix(#492): manifest effort.agent_overrides and effort.default now fall back correctly
Steps 2 and 4 of resolveEffortInternal now include an else branch that consults CANONICAL_CONFIG_DEFAULTS.effort when effortCfg is null, mirroring the existing Step 3 manifest-fallback pattern for routing_tier_defaults. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
5
.changeset/plucky-yaks-forage.md
Normal file
5
.changeset/plucky-yaks-forage.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
type: Fixed
|
||||||
|
pr: 577
|
||||||
|
---
|
||||||
|
effort.agent_overrides and effort.default in config-defaults.manifest.json now fall back correctly when no project-level effort config exists
|
||||||
@@ -1855,6 +1855,12 @@ function resolveEffortInternal(cwd, agentType, opts) {
|
|||||||
const v = ao[agentType];
|
const v = ao[agentType];
|
||||||
if (typeof v === 'string' && EFFORT_SET.has(v)) return v;
|
if (typeof v === 'string' && EFFORT_SET.has(v)) return v;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const mao = CANONICAL_CONFIG_DEFAULTS.effort && CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides;
|
||||||
|
if (mao && typeof mao === 'object' && !Array.isArray(mao)) {
|
||||||
|
const v = mao[agentType];
|
||||||
|
if (typeof v === 'string' && EFFORT_SET.has(v)) return v;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 3: routing_tier_defaults by agent's default tier.
|
// Step 3: routing_tier_defaults by agent's default tier.
|
||||||
@@ -1886,6 +1892,9 @@ function resolveEffortInternal(cwd, agentType, opts) {
|
|||||||
if (effortCfg) {
|
if (effortCfg) {
|
||||||
const d = effortCfg.default;
|
const d = effortCfg.default;
|
||||||
if (typeof d === 'string' && EFFORT_SET.has(d)) return d;
|
if (typeof d === 'string' && EFFORT_SET.has(d)) return d;
|
||||||
|
} else {
|
||||||
|
const d = CANONICAL_CONFIG_DEFAULTS.effort && CANONICAL_CONFIG_DEFAULTS.effort.default;
|
||||||
|
if (typeof d === 'string' && EFFORT_SET.has(d)) return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 5: hardcoded default
|
// Step 5: hardcoded default
|
||||||
|
|||||||
50
tests/bug-492-effort-manifest-fallback.test.cjs
Normal file
50
tests/bug-492-effort-manifest-fallback.test.cjs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
process.env.GSD_TEST_MODE = "1";
|
||||||
|
|
||||||
|
const { describe, test, beforeEach, afterEach } = require("node:test");
|
||||||
|
const assert = require("node:assert/strict");
|
||||||
|
const path = require("path");
|
||||||
|
const { createTempProject, cleanup } = require("./helpers.cjs");
|
||||||
|
const { resolveEffortInternal, CONFIG_DEFAULTS } = require("../get-shit-done/bin/lib/core.cjs");
|
||||||
|
const { CONFIG_DEFAULTS: CANONICAL_CONFIG_DEFAULTS } = require("../get-shit-done/bin/lib/configuration.cjs");
|
||||||
|
|
||||||
|
describe("#492 manifest effort fallback", () => {
|
||||||
|
let tmpDir;
|
||||||
|
beforeEach(() => { tmpDir = createTempProject(); });
|
||||||
|
afterEach(() => { cleanup(tmpDir); });
|
||||||
|
|
||||||
|
test("routing_tier_defaults manifest fallback still works", () => {
|
||||||
|
assert.strictEqual(resolveEffortInternal(tmpDir, "gsd-planner"), "xhigh");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("manifest effort.agent_overrides wins over routing_tier_defaults when no project config", () => {
|
||||||
|
const original = CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides;
|
||||||
|
try {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides = { "gsd-planner": "max" };
|
||||||
|
assert.strictEqual(resolveEffortInternal(tmpDir, "gsd-planner"), "max");
|
||||||
|
} finally {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides = original;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("manifest effort.default consulted for unknown agent with no project config", () => {
|
||||||
|
const original = CANONICAL_CONFIG_DEFAULTS.effort.default;
|
||||||
|
try {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.default = "max";
|
||||||
|
assert.strictEqual(resolveEffortInternal(tmpDir, "fictional-agent-xyz-492"), "max");
|
||||||
|
} finally {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.default = original;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("manifest agent_overrides takes precedence over manifest routing_tier_defaults", () => {
|
||||||
|
const originalAgentOverrides = CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides;
|
||||||
|
try {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides = { "gsd-planner": "minimal" };
|
||||||
|
assert.strictEqual(resolveEffortInternal(tmpDir, "gsd-planner"), "minimal");
|
||||||
|
} finally {
|
||||||
|
CANONICAL_CONFIG_DEFAULTS.effort.agent_overrides = originalAgentOverrides;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user