{"record":{"id":"0dfb6b93056678c3","repo":"elsa-workflows/elsa-core","slug":"the-console-log-stream-filter-must-be-stdout-stderr-or-null","errorCode":null,"errorMessage":"The console log stream filter must be 'stdout', 'stderr', or null.","messagePattern":"The console log stream filter must be 'stdout', 'stderr', or null\\.","errorType":"validation","errorClass":"JsonException","httpStatus":null,"severity":"error","filePath":"src/modules/Elsa.Diagnostics.ConsoleLogs/Contracts/ConsoleStreamJsonConverter.cs","lineNumber":18,"sourceCode":"using System.Text.Json;\nusing System.Text.Json.Serialization;\n\nnamespace Elsa.Diagnostics.ConsoleLogs.Contracts;\n\n/// <summary>\n/// Converts the public console stream filter contract values.\n/// </summary>\npublic sealed class ConsoleStreamJsonConverter : JsonConverter<ConsoleStream?>\n{\n    public override ConsoleStream? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\n    {\n        return reader.TokenType switch\n        {\n            JsonTokenType.Null => null,\n            JsonTokenType.String => ReadString(reader.GetString()),\n            JsonTokenType.Number => ReadNumber(ref reader),\n            _ => throw new JsonException(\"The console log stream filter must be 'stdout', 'stderr', or null.\")\n        };\n    }\n\n    public override void Write(Utf8JsonWriter writer, ConsoleStream? value, JsonSerializerOptions options)\n    {\n        if (value == null)\n        {\n            writer.WriteNullValue();\n            return;\n        }\n\n        writer.WriteStringValue(value.Value switch\n        {\n            ConsoleStream.Stdout => \"stdout\",\n            ConsoleStream.Stderr => \"stderr\",\n            _ => throw new JsonException($\"Unsupported console stream value '{value}'.\")\n        });\n    }","sourceCodeStart":1,"sourceCodeEnd":36,"githubUrl":"https://github.com/elsa-workflows/elsa-core/blob/fe9217bdfa0e27f0e09e45006eb6898f616e513d/src/modules/Elsa.Diagnostics.ConsoleLogs/Contracts/ConsoleStreamJsonConverter.cs#L1-L36","documentation":"ConsoleStreamJsonConverter.Read deserializes a ConsoleStream? value in JSON. Only null tokens, valid strings (stdout/stderr/all), and integers mapping to defined ConsoleStream values are accepted; any other JSON token type (object, array, true/false, StartObject, etc.) produces this JsonException.","triggerScenarios":"POSTing or deserializing a console log stream filter where the stream field is a JSON object, array, boolean, or nested structure instead of a string or number.","commonSituations":"Sending {\"stream\": {\"$eq\": \"stdout\"}} from an over-engineered client; frontend passing a boolean flag; a client sending a nested filter object where a scalar is expected.","solutions":["Change the JSON payload so the stream field is \"stdout\", \"stderr\", \"all\", or null","Ensure numbers are sent as plain integers, not strings/objects","Fix the client-side serializer to emit the scalar enum value"],"exampleFix":"// before\n{ \"stream\": { \"name\": \"stdout\" } }\n// after\n{ \"stream\": \"stdout\" }","handlingStrategy":"type-guard","validationCode":"bool IsValidStreamFilter(object? v) => v is null or string { } s && s is \"\" or \"all\" or \"stdout\" or \"stderr\" or int i && Enum.IsDefined(typeof(ConsoleStream), i);","typeGuard":"bool IsScalarStream(object? v) => v is null or string or int or long;","tryCatchPattern":"try { filter = JsonSerializer.Deserialize<ElsaConsoleLogFilter>(payload); }\ncatch (JsonException ex) when (ex.Message.Contains(\"console log stream filter\"))\n{ filter = new ElsaConsoleLogFilter(); /* default */ }","preventionTips":["Emit only string ('stdout','stderr','all') or defined numeric values for stream filters","Share the filter DTO/contract between client and server","Validate client payloads against a JSON schema"],"tags":["json","deserialization","signalr","console-logs"],"backgroundTag":"invalid-enum-value","analyzedSha":"fe9217bdfa0e27f0e09e45006eb6898f616e513d","analyzedAt":"2026-09-13T20:32:34.702Z","contentChangedAt":"2026-09-13T20:32:34.702Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}