Public/Register-FDALogLevel.ps1

function Register-FDALogLevel {
    <#
    .SYNOPSIS
        Register a custom logging level (or override a built-in).

    .DESCRIPTION
        Adds a row to FDALogLevels (versioned, latest-wins per Name). After
        registration, the level resolves through Resolve-LogLevel and can be
        used anywhere a level is accepted:
            Write-FDALog -Level 'Audit' -Message ...
            Search-FDALog -MinLevel 'Audit'

    .PARAMETER Name
        Level name (e.g., 'Audit', 'Compliance').

    .PARAMETER Numeric
        Numeric weight (typically 0-100; built-ins use 10/30/50/70/90).
        Threshold comparisons use this number.

    .PARAMETER Category
        Logical grouping (e.g., 'Compliance', 'Cost', 'Security').

    .PARAMETER Description
        Free-text description shown by Get-FDALogLevel.

    .EXAMPLE
        Register-FDALogLevel -Name 'Audit' -Numeric 60 -Category 'Compliance' `
            -Description 'Recordable governance events for SOX/SOC2.'

    .EXAMPLE
        Register-FDALogLevel -Name 'Trace' -Numeric 5 -Category 'Diagnostics'
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string] $Name,

        [Parameter(Mandatory)]
        [ValidateRange(0, 1000)]
        [int] $Numeric,

        [string] $Category = 'Custom',
        [string] $Description = '',
        [string] $RegisteredBy = ($env:USERNAME ?? 'system')
    )

    if (-not $script:FDAState.Connected) {
        throw 'Not connected. Call Connect-FDAObservability first.'
    }

    $record = [pscustomobject]@{
        Timestamp    = (Get-Date).ToUniversalTime().ToString('o')
        Name         = $Name
        Numeric      = $Numeric
        Category     = $Category
        Description  = $Description
        IsBuiltIn    = $false
        IsActive     = $true
        RegisteredBy = $RegisteredBy
    }
    Invoke-EventhouseIngest -TableName 'FDALogLevels' -MappingName 'FDALogLevelsMapping' -Records @($record) | Out-Null

    # Refresh cache.
    Get-FDALogLevel -Force | Out-Null
    [pscustomobject]@{ Registered = $Name; Numeric = $Numeric; Category = $Category }
}