alibaba/open-code-review · critical
read default rule file %q: %w
Error message
read default rule file %q: %w
What it means
After parsing system_rules.json, LoadDefault reads rule_docs/<default_rule> from the embedded FS to inline the default rule text. This error wraps that ReadFile failure: the file named by default_rule is not present under rule_docs/.
Source
Thrown at internal/config/rules/system_rules.go:104
return nil
}
//go:embed system_rules.json rule_docs/*
var rulesFS embed.FS
// LoadDefault parses the embedded system_rules.json and resolves rule file references.
func LoadDefault() (*SystemRule, error) {
data, err := rulesFS.ReadFile("system_rules.json")
if err != nil {
return nil, fmt.Errorf("read embedded system_rules.json: %w", err)
}
var rule SystemRule
if err := json.Unmarshal(data, &rule); err != nil {
return nil, fmt.Errorf("unmarshal default system rules: %w", err)
}
content, err := rulesFS.ReadFile("rule_docs/" + rule.DefaultRule)
if err != nil {
return nil, fmt.Errorf("read default rule file %q: %w", rule.DefaultRule, err)
}
rule.DefaultRule = strings.TrimRight(string(content), "\n")
for i := range rule.PathRules {
content, err := rulesFS.ReadFile("rule_docs/" + rule.PathRules[i].Rule)
if err != nil {
return nil, fmt.Errorf("read rule file %q for pattern %q: %w", rule.PathRules[i].Rule, rule.PathRules[i].Pattern, err)
}
rule.PathRules[i].Rule = strings.TrimRight(string(content), "\n")
}
return &rule, nil
}
// loadObjCRule reads the embedded Objective-C rule doc used by the ".m"
// content sniff. It is not referenced from system_rules.json's path_rule_map,
// so it is loaded explicitly rather than through the PathRules loop.
func loadObjCRule() (string, error) {
content, err := rulesFS.ReadFile("rule_docs/objc.md")
if err != nil {View on GitHub (pinned to 5cf97d0d15)
Solutions
- Compare default_rule in system_rules.json against files in internal/config/rules/rule_docs/ and fix the name (exact, case-sensitive match)
- If the doc is genuinely missing, restore it (git checkout) or add it under rule_docs/
- Remember the //go:embed rule_docs/* pattern requires the file to exist in the package directory
Example fix
// before (system_rules.json)
{"default_rule": "genral.md"}
// after
{"default_rule": "general.md"} Defensive patterns
Strategy: validation
Validate before calling
var probe struct{ DefaultRule string `json:"default_rule"` }
if err := json.Unmarshal(systemRulesJSON, &probe); err != nil { return err }
if _, err := fs.Stat(docsFS, "rule_docs/"+probe.DefaultRule); err != nil {
return fmt.Errorf("default_rule %q not found in rule_docs/: %v", probe.DefaultRule, err)
} Try / catch
rule, err := rules.LoadDefault()
if err != nil {
if strings.Contains(err.Error(), "read default rule file") {
log.Fatalf("default_rule points to a missing doc: %v — fix system_rules.json or restore the file", err)
}
return err
} Prevention
- Keep default_rule in sync whenever renaming files under rule_docs/
- Match filenames exactly and case-sensitively (embed FS is case-sensitive)
- Add a CI check that every filename referenced by system_rules.json exists in rule_docs/
When it happens
Trigger: default_rule in system_rules.json names a file that doesn't exist in rule_docs/ — wrong filename, missing extension, or the doc was deleted/renamed without updating system_rules.json.
Common situations: Renaming a rule doc (e.g. general.md → default.md) without updating default_rule; typo like 'Default.md' vs 'default.md' (embed FS is case-sensitive); the doc was never committed.
Related errors
- read rule file %q for pattern %q: %w
- read objc rule file: %w
- read rule file %s: %w
- MAIN_TASK: %w
- MEMORY_COMPRESSION_TASK: %w
AI-assisted analysis of alibaba/open-code-review@5cf97d0d15 (2026-09-02).
Data as JSON: /api/errors/6291a1495e6dc260.
Report an issue: GitHub.