Summary
The task-decomposer agent (invoked by /map-plan Step 5) routinely emits a blueprint.json that fails the framework's own validate_blueprint_contract (Step 5.6), requiring manual JSON surgery before planning can proceed. Two distinct self-consistency violations were hit in a single run:
- Forward dependency ordering — a subtask is placed before the dependency it declares.
- coverage_map ↔ bracket-tag mismatch — a
coverage_map entry has no corresponding [ID] bracket tag in the owning subtask's validation_criteria.
mapify_version: 3.10.0
Observed
validate_blueprint_contract returned:
{
"valid": false,
"errors": [
"ST-001: forward dependency on 'ST-002' (declared at subtasks[1] but ST-001 is at subtasks[0]); dependencies must reference only subtasks declared earlier — reorder subtasks[] so deps come first",
"ST-006: validation_criteria must cite coverage_map requirement 'SC-1' as [SC-1]"
],
"forward_dep_violations": ["ST-001->ST-002"]
}
- Error 1: the decomposer put
ST-001 (which depends_on ST-002) at subtasks[0] and ST-002 at subtasks[1]. The dependency DAG is fine; only the array order violates the "deps declared earlier" rule.
- Error 2: the decomposer added
coverage_map["SC-1"] = "ST-006" but did not include a [SC-1] tag in any ST-006.validation_criteria string — even though the Step 5 <constraints> require exactly that ("every mapped id MUST appear as a bracketed tag in that subtask's validation_criteria").
To get "valid": true I had to hand-edit blueprint.json: swap the two array elements and append "VC4 [SC-1]: ..." to ST-006.
Impact
- The decomposer and the validator share a contract, but the decomposer (which is prompted with that contract) violates it, so nearly every plan needs manual JSON repair between Step 5 and 5.6 — breaking the intended
decompose → validate → proceed flow and making /map-plan non-self-serve.
Expected (either side can own the fix)
- Decomposer side: topologically sort
subtasks[] so dependencies precede dependents before returning; and auto-emit a [ID] bracket tag in the owning subtask's validation_criteria for every coverage_map key (or run a self-check/repair pass before returning).
- Validator side (alternative): for ordering, accept any array order whose
dependencies form a DAG and only reject true cycles (array position is an arbitrary serialization detail). For coverage, optionally offer an auto-fix that injects the missing bracket tag rather than only erroring.
Environment
- mapify 3.10.0,
/map-plan Step 5 (task-decomposer) → Step 5.6 (validate_blueprint_contract).
Summary
The
task-decomposeragent (invoked by/map-planStep 5) routinely emits ablueprint.jsonthat fails the framework's ownvalidate_blueprint_contract(Step 5.6), requiring manual JSON surgery before planning can proceed. Two distinct self-consistency violations were hit in a single run:coverage_mapentry has no corresponding[ID]bracket tag in the owning subtask'svalidation_criteria.mapify_version: 3.10.0
Observed
validate_blueprint_contractreturned:{ "valid": false, "errors": [ "ST-001: forward dependency on 'ST-002' (declared at subtasks[1] but ST-001 is at subtasks[0]); dependencies must reference only subtasks declared earlier — reorder subtasks[] so deps come first", "ST-006: validation_criteria must cite coverage_map requirement 'SC-1' as [SC-1]" ], "forward_dep_violations": ["ST-001->ST-002"] }ST-001(whichdepends_on ST-002) atsubtasks[0]andST-002atsubtasks[1]. The dependency DAG is fine; only the array order violates the "deps declared earlier" rule.coverage_map["SC-1"] = "ST-006"but did not include a[SC-1]tag in anyST-006.validation_criteriastring — even though the Step 5<constraints>require exactly that ("every mapped id MUST appear as a bracketed tag in that subtask's validation_criteria").To get
"valid": trueI had to hand-editblueprint.json: swap the two array elements and append"VC4 [SC-1]: ..."to ST-006.Impact
decompose → validate → proceedflow and making/map-plannon-self-serve.Expected (either side can own the fix)
subtasks[]so dependencies precede dependents before returning; and auto-emit a[ID]bracket tag in the owning subtask'svalidation_criteriafor everycoverage_mapkey (or run a self-check/repair pass before returning).dependenciesform a DAG and only reject true cycles (array position is an arbitrary serialization detail). For coverage, optionally offer an auto-fix that injects the missing bracket tag rather than only erroring.Environment
/map-planStep 5 (task-decomposer) → Step 5.6 (validate_blueprint_contract).