agentleFS
randommoniclerandommonicle/claude-skills/honest-failure-surfacing/SKILL.md

honest-failure-surfacing

Skill27 starsChanged 19 days agoApache-2.0View on GitHub

Playbook for the always-on norm "one message per failure mode; error level is for terminal states only". Load when writing a catch block, a user-facing error string, a disabled control, a progress indicator, or choosing telemetry levels. Does not fire on content loss through filters (no-silent-data-drop) or on test skip semantics (prove-it-can-fail).

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every distinct failure mode gets its own user-facing message.

    line 15

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Honest failure surfacing

Three field incidents where the surface lied about what failed, plus a storage failure that stayed invisible for hours behind a swallowing loop and a cosmetic progress bar. Layer: norm + playbook — the one-line norm in the global CLAUDE.md is the everyday trigger; this file is the depth.

The rule

Every distinct failure mode gets its own user-facing message; never collapse them into one reassuring string. A surface that cannot say what failed sends the user (and the developer) to fix the wrong thing.

How to apply

  • Classify before wording. A catch block once painted every transcription failure as "No connection" while the real cause was a malformed-JWT 401 — costing hours of a field inspection. Distinguish at minimum: auth, offline, server, and input failures.
  • A disabled control cannot explain itself. A disabled button swallows the tap, and the handler holding the explanation never runs. If a control can legitimately fail a precondition, let it be pressed and have it say why.
  • Per-item failures in a loop surface to the user, not just to a log. A sync loop that swallowed per-photo upload errors showed a fake "Uploading…" pulse forever; nothing was uploading. Progress UI reflects real progress or it is a lie.
  • A permanently-failed item is surfaced as given up, not silently retried forever — and never allowed to wedge the rest of the queue.
  • Error level is for terminal states. Self-healing retries logged at error drowned the one terminal give-up that mattered. Retries log at warning; the give-up logs at error.

What this skill does not do

It does not decide what happens to the data on a failing path — no-silent-data-drop owns content preservation. It does not define skip semantics in tests — prove-it-can-fail owns check integrity.

Why

A wrong error message is worse than none: it actively redirects diagnosis. Every incident in the evidence cost hours specifically because the surface asserted a cause it had not established. Evidence: ASH LESSONS_LEARNED 2026-05-28, 2026-06-18, 2026-07-14 (offline), and the CLAUDE.md storage-RLS upsert lesson; ICC L-007 (shared evidence with guard-the-spend-paths).

Additions from the misses-log sweep (2026-10-22)

  • Bound every await on the path, not the one holding the fetch. A network wait is bounded end to end: reading or refreshing the credential, each third-party client call, the request and the body (keep the timer running until the body is read). A test hangs each stage and asserts the call ends. (ICC L-103.)
  • A long silent call looks like a hang. Keep each tool call or step to a couple of minutes, write output to disk in stages, and say what is still running between them; a session that shows nothing for fourteen minutes cannot be told from a stuck one. (Factorio Mods, 2026-10-18.)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.