github AgentWorkforce/burn cli-v0.41.0
@relayburn/cli@0.41.0

latest release: relayburn-v0.41.0...
2 hours ago

[0.41.0] - 2026-04-28

Fixed

  • Pending-stamp resolution no longer cross-contaminates concurrent same-cwd same-harness runs (#162). When two burn run codex (or two burn run opencode) processes are running in the same directory, the {harness, cwd, mtime ≥ spawnStart, sessionDirHint} filter cannot tell their stamps apart, so the resolver was applying every matching stamp's enrichment to whichever session ingested first — leaving the other session unstamped. Each session now claims at most one stamp (FIFO by spawnStartTs), so the older stamp goes to the first session that ingests and the newer stamp stays pending until its own session shows up. Different cwds, different harnesses, and Claude (which uses pre-allocated session IDs and never writes pending stamps) were unaffected and remain unchanged.

Added

  • Content-sidecar enrichments surface in burn diagnose and burn waste --patterns (#57). When a session was captured with content.store=full, the four waste-pattern detectors now emit additional fields that burn diagnose <session> and burn waste --patterns render through the existing tables and WasteFinding text: retry-loop titles include the shared error-line signature (e.g. "Bash failed 4× in a row: 'npm ERR! code ENOENT'"), failure-run details list per-tool first-line errors, compaction-loss details summarize the work in the compacted window (N edit(s), M bash, K read(s) on src/foo.ts, src/bar.ts), and edit-revert details show truncated old_string/new_string previews for both anchor edits. --json payloads carry the new fields verbatim (errorSignature, errorSignatures, lostWork, samplePreview). Sessions in content.store=hash-only or with pruned content render exactly as before. burn waste lazily loads content sidecars only for the four enrichable detectors (retries/failures/compaction/reverts) and only when at least one is selected, so unrelated runs pay no I/O cost.
  • Aggregate parser content-capture report in burn diagnose (#79). burn diagnose (no positional argument) now walks the ledger and emits a per-adapter content-capture gap table — total sessions, sessions with ≥1 tool call, gapped sessions (≥1 tool call but zero tool_result ContentRecords), orphan tool-call count, and degradedPct. Honors --json ({ adapters: [{ adapter, sessions, sessionsWithToolCalls, gappedSessions, orphanToolCalls, degradedPct }, ...], contentMode }). The existing per-session burn diagnose <session-id> behavior is unchanged. Permanent, queryable surface for the gap that the per-invocation ingest warning (#75) only flags once per burn run; rows omit the gap signal with an explanatory note when RELAYBURN_CONTENT_STORE is hash-only or off. Adapters with no sessions in the ledger are omitted entirely.
  • burn waste --patterns --findings (#56). Renders every detector's output through one severity-ranked WasteFinding table — retry loops / failure runs / compaction losses / edit reverts / edit-heavy / OpenCode skill-* / system-prompt-tax sorted together by severity (high → warn → info) then usdPerSession. The existing per-detector tables remain the default render path; --findings is opt-in. JSON output (--patterns --json) gains a findings array alongside the existing per-detector arrays for downstream consumers; the JSON refusal payload also carries findings: [] for schema parity. burn waste --findings (without --patterns) implies --patterns so the flag is never silently ignored.

Don't miss a new burn release

NewReleases is sending notifications on new releases.