anthropics / anthropics/claude-code-action

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

Aperta
#1,796 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug duplicate p2
Lingua principale
TypeScript
Stelle
8.9k
Fork
2.1k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

# 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.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.