BE-003: every dog must print name + verb + URI + error code on an error exit (uniform diagnostic)

When a dog process exits with an error it must emit ONE uniform line naming itself, the verb, the URI it was acting on, and the ok64 error code — e.g. sniff: get file://<store>?/beagle#<sha>: KEEPNONE. Today error exits are cryptic and contextless (Error: SNIFFFAIL, Error: BEDOGEXIT, bro: cannot open difff: FILENONE), so the user can't tell which dog failed, on what, doing which verb. This is the general form of BE-002. See Verbs.

Issues

The error-exit surface is inconsistent and drops the context a user needs.

Blockers

None. The pieces already exist: every dog knows its name (argv[0]), its verb (the parsed cli verb), and its URI/operand (the cli at-URI or the failing operand); ok64 codes already decode to names via ok64str/ron60. They just aren't composed into one line.

Planned

One uniform error-exit line, single-sourced, across every dog (be, sniff, keeper, graf, spot, bro, woof, mark, dog).

WIP

Design decisions

(pending — needs the ruling deferred to from BE-006: single-source the line in the PRO.h MAIN hook each dog populates, vs a dog/-level DOGFail(cli*, code) funnel, vs root-be-only printing with children silenced.)

TODOs

(audit 2026-07-07: nothing landed — dog/abc/PRO.h:384 still prints the bare Error: <CODE>; no DOGFail/reporter exists anywhere under beagle/; bespoke prints persist, e.g. keeper/WIRECLI.c:87.)

Blockers and bummers

Outcome

(pending)