.claude/settings.json

{
  "permissions": {
    "allow": [
      "mcp__claude_ai_Canva__resolve-shortlink",
      "WebFetch(domain:www.canva.com)",
      "PowerShell($ids = @\\('ZeajQux9lX2yMKP','lzVDVWdVfdDutV4','TYMcRP3_CVNpmwL','2KuZnXt2Wo9RJ3D'\\); foreach \\($id in $ids\\) { try { $r = Invoke-WebRequest -Uri \"https://www.canva.com/d/$id\" -MaximumRedirection 0 -ErrorAction Stop } catch { $resp = $_.Exception.Response; if \\($resp\\) { \"$id -> status=$\\([int]$resp.StatusCode\\) location=$\\($resp.Headers.Location\\)\" } else { \"$id -> exception: $\\($_.Exception.Message\\)\" } } })",
      "mcp__claude_ai_Canva__search-designs",
      "mcp__claude_ai_Canva__get-export-formats",
      "mcp__claude_ai_Canva__export-design",
      "PowerShell($dir = 'C:\\\\Sysadmin\\\\Scripts\\\\GitEasy\\\\docs\\\\images'; $map = @{ 'Infographic - GitEasy First-Time Setup.png' = 'first-time-setup.png'; 'Infographic - Step 1.png' = 'daily-workflow.png'; 'Infographic - GitEasy Command Reference Card.png' = 'command-reference.png' }; foreach \\($src in $map.Keys\\) { $from = Join-Path $dir $src; $to = Join-Path $dir $map[$src]; if \\(Test-Path $from\\) { Rename-Item -Path $from -NewName $map[$src] -Force; Write-Host \"RENAMED $src -> $\\($map[$src]\\)\" } else { Write-Host \"MISSING $src\" } }; Write-Host '---'; Get-ChildItem $dir | Select-Object Name, @{n='KB';e={[Math]::Round\\($_.Length/1KB,1\\)}} | Format-Table -AutoSize)",
      "Bash(git add *)",
      "Bash(git commit -m ' *)",
      "PowerShell($m = Test-ModuleManifest .\\\\GitEasy.psd1 -ErrorAction Stop; Write-Host \"Test-ModuleManifest: OK\" -ForegroundColor Green; Write-Host \"Name : $\\($m.Name\\)\"; Write-Host \"Version : $\\($m.Version\\)\"; Write-Host \"Author : $\\($m.Author\\)\"; Write-Host \"Description : $\\($m.Description.Substring\\(0, [Math]::Min\\(100,$m.Description.Length\\)\\)\\)...\"; Write-Host \"Functions : $\\($m.ExportedFunctions.Count\\)\"; Write-Host \"Tags : $\\($m.PrivateData.PSData.Tags -join ', '\\)\"; Write-Host \"LicenseUri : $\\($m.PrivateData.PSData.LicenseUri\\)\"; Write-Host \"IconUri : $\\($m.PrivateData.PSData.IconUri\\)\"; Write-Host \"ProjectUri : $\\($m.PrivateData.PSData.ProjectUri\\)\"; Write-Host \"ReleaseNotes char count: $\\($m.PrivateData.PSData.ReleaseNotes.Length\\)\"; Write-Host \"CompatiblePSEditions: $\\($m.CompatiblePSEditions -join ', '\\)\")",
      "PowerShell($result = Invoke-Pester -Path .\\\\Tests\\\\GitEasy.PublishReadiness.Tests.ps1 -PassThru -Show Summary; Write-Host \"\"; Write-Host \"Passed: $\\($result.PassedCount\\), Failed: $\\($result.FailedCount\\), Total: $\\($result.TotalCount\\)\" -ForegroundColor $\\(if\\($result.FailedCount -eq 0\\){'Green'}else{'Red'}\\))",
      "PowerShell(.\\\\tools\\\\Run-GitEasyPester.ps1 -Quiet 2>&1)",
      "Bash(grep -nE '\\\\[-\\\\]|FAIL|expected|Should Be' /c/Temp/pester-run.log 2>&1 | head -80)",
      "Read(//c/Temp/**)",
      "PowerShell(Get-Content C:\\\\Temp\\\\pester-run.log | Select-String -Pattern 'Failed|Passed:|Total:|Tests Passed|\\\\[\\\\-\\\\]|expected ' | Select-Object -Last 50 | ForEach-Object { $_.Line })",
      "PowerShell($lines = Get-Content C:\\\\Temp\\\\pester-run.log; $failedIndexes = $lines | ForEach-Object -Begin { $i = 0 } -Process { if \\($_ -match '\\\\[\\\\-\\\\]|\\\\bFailed\\\\b|Should '\\) { [PSCustomObject]@{Index=$i; Line=$_} }; $i++ } | Where-Object { $_.Line -match '\\\\[\\\\-\\\\]' -or $_.Line -match 'Expected' }; foreach \\($f in $failedIndexes\\) { Write-Host \"--- Line $\\($f.Index\\) ---\" -ForegroundColor Yellow; $lines[$f.Index..\\([Math]::Min\\($f.Index+8, $lines.Count-1\\)\\)] | ForEach-Object { Write-Host $_ } })",
      "PowerShell($lines = Get-Content C:\\\\Temp\\\\pester-run.log; Write-Host \"Total lines: $\\($lines.Count\\)\"; Write-Host \"First 10:\"; $lines | Select-Object -First 10; Write-Host ''; Write-Host \"Last 30:\"; $lines | Select-Object -Last 30)",
      "PowerShell(Remove-Module Pester -Force -EA SilentlyContinue; $p = Get-Module -ListAvailable Pester | Where-Object Version -lt 4.0 | Select-Object -First 1; Import-Module $p.Path -Force; $r = Invoke-Pester -Path .\\\\Tests -PassThru -Quiet; $r.TestResult | Where-Object { -not $_.Passed } | ForEach-Object { Write-Host \"FAIL: $\\($_.Describe\\) > $\\($_.Name\\)\" -ForegroundColor Red; Write-Host \" $\\($_.FailureMessage\\)\" -ForegroundColor DarkRed })",
      "PowerShell(Remove-Module Pester -Force -EA SilentlyContinue; $p = Get-Module -ListAvailable Pester | Where-Object { [version]$_.Version -lt [version]'4.0.0' } | Sort-Object Version -Descending | Select-Object -First 1; Write-Host \"Loading Pester $\\($p.Version\\)\"; Import-Module $p.Path -Force; $r = Invoke-Pester -Script .\\\\Tests -PassThru -Quiet; Write-Host \"\"; Write-Host \"Total=$\\($r.TotalCount\\) Passed=$\\($r.PassedCount\\) Failed=$\\($r.FailedCount\\)\"; $r.TestResult | Where-Object { -not $_.Passed } | ForEach-Object { Write-Host \"\"; Write-Host \"FAIL Describe : $\\($_.Describe\\)\" -ForegroundColor Red; Write-Host \" Name : $\\($_.Name\\)\" -ForegroundColor Red; Write-Host \" Failure : $\\($_.FailureMessage\\)\" -ForegroundColor DarkRed })",
      "Bash(gh pr create --base main --head psgallery-prep --title 'psgallery: prepare every Gallery-surfaced metadata field + verification tooling' --body ' *)",
      "PowerShell(Remove-Module Pester -Force -EA SilentlyContinue; $p = Get-Module -ListAvailable Pester | Where-Object { [version]$_.Version -lt [version]'4.0.0' } | Sort-Object Version -Descending | Select-Object -First 1; Import-Module $p.Path -Force; $r = Invoke-Pester -Script .\\\\Tests -PassThru -Quiet; Write-Host \"\"; Write-Host \"Pester $\\($p.Version\\): Total=$\\($r.TotalCount\\) Passed=$\\($r.PassedCount\\) Failed=$\\($r.FailedCount\\)\"; $r.TestResult | Where-Object { -not $_.Passed } | ForEach-Object { Write-Host \"FAIL: $\\($_.Describe\\) > $\\($_.Name\\)\" -ForegroundColor Red; Write-Host \" $\\($_.FailureMessage\\)\" -ForegroundColor DarkRed })",
      "Bash(git merge *)",
      "PowerShell(Remove-Module Pester -Force -EA SilentlyContinue; $p = Get-Module -ListAvailable Pester | Where-Object { [version]$_.Version -lt [version]'4.0.0' } | Sort-Object Version -Descending | Select-Object -First 1; Import-Module $p.Path -Force; $r = Invoke-Pester -Script .\\\\Tests -PassThru -Quiet; Write-Host \"Pester $\\($p.Version\\): Total=$\\($r.TotalCount\\) Passed=$\\($r.PassedCount\\) Failed=$\\($r.FailedCount\\)\"; if \\($r.FailedCount -gt 0\\) { $r.TestResult | Where-Object { -not $_.Passed } | ForEach-Object { Write-Host \"FAIL: $\\($_.Describe\\) > $\\($_.Name\\) -- $\\($_.FailureMessage\\)\" -ForegroundColor Red } })",
      "PowerShell(.\\\\tools\\\\Run-GitEasyPester.ps1 -Coverage -Quiet 2>&1)",
      "PowerShell(.\\\\tools\\\\Audit-GEUsage.ps1 2>&1)",
      "Bash(git rm *)",
      "PowerShell(.\\\\tools\\\\Publish-GitEasy.ps1 -SkipTests -SkipNetworkChecks 2>&1)",
      "PowerShell($svgs = @\\('docs\\\\images\\\\hero.svg', 'docs\\\\images\\\\why-one-command.svg'\\); foreach \\($s in $svgs\\) { if \\(Test-Path $s\\) { $size = \\(Get-Item $s\\).Length; try { [xml]$x = Get-Content $s -Raw; $hasSvg = $x.DocumentElement.LocalName -eq 'svg'; $vb = $x.svg.viewBox; Write-Host \\(\"OK {0} size={1}b viewBox='{2}' rootElement={3}\" -f $s, $size, $vb, $x.DocumentElement.LocalName\\) -ForegroundColor Green } catch { Write-Host \\(\"FAIL parse {0}: {1}\" -f $s, $_.Exception.Message\\) -ForegroundColor Red } } else { Write-Host \"MISSING $s\" -ForegroundColor Yellow } })"
    ]
  }
}