Publishing public pipeline diagnostics
Plugins can emit structured public diagnostics when they run in a pipeline. These diagnostics appear alongside public content and are intended to help uploaders understand failures and ask the community for help.
Public diagnostics are not debug logs. Private implementation details belong in the internal plugin log, which is restricted to administrators with plugin-management permission.
Diagnostic shape
type PublicDiagnostic = {
level: "INFO" | "WARNING" | "ERROR";
code: string;
message: string;
details?: unknown;
helpUrl?: string;
};
Use the pipeline runtime's public diagnostic callback to publish this data. Continue to use the internal logging API for provider responses, request IDs, stack traces, and debugging context.
Author requirements
- Use a stable uppercase
codecontaining letters, numbers, and underscores. - Write a concise, non-technical
message. - Keep
detailsbounded, JSON-serializable, and safe for anonymous visitors. - Use an HTTPS
helpUrl. - Describe the actionable cause rather than transient implementation details.
- Document plugin-specific codes and preserve their meaning after publication.
Never publish:
- credentials, tokens, cookies, or authorization headers;
- signed URLs or private storage paths;
- email addresses, IP addresses, or private identifiers;
- raw request or response bodies;
- stack traces or internal prompt-debug data;
- moderation data that contains private information;
- provider internals that would materially help someone evade a check;
- unbounded arbitrary payloads.
The host validates, bounds, and redacts public diagnostics before storage. Invalid entries are discarded. Existing arbitrary log output remains internal unless a plugin deliberately adopts this contract.
Designing useful codes
Prefer a small set of stable codes that identify categories people can act on. For example:
ctx.diagnostics.public({
level: "ERROR",
code: "ARCHIVE_CONTAINS_EXECUTABLE",
message: "The archive contains an executable file.",
details: {path: "setup.exe"},
helpUrl: "https://example.com/help/archive-check",
});
The diagnostic should remain useful when copied into a support discussion. Do not require consumers to parse the human-readable message; use the stable code for programmatic behavior.
Compatibility
Pipeline attempts snapshot the plugin version and resolved configuration used
for that execution. Adding optional fields to details is compatible, but
renaming a code or changing its meaning is not.
For current first-party codes and operational guidance, see Plugin pipelines.