refactor(complexity): reclassify planning phases from standard to heavy tier

Move plan-milestone and plan-slice from standard to heavy tier so
planning uses the best configured model (e.g. Opus) and is not
downgraded by dynamic routing. Milestone-level planning analysis
also returns heavy instead of standard.
This commit is contained in:
Jeremy 2026-03-29 05:35:11 -05:00
parent 0a2c9b64c6
commit 167832e105
2 changed files with 12 additions and 10 deletions

View file

@ -35,15 +35,17 @@ const UNIT_TYPE_TIERS: Record<string, ComplexityTier> = {
"complete-slice": "light",
"run-uat": "light",
// Tier 2 — Standard: research, routine planning, discussion
// Tier 2 — Standard: research, routine discussion
"discuss-milestone": "standard",
"discuss-slice": "standard",
"research-milestone": "standard",
"research-slice": "standard",
"plan-milestone": "standard",
"plan-slice": "standard",
// Tier 3 — Heavy: execution, replanning (requires deep reasoning)
// Tier 3 — Heavy: planning, execution, replanning (requires deep reasoning)
// Planning is heavy so it uses the best configured model (e.g. Opus) and is
// not downgraded by dynamic routing when a capable model is configured.
"plan-milestone": "heavy",
"plan-slice": "heavy",
"execute-task": "standard", // default standard, upgraded by metadata
"replan-slice": "heavy",
"reassess-roadmap": "heavy",
@ -185,8 +187,8 @@ function analyzePlanComplexity(
// Check if this is a milestone-level plan (more complex) vs single slice
const { milestone: mid, slice: sid } = parseUnitId(unitId);
if (!sid) {
// Milestone-level planning is always at least standard
return { tier: "standard", reason: "milestone-level planning" };
// Milestone-level planning is always heavy — requires full context and best model
return { tier: "heavy", reason: "milestone-level planning" };
}
// For slice planning, try to read the context/research to gauge complexity

View file

@ -41,14 +41,14 @@ test("research-slice classifies as standard", () => {
assert.equal(result.tier, "standard");
});
test("plan-milestone classifies as standard", () => {
test("plan-milestone classifies as heavy", () => {
const result = classifyUnitComplexity("plan-milestone", "M001", "/tmp/fake");
assert.equal(result.tier, "standard");
assert.equal(result.tier, "heavy");
});
test("plan-slice classifies as standard", () => {
test("plan-slice classifies as heavy", () => {
const result = classifyUnitComplexity("plan-slice", "M001/S01", "/tmp/fake");
assert.equal(result.tier, "standard");
assert.equal(result.tier, "heavy");
});
test("replan-slice classifies as heavy", () => {