{ "timestamp": "2026-03-16T05:32:38.435586Z", "current_node": "setup", "completed_nodes": [ "start", "setup" ], "node_retries": { "start": 1, "setup": 1 }, "context_values": { "internal.thread_id": "start", "graph.goal": "UsernameValidator allows trailing newline in usernames\nDescription\n\t\nASCIIUsernameValidator and UnicodeUsernameValidator use the regex \nr'^[\\w.@+-]+$'\nThe intent is to only allow alphanumeric characters as well as ., @, +, and -. However, a little known quirk of Python regexes is that $ will also match a trailing newline. Therefore, the user name validators will accept usernames which end with a newline. You can avoid this behavior by instead using \\A and \\Z to terminate regexes. For example, the validator regex could be changed to\nr'\\A[\\w.@+-]+\\Z'\nin order to reject usernames that end with a newline.\nI am not sure how to officially post a patch, but the required change is trivial - using the regex above in the two validators in contrib.auth.validators.\n", "current.preamble": "Goal: UsernameValidator allows trailing newline in usernames\nDescription\n\t\nASCIIUsernameValidator and UnicodeUsernameValidator use the regex \nr'^[\\w.@+-]+$'\nThe intent is to only allow alphanumeric characters as well as ., @, +, and -. However, a little known quirk of Python regexes is that $ will also match a trailing newline. Therefore, the user name validators will accept usernames which end with a newline. You can avoid this behavior by instead using \\A and \\Z to terminate regexes. For example, the validator regex could be changed to\nr'\\A[\\w.@+-]+\\Z'\nin order to reject usernames that end with a newline.\nI am not sure how to officially post a patch, but the required change is trivial - using the regex above in the two validators in contrib.auth.validators.\n\n", "internal.fidelity": "compact", "internal.node_visit_count": 1, "command.stderr": "", "command.output": "fatal: destination path '.' already exists and is not an empty directory.\n", "failure_signature": "setup|deterministic|script failed with exit code: ## stdout fatal: destination path '.' already exists and is not an empty directory.", "graph.rankdir": "LR", "internal.retry_count.start": 1, "failure_class": "deterministic", "thread.start.current_node": "setup", "outcome": "fail", "internal.retry_count.setup": 1, "internal.run_id": "01KKTJ3AE7ZTCWABE6W5ZVRY4N", "current_node": "setup" }, "logs": [], "node_outcomes": { "start": { "status": "success", "duration_ms": 0 }, "setup": { "status": "fail", "context_updates": { "command.stderr": "", "command.output": "fatal: destination path '.' already exists and is not an empty directory.\n" }, "failure": { "message": "Script failed with exit code: 128\n\n## stdout\nfatal: destination path '.' already exists and is not an empty directory.\n", "failure_class": "deterministic" }, "duration_ms": 83 } }, "next_node_id": "solve", "loop_failure_signatures": { "setup|deterministic|script failed with exit code: ## stdout fatal: destination path '.' already exists and is not an empty directory.": 1 }, "node_visits": { "start": 1, "setup": 1 } }