{"record":{"id":"b895960dd4497898","repo":"chenhg5/cc-connect","slug":"claudecode-missing-s-block-in-claude-code-usage","errorCode":null,"errorMessage":"claudecode: missing %s block in Claude Code /usage output","messagePattern":"claudecode: missing (.+?) block in Claude Code /usage output","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agent/claudecode/claude_usage.go","lineNumber":344,"sourceCode":"\t\tName:    \"Usage\",\n\t\tAllowed: true,\n\t\tWindows: []core.UsageWindow{session, week},\n\t}}\n\treturn report, nil\n}\n\nfunc parseClaudeUsageWindow(lines []string, header string, windowSeconds int, now time.Time) (core.UsageWindow, error) {\n\tstart := -1\n\theaderLower := strings.ToLower(header)\n\tfor i, line := range lines {\n\t\tlower := strings.ToLower(strings.TrimSpace(line))\n\t\tif strings.HasPrefix(lower, headerLower) {\n\t\t\tstart = i\n\t\t\tbreak\n\t\t}\n\t}\n\tif start < 0 {\n\t\treturn core.UsageWindow{}, fmt.Errorf(\"claudecode: missing %s block in Claude Code /usage output\", header)\n\t}\n\n\tvar (\n\t\tusedPercent *int\n\t\tresetRaw    string\n\t)\n\tfor i := start + 1; i < len(lines); i++ {\n\t\tline := strings.TrimSpace(lines[i])\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tlower := strings.ToLower(line)\n\t\tif i > start+1 && (strings.HasPrefix(lower, \"current \") || strings.HasPrefix(lower, \"extra usage\")) {\n\t\t\tbreak\n\t\t}\n\t\tif usedPercent == nil {\n\t\t\tif m := claudeUsagePercentRe.FindStringSubmatch(line); len(m) == 2 {\n\t\t\t\tv, _ := strconv.Atoi(m[1])","sourceCodeStart":326,"sourceCodeEnd":362,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/agent/claudecode/claude_usage.go#L326-L362","documentation":"A parse guard in parseClaudeUsageWindow: the expected section header (e.g. 'Usage' or a window header) was not found anywhere in the captured /usage lines. It fires when Claude Code's /usage output format changed or the wrong screen region was captured, so the window block cannot be located.","triggerScenarios":"Thrown at agent/claudecode/claude_usage.go:344 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Upgrade Claude Code to a version whose /usage output cc-connect knows","Report the format change so the parser can be extended","Capture and inspect the raw /usage screen to confirm what was rendered"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}