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

  1. Wait until at least one model turn completes, then re-read the usage.
  2. Inspect the rollout JSONL to confirm it contains token_count/context usage records.
  3. Return a zero/default usage instead of an error when the file has no usage records yet.
  4. 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

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.