Kalsa/scripts/lore/test-phase-boundary-intake.ps1
2026-08-23 16:17:37 +02:00

127 lines
5.9 KiB
PowerShell

$ErrorActionPreference = 'Stop'
$tempBase = [System.IO.Path]::GetFullPath([System.IO.Path]::GetTempPath()).TrimEnd('\', '/')
$fixture = Join-Path $tempBase ("kalsa-phase-intake-" + [guid]::NewGuid().ToString())
New-Item -ItemType Directory -Path $fixture | Out-Null
$fixtureFull = [System.IO.Path]::GetFullPath($fixture)
if (-not $fixtureFull.StartsWith($tempBase + [System.IO.Path]::DirectorySeparatorChar, [System.StringComparison]::OrdinalIgnoreCase)) {
throw 'Refusing to create phase-intake fixture outside the system temporary directory'
}
function Invoke-FixtureGit {
param([Parameter(Mandatory = $true)][string[]]$Arguments)
$output = & git -C $fixtureFull @Arguments 2>&1
if ($LASTEXITCODE -ne 0) {
throw "Fixture git command failed: git $($Arguments -join ' ')`n$($output -join "`n")"
}
return @($output)
}
function Assert-CheckerFails {
param(
[Parameter(Mandatory = $true)][string]$Boundary,
[Parameter(Mandatory = $true)][string]$Message
)
$caught = $false
try {
& (Join-Path $PSScriptRoot 'check-phase-boundary-intake.ps1') `
-Boundary $Boundary `
-PacketPath 'packet.md' `
-PassPath 'pass.md' `
-RepositoryRoot $fixtureFull | Out-Null
}
catch {
$caught = $true
}
if (-not $caught) {
throw $Message
}
}
try {
New-Item -ItemType Directory -Path (Join-Path $fixtureFull 'Kalsa\Spoilers\Reference') -Force | Out-Null
Set-Content -LiteralPath (Join-Path $fixtureFull 'Owner.md') -Encoding utf8 -Value "# Owner`n"
Invoke-FixtureGit -Arguments @('init', '-b', 'main') | Out-Null
Invoke-FixtureGit -Arguments @('add', '--', 'Owner.md') | Out-Null
Invoke-FixtureGit -Arguments @('-c', 'user.name=Kalsa Tests', '-c', 'user.email=kalsa-tests@example.invalid', 'commit', '-m', 'Fixture baseline') | Out-Null
$baseCommit = ([string](Invoke-FixtureGit -Arguments @('rev-parse', 'HEAD') | Select-Object -First 1)).Trim()
$ownerHash = (Get-FileHash -LiteralPath (Join-Path $fixtureFull 'Owner.md') -Algorithm SHA1).Hash.ToLowerInvariant()
Set-Content -LiteralPath (Join-Path $fixtureFull 'packet.md') -Encoding utf8 -Value @"
---
packet_id: TEST-01
candidate_identity: raw-sha1-manifest-recorded-below
---
# Packet
``````text
$ownerHash Owner.md
``````
"@
Set-Content -LiteralPath (Join-Path $fixtureFull 'pass.md') -Encoding utf8 -Value @"
---
pass_id: TEST-01
intake_base_commit: $baseCommit
---
# Pass
## Phase-boundary intake
| Proposal or handoff note | Disposition | Reason or destination |
| --- | --- | --- |
"@
$workingNote = 'Kalsa/Spoilers/Reference/Working Handoff.md'
Set-Content -LiteralPath (Join-Path $fixtureFull $workingNote) -Encoding utf8 -Value "---`nstatus: adopted-candidate`n---`n`n# Working handoff`n"
Assert-CheckerFails -Boundary 'review' -Message 'Intake checker failed to reject an untracked handoff outside the packet'
Invoke-FixtureGit -Arguments @('add', '--', $workingNote) | Out-Null
Assert-CheckerFails -Boundary 'review' -Message 'Intake checker failed to reject a staged handoff outside the packet'
Invoke-FixtureGit -Arguments @('reset', 'HEAD', '--', $workingNote) | Out-Null
Add-Content -LiteralPath (Join-Path $fixtureFull 'pass.md') -Encoding utf8 -Value "| ``$workingNote`` | defer | Route to TEST-02 before integration. |"
& (Join-Path $PSScriptRoot 'check-phase-boundary-intake.ps1') `
-Boundary review `
-PacketPath 'packet.md' `
-PassPath 'pass.md' `
-RepositoryRoot $fixtureFull | Out-Null
$committedNote = 'Kalsa/Spoilers/Reference/Committed Proposal.md'
Set-Content -LiteralPath (Join-Path $fixtureFull $committedNote) -Encoding utf8 -Value "---`nstatus: proposal`n---`n`n# Committed proposal`n"
Invoke-FixtureGit -Arguments @('add', '--', $committedNote) | Out-Null
Invoke-FixtureGit -Arguments @('-c', 'user.name=Kalsa Tests', '-c', 'user.email=kalsa-tests@example.invalid', 'commit', '-m', 'Add proposal during pass') | Out-Null
Assert-CheckerFails -Boundary 'closure' -Message 'Intake checker failed to reject a committed proposal outside the packet'
Add-Content -LiteralPath (Join-Path $fixtureFull 'pass.md') -Encoding utf8 -Value "| ``$committedNote`` | reject | Superseded by the named owner record. |"
& (Join-Path $PSScriptRoot 'check-phase-boundary-intake.ps1') `
-Boundary closure `
-PacketPath 'packet.md' `
-PassPath 'pass.md' `
-RepositoryRoot $fixtureFull | Out-Null
$includedNote = 'Kalsa/Spoilers/Reference/Included Handoff.md'
Set-Content -LiteralPath (Join-Path $fixtureFull $includedNote) -Encoding utf8 -Value "---`ntype: handoff`n---`n`n# Included handoff`n"
$includedHash = (Get-FileHash -LiteralPath (Join-Path $fixtureFull $includedNote) -Algorithm SHA1).Hash.ToLowerInvariant()
Add-Content -LiteralPath (Join-Path $fixtureFull 'packet.md') -Encoding utf8 -Value "$includedHash $includedNote"
& (Join-Path $PSScriptRoot 'check-phase-boundary-intake.ps1') `
-Boundary review `
-PacketPath 'packet.md' `
-PassPath 'pass.md' `
-RepositoryRoot $fixtureFull | Out-Null
Add-Content -LiteralPath (Join-Path $fixtureFull $includedNote) -Encoding utf8 -Value "Changed after freeze."
Assert-CheckerFails -Boundary 'closure' -Message 'Intake checker failed to reject a packeted handoff changed after freeze'
Write-Output 'Phase-boundary intake tests passed for committed, staged/working, deferred, rejected, packeted, and post-freeze-changed notes.'
}
finally {
$resolvedFixture = [System.IO.Path]::GetFullPath($fixtureFull)
if ($resolvedFixture.StartsWith($tempBase + [System.IO.Path]::DirectorySeparatorChar, [System.StringComparison]::OrdinalIgnoreCase) -and
([System.IO.Path]::GetFileName($resolvedFixture) -like 'kalsa-phase-intake-*') -and
(Test-Path -LiteralPath $resolvedFixture)) {
Remove-Item -LiteralPath $resolvedFixture -Recurse -Force
}
}