Skip to content

the failure detective

Latest

Choose a tag to compare

@AngelVRodC AngelVRodC released this 20 Sep 14:35
· 12 commits to main since this release

Two questions were missing from a cost meter: what keeps breaking, and is what I configured even loadable. v0.5.0 answers both from the same transcripts and config files — no network, nothing leaves the machine, zero dependencies.

tare failures streams the Claude Code corpus once and detects three patterns no existing command shows: a retry loop (≥3 consecutive is_error results on an identical tool+payload within one session), the same call erroring across ≥2 sessions, and error/failure rollups per attributed skill / plugin / MCP server. The denial partition holds exactly as in corruption (denied + failures == errors); a denial still feeds the patterns — a denied call cost the turn it sits in. Payload identity is a key-sorted digest under UseNumber, so two calls are the same only when their input truly is.

tare doctor checks the configuration the harness loads, for both harnesses, via the tools two-adapter precedent: one command: "doctor" JSON contract, one renderer, no interface, no registry. Static passes: SKILL.md frontmatter (missing/unterminated block, name-vs-directory mismatch, missing description, malformed allowed-tools), plugin manifests (claude-only — the OpenCode run omits the block with a warning, because absence is not health), and MCP config from every source the harnesses actually read, including ~/.claude.json user and project scopes; project wins collisions, and the collision is warned. command_not_found resolves against this process's PATH and says so in the same breath. The join that gives the command its point: configured-but-never-observed servers (a floor, not a verdict — the window may simply predate them) and observed-but-unconfigured names (a name-based join miss; on OpenCode the denominator is tool_sessions, since the schema cannot separate an MCP call from a built-in).

The tare skill (1.2.0) closes the loop the CLI deliberately leaves open: detect → attribute → propose. Root-cause judgment stays with the driving agent — tare names no third-party tool and fixes no harness; the user authorizes both.

Everything older stands: the five prior commands, both report gates (TestReportReproducible, TestReportMarkdownVariesOnlyByTimestamp), bufio.Reader streaming, and absent-is-not-zero. go build, go vet, gofmt, go test ./... green at the tag.

192 tests, zero dependencies, stdlib only.