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

  1. Locate the MEMORY_COMPRESSION_TASK entry in task_template.json and fix the PromptFile path named in the error
  2. Ensure the referenced file exists under prompts/ and is matched by the //go:embed pattern
  3. Restore the deleted/renamed prompt file or update the manifest reference, then rebuild
  4. 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

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.