anthropics / anthropics/claude-code-action

A single malformed line in the inline-comment buffer crashes the entire post step, losing every valid buffered comment

Open
#1,796 0 comments 0 reactions 0 assignees View on GitHub
bug duplicate p2
Dominant language
TypeScript
Stars
8.9k
Forks
2.1k
PR merge metrics
PR metrics pending

Description

# A single malformed line in the inline-comment buffer crashes the entire post step, losing every valid buffered comment

**Type:** bug (error handling)
**Severity:** medium
**Area:** `src/entrypoints/post-buffered-inline-comments.ts`
**Effort:** trivial

## Summary

The post step parses the buffer file with an unguarded `JSON.parse` per line:

```ts
// src/entrypoints/post-buffered-inline-comments.ts (main)
const comments: BufferedComment[] = raw
.split("\n")
.filter(Boolean)
.map((line) => JSON.parse(line));
```

If any line fails to parse, `main()` rejects, the catch handler logs
`post-buffered-inline-comments failed` and exits 1 — and **every** buffered
comment is lost, including the ones that are perfectly valid.

This contradicts the buffer's own writer. `removeBufferedComment()`
(`src/mcp/inline-comment-buffer.ts`) deliberately **keeps** lines it cannot
parse:

```ts
} catch {
// Keep anything we cannot parse rather than silently dropping it.
return true;
}
```

So the codebase already acknowledges that malformed lines can legitimately be
present in the buffer, yet the only reader of the buffer crashes on them.

## Failure scenarios

**A. Truncated append.** The buffer at `/tmp/inline-comments-buffer.jsonl` is
appended by the MCP server process (`appendFileSync`). A runner that is
killed mid-write, or two server processes appending large comment bodies
concurrently, can leave a partial final line. The next post step then throws
on that line and posts nothing at all.

**B. Any other corrupting event** (disk issues, an external process writing
to /tmp) — same outcome: one bad line suppresses all valid review comments,
which is the worst possible failure mode for a replay step whose whole
purpose is not losing the model's comments.

## Suggested fix

Skip malformed lines with a `::warning::` annotation and post the remaining
valid entries (mirroring how this file already warns for
`confirmed=false` / classified-as-probe comments). Happy to open a PR.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.