Files
natsnet/tools/NatsNet.PortTracker/Commands/OverrideCommands.cs
Joseph Doherty 7a338dd510 feat: add audit-verified status updates with override tracking
Status updates (feature/test update and batch-update) now verify the
requested status against Roslyn audit classification. Mismatches
require --override "reason" to force. Overrides are logged to a new
status_overrides table and reviewable via 'override list' command.
2026-02-27 05:50:15 -05:00

67 lines
2.3 KiB
C#

using System.CommandLine;
using NatsNet.PortTracker.Data;
namespace NatsNet.PortTracker.Commands;
public static class OverrideCommands
{
public static Command Create(Option<string> dbOption)
{
var overrideCommand = new Command("override", "Review status override records");
var typeOpt = new Option<string?>("--type")
{
Description = "Filter by table: features or tests"
};
var listCmd = new Command("list", "List all status overrides");
listCmd.Add(typeOpt);
listCmd.SetAction(parseResult =>
{
var dbPath = parseResult.GetValue(dbOption)!;
var type = parseResult.GetValue(typeOpt);
using var db = new Database(dbPath);
var sql = "SELECT id, table_name, item_id, audit_status, requested_status, comment, created_at FROM status_overrides";
var parameters = new List<(string, object?)>();
if (type is not null)
{
var tableName = type switch
{
"features" => "features",
"tests" => "unit_tests",
_ => type
};
sql += " WHERE table_name = @table";
parameters.Add(("@table", tableName));
}
sql += " ORDER BY created_at DESC";
var rows = db.Query(sql, parameters.ToArray());
if (rows.Count == 0)
{
Console.WriteLine("No overrides found.");
return;
}
Console.WriteLine($"{"ID",-5} {"Table",-12} {"Item",-6} {"Audit",-10} {"Requested",-10} {"Comment",-35} {"Date",-20}");
Console.WriteLine(new string('-', 98));
foreach (var row in rows)
{
Console.WriteLine($"{row["id"],-5} {row["table_name"],-12} {row["item_id"],-6} {row["audit_status"],-10} {row["requested_status"],-10} {Truncate(row["comment"]?.ToString(), 34),-35} {row["created_at"],-20}");
}
Console.WriteLine($"\nTotal: {rows.Count} overrides");
});
overrideCommand.Add(listCmd);
return overrideCommand;
}
private static string Truncate(string? s, int maxLen)
{
if (s is null) return "";
return s.Length <= maxLen ? s : s[..(maxLen - 2)] + "..";
}
}