Public/Get-TaxEditorDataCommit.ps1

# Copyright (c) 2026 Jeffrey Snover. All rights reserved.
# Licensed under the MIT License. See LICENSE file in the project root.

function Get-TaxEditorDataCommit {
    <#
    .SYNOPSIS
        Lists recent commits in the taxonomy data repository.
    .DESCRIPTION
        Queries the GitHub API for recent commits in jpsnover/ai-triad-data.
        Returns typed DataCommit objects with SHA, message, author, and date.
        Requires GITHUB_TOKEN environment variable.
    .PARAMETER Last
        Number of commits to return (1-100). Default: 20.
    .PARAMETER Repo
        GitHub repo in owner/name format. Default: jpsnover/ai-triad-data.
    .EXAMPLE
        Get-TaxEditorDataCommit -Last 5
    .EXAMPLE
        Get-TaxEditorDataCommit | Where-Object Message -like '*migration*'
    .LINK
        Show-AITriadHelp
    .LINK
        Get-TaxEditorBlob
    .LINK
        Restore-TaxEditorBlob
    .LINK
        Restore-TaxEditorKnownGood
    .LINK
        Set-TaxEditorKnownGood
    .LINK
        Sync-TaxEditorData
    .LINK
        Undo-TaxEditorDataCommit
    #>

    [CmdletBinding()]
    param(
        [Parameter(Position = 0)]
        [ValidateRange(1, 100)]
        [int]$Last = 20,

        [Parameter()]
        [string]$Repo = 'jpsnover/ai-triad-data'
    )

    Set-StrictMode -Version Latest

    $Commits = Invoke-GitHubApi `
        -Endpoint "/repos/$Repo/commits?per_page=$Last" `
        -CallerName 'Get-TaxEditorDataCommit'

    foreach ($C in $Commits) {
        $Obj = [DataCommit]::new()
        $Obj.Sha     = $C.sha
        $Obj.ShortSha = $C.sha.Substring(0, 7)
        $Obj.Message = ($C.commit.message -split "`n")[0]
        $Obj.Author  = $C.commit.author.name
        $Obj.Date    = $C.commit.author.date
        $Obj
    }
}