chenhg5/cc-connect · warning
context usage not found in rollout
Error message
context usage not found in rollout
What it means
After successfully reading the rollout JSONL, loadContextUsageFromRollout calls readContextUsageFromRollout; if it parses fine but returns nil, no token/context-usage record was present in the transcript, so the function returns this error. The file exists but carries no usable usage data.
Source
Thrown at agent/codex/context_usage.go:133
if err == nil && usage != nil {
return usage, path, nil
}
}
codexHome, err := resolveCodexHome(extraEnv)
if err != nil {
return nil, "", err
}
path = findSessionFileInCodexHome(codexHome, sessionID)
if path == "" {
return nil, "", fmt.Errorf("session file not found for %s", sessionID)
}
usage, err := readContextUsageFromRollout(path)
if err != nil {
return nil, path, err
}
if usage == nil {
return nil, path, fmt.Errorf("context usage not found in rollout")
}
return usage, path, nil
}
func resolveCodexHome(extraEnv []string) (string, error) {
if value := getenvFromList(extraEnv, "CODEX_HOME"); value != "" {
return strings.TrimSpace(value), nil
}
if value := strings.TrimSpace(os.Getenv("CODEX_HOME")); value != "" {
return value, nil
}
homeDir, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("resolve home directory: %w", err)
}
return filepath.Join(homeDir, ".codex"), nil
}
View on GitHub (pinned to 4000b2338a)
Solutions
- Wait until at least one model turn completes, then re-read the usage.
- Inspect the rollout JSONL to confirm it contains token_count/context usage records.
- Return a zero/default usage instead of an error when the file has no usage records yet.
- Upgrade the codex CLI if rollouts consistently lack usage data.
Example fix
// before
if usage == nil {
return nil, path, fmt.Errorf("context usage not found in rollout")
}
// after
if usage == nil {
return &ContextUsage{}, path, nil // no turns yet; report empty usage
} Defensive patterns
Strategy: fallback
Validate before calling
// Pre-check: does the rollout contain a usage line?
data, _ := os.ReadFile(path)
if !bytes.Contains(data, []byte("token_count")) {
return defaultUsage // nothing recorded yet
} Try / catch
usage, path, err := loadContextUsageFromRollout(sessionID, extraEnv)
if err != nil && strings.Contains(err.Error(), "context usage not found") {
usage = &ContextUsage{} // fall back to zero usage
} Prevention
- Only query usage after an assistant response exists in the rollout.
- Default the UI to 'unknown/0 usage' when records are absent.
- Upgrade codex CLI if new rollouts consistently lack token_count records.
- Log at debug instead of error for this expected-during-startup case.
When it happens
Trigger: readContextUsageFromRollout(path) returns (nil, nil) — the rollout JSONL for the session contains no context-usage/token_count entries, typically because the session has no completed model turns yet or the rollout predates the usage-record format.
Common situations: Querying context usage immediately after starting a session (only user input recorded); old codex rollout files lacking token_count fields; sessions aborted before the first assistant response.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06).
Data as JSON: /api/errors/dd18283d55379087.
Report an issue: GitHub.