alibaba/open-code-review · error
MEMORY_COMPRESSION_TASK: %w
Error message
MEMORY_COMPRESSION_TASK: %w
What it means
Identical to the MAIN_TASK failure but for the MEMORY_COMPRESSION_TASK: resolveConversation could not read one of that conversation's prompt files from the embedded FS, and LoadDefault wraps the cause as 'MEMORY_COMPRESSION_TASK: ...'. The library throws it because a preset template whose memory-compression prompts are missing cannot be safely used for long-session compression.
Source
Thrown at internal/config/template/template.go:243
var tpl Template
tpl.MaxTokens = m.MaxTokens
tpl.MaxCompletionTokens = m.MaxCompletionTokens
tpl.MaxToolRequestTimes = m.MaxToolRequestTimes
tpl.PlanModeLineThreshold = m.PlanModeLineThreshold
tpl.PlanModeGroupLineThreshold = m.PlanModeGroupLineThreshold
tpl.GroupingMinFiles = m.GroupingMinFiles
tpl.GroupingBundleLineThreshold = m.GroupingBundleLineThreshold
tpl.MaxReviewRounds = m.MaxReviewRounds
if tpl.MainTask, err = resolveConversation(m.MainTask); err != nil {
return nil, fmt.Errorf("MAIN_TASK: %w", err)
}
if tpl.PlanTask, err = resolveOptionalConversation(m.PlanTask, "PLAN_TASK"); err != nil {
return nil, err
}
if tpl.MemoryCompressionTask, err = resolveConversation(m.MemoryCompressionTask); err != nil {
return nil, fmt.Errorf("MEMORY_COMPRESSION_TASK: %w", err)
}
if tpl.ReLocationTask, err = resolveOptionalConversation(m.ReLocationTask, "RE_LOCATION_TASK"); err != nil {
return nil, err
}
if tpl.ReviewFilterTask, err = resolveOptionalConversation(m.ReviewFilterTask, "REVIEW_FILTER_TASK"); err != nil {
return nil, err
}
if tpl.GroupingTask, err = resolveOptionalConversation(m.GroupingTask, "GROUPING_TASK"); err != nil {
return nil, err
}
return &tpl, nil
}
// LoadScanDefault parses the embedded scan_template.json.
func LoadScanDefault() (*ScanTemplate, error) {
var tpl ScanTemplate
if err := json.Unmarshal(defaultScanTemplate, &tpl); err != nil {
return nil, fmt.Errorf("unmarshal default scan template: %w", err)View on GitHub (pinned to 5cf97d0d15)
Solutions
- Locate the MEMORY_COMPRESSION_TASK entry in task_template.json and fix the PromptFile path named in the error
- Ensure the referenced file exists under prompts/ and is matched by the //go:embed pattern
- Restore the deleted/renamed prompt file or update the manifest reference, then rebuild
- Run the package's template tests (TestLoadDefault_*) which fail fast on missing prompt references
Defensive patterns
Strategy: validation
Validate before calling
var m map[string]any
_ = json.Unmarshal(taskTemplateBytes, &m)
mc, _ := m["MEMORY_COMPRESSION_TASK"].(map[string]any)
for _, msg := range mc["messages"].([]any) {
pf, _ := msg.(map[string]any)["promptFile"].(string)
if _, err := template.TaskTemplateFS.ReadFile(pf); err != nil {
log.Fatalf("MEMORY_COMPRESSION_TASK prompt missing: %s", pf)
}
} Try / catch
tpl, err := template.LoadDefault()
if err != nil {
if strings.Contains(err.Error(), "MEMORY_COMPRESSION_TASK:") {
return fmt.Errorf("memory compression prompt missing from embedded assets: %w", err)
}
return err
} Prevention
- Include every prompt directory in //go:embed (prompts/* not prompts/*.md only if subdirs exist)
- Add a manifest-vs-filesystem consistency test in CI
- Grep the manifest for promptFile entries before deleting any prompt file
When it happens
Trigger: Calling LoadDefault() when a message in MEMORY_COMPRESSION_TASK of task_template.json references a prompts/<file> that is not present in the embedded FS.
Common situations: Deleting or renaming the memory-compression prompt markdown while task_template.json still points at it; embed directive updated to only include a subset of prompts; typo in the PromptFile field after a refactor.
Related errors
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/0325c6bfe76b9c48.
Report an issue: GitHub.