uw-unity-debugging-e4572a — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited uw-unity-debugging-e4572a (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
4-phase debugging framework. Also generates the GameDebug wrapper class.
GameDebug.cs already exists in the project (search for class GameDebug). If not, generate it using the template below during project setup.docs/ProjectConfig.yaml -> mcp.unity_mcp — if true, use read_console to read Unity console output.docs/CODING_STANDARDS.md for async patterns — bugs in async code often involve missing CancellationToken or unhandled OperationCanceledException.read_console via MCP or ask user for errors).git log -5 for recent changes.GameDebug.Log at decision points.Awake vs Start vs OnEnable)OnDisable/OnDestroyUpdate instead of FixedUpdatefix({scope}): {root cause description}Generate during project setup. Uses [Conditional("ENABLE_LOGS")] so all calls are stripped in release builds. Includes [CallerFilePath], [CallerMemberName], and [CallerLineNumber] for automatic context — no need to manually describe where a log came from.
using System.Diagnostics;
using System.Runtime.CompilerServices;
public enum LogTopic { General, Gameplay, Audio, UI, Network, Physics, AI }
public static class GameDebug
{
[Conditional("ENABLE_LOGS")]
public static void Log(
string message,
LogTopic topic = LogTopic.General,
[CallerFilePath] string file = "",
[CallerMemberName] string member = "",
[CallerLineNumber] int line = 0) =>
UnityEngine.Debug.Log(Format(topic, message, file, member, line));
[Conditional("ENABLE_LOGS")]
public static void LogWarning(
string message,
LogTopic topic = LogTopic.General,
[CallerFilePath] string file = "",
[CallerMemberName] string member = "",
[CallerLineNumber] int line = 0) =>
UnityEngine.Debug.LogWarning(Format(topic, message, file, member, line));
[Conditional("ENABLE_LOGS")]
public static void LogError(
string message,
LogTopic topic = LogTopic.General,
[CallerFilePath] string file = "",
[CallerMemberName] string member = "",
[CallerLineNumber] int line = 0) =>
UnityEngine.Debug.LogError(Format(topic, message, file, member, line));
private static string Format(
LogTopic topic, string msg, string file, string member, int line) {
var fileName = System.IO.Path.GetFileNameWithoutExtension(file);
return $"[{topic}] {fileName}.{member}:{line} — {msg}";
}
}Usage: GameDebug.Log("Player spawned", LogTopic.Gameplay); Output: [Gameplay] PlayerController.Start:42 — Player spawned
Add ENABLE_LOGS to Scripting Define Symbols for Development builds only. Customize LogTopic enum per project.
uw-unity-test-runner to add a test that catches the bug if it reappears.uw-code-review to verify the fix doesn't introduce new issues.uw-unity-editor-tools to add Gizmos or Handles for spatial debugging (visualize raycast paths, trigger volumes, etc.).GameDebug wrapper, never raw Debug.Log / Debug.LogWarning / Debug.LogError.ProjectConfig.yaml -> mcp.unity_mcp is true, use read_console for console output and run_tests to verify fixes.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.