Files
2026-07-13 12:35:23 +08:00

118 lines
5.9 KiB
PowerShell

param(
[string]$Root = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
)
$ErrorActionPreference = "Stop"
$failures = New-Object System.Collections.Generic.List[string]
function Add-Failure {
param([string]$Message)
$failures.Add($Message) | Out-Null
}
function Assert-File {
param([string]$RelativePath)
$path = Join-Path $Root $RelativePath
if (-not (Test-Path -LiteralPath $path)) {
Add-Failure "Missing file: $RelativePath"
}
}
function Assert-Contains {
param(
[string]$RelativePath,
[string]$Pattern,
[string]$Label
)
$path = Join-Path $Root $RelativePath
if (-not (Test-Path -LiteralPath $path)) {
Add-Failure "Cannot inspect missing file: $RelativePath"
return
}
$text = Get-Content -LiteralPath $path -Raw -Encoding UTF8
if ($text -notmatch $Pattern) {
Add-Failure "$RelativePath missing: $Label"
}
}
$requiredFiles = @(
"skills/paper-orchestration/SKILL.md",
"skills/evidence-driven-writing/SKILL.md",
"skills/evidence-driven-writing/references/gpr-introduction-example.md",
"skills/experiment-results-planning/SKILL.md",
"scripts/research_quality_gate.ps1"
)
foreach ($file in $requiredFiles) {
Assert-File $file
}
$frontmatter = @{
"skills/paper-orchestration/SKILL.md" = "name:\s*paper-orchestration"
"skills/evidence-driven-writing/SKILL.md" = "name:\s*evidence-driven-writing"
"skills/experiment-results-planning/SKILL.md" = "name:\s*experiment-results-planning"
}
foreach ($entry in $frontmatter.GetEnumerator()) {
Assert-Contains $entry.Key $entry.Value "valid skill frontmatter"
Assert-Contains $entry.Key "description:\s*Use when" "CSO-style trigger description"
}
Assert-Contains "skills/using-research-writing/SKILL.md" "paper-orchestration" "orchestration route"
Assert-Contains "skills/using-research-writing/SKILL.md" "capability-use audit" "capability-use audit gate"
Assert-Contains "skills/using-research-writing/SKILL.md" "paper-orchestration.*writing-chapters|quality" "medium/full-paper trigger"
Assert-Contains "skills/using-research-writing/SKILL.md" "paper-orchestration.*shape=box" "DOT flow includes orchestration"
Assert-Contains "skills/writing-chapters/SKILL.md" "evidence-driven-writing" "evidence-driven chapter routing"
Assert-Contains "skills/writing-chapters/SKILL.md" "输入.*输出|input-to-output" "methodology input-to-output flow"
Assert-Contains "skills/writing-chapters/SKILL.md" "正文污染|contamination firewall" "body contamination firewall"
Assert-Contains "skills/writing-chapters/SKILL.md" "contamination firewall|user requirements" "user-request exclusion rule"
Assert-Contains "skills/literature-review/SKILL.md" "证据.*论点|evidence.*claim" "evidence-claim mapping"
Assert-Contains "skills/literature-review/SKILL.md" "citation slot|引用位置" "citation placement planning"
Assert-Contains "skills/figures-python/SKILL.md" "data manifest|数据清单" "figure data manifest"
Assert-Contains "skills/figures-python/SKILL.md" "mock|模拟|synthetic" "mock data boundary"
Assert-Contains "skills/verification/SKILL.md" "check_skill_integrity\.ps1" "skill integrity verification"
Assert-Contains "skills/verification/SKILL.md" "research_quality_gate\.ps1" "manuscript quality gate verification"
Assert-Contains "SKILL.md" "paper-orchestration" "main skill list includes orchestration"
Assert-Contains "SKILL.md" "evidence-driven-writing" "main skill list includes evidence-driven writing"
Assert-Contains "SKILL.md" "experiment-results-planning" "main skill list includes experiment planning"
Assert-Contains "AGENTS.md" "paper-orchestration" "agent guide mentions orchestration"
Assert-Contains "CLAUDE.md" "paper-orchestration" "Claude guide mentions orchestration"
Assert-Contains "README.md" "paper-orchestration" "Chinese README mentions orchestration"
Assert-Contains "README_EN.md" "paper-orchestration" "English README mentions orchestration"
Assert-Contains "README.md" "research_quality_gate\.ps1" "Chinese README mentions quality gate"
Assert-Contains "README_EN.md" "research_quality_gate\.ps1" "English README mentions quality gate"
Assert-Contains "AGENTS.md" "research_quality_gate\.ps1" "agent guide mentions quality gate"
Assert-Contains "CLAUDE.md" "research_quality_gate\.ps1" "Claude guide mentions quality gate"
Assert-Contains "plan-template/project-overview.md" "task-packets" "plan template includes task packets"
Assert-Contains "plan-template/project-overview.md" "evidence-map\.md" "plan template includes evidence map"
Assert-Contains "plan-template/progress.md" "Capability-use audit" "progress template includes capability-use audit"
Assert-Contains "plan-template/stage-gates.md" "D0" "stage gates include experiment protocol gate"
Assert-Contains "plan-template/stage-gates.md" "D5" "stage gates include peer review gate"
Assert-Contains "skills/literature-review/SKILL.md" "--format json" "literature docs use supported JSON flag"
Assert-Contains "skills/literature-review/SKILL.md" "--output refs\.bib" "literature docs use supported output flag"
Assert-Contains "skills/paper-orchestration/SKILL.md" "plan/task-packets" "orchestration requires persistent task packets"
Assert-Contains "skills/paper-orchestration/SKILL.md" "Validation commands" "task packet includes validation commands"
Assert-Contains ".claude-plugin/plugin.json" '"version":\s*"3\.1\.0"' "Claude plugin version matches current skill"
Assert-Contains ".cursor-plugin/plugin.json" '"version":\s*"3\.1\.0"' "Cursor plugin version matches current skill"
Assert-Contains "CHANGELOG.md" "\[3\.1\.0\]" "changelog contains current version"
Assert-Contains "README.md" "3\.1\.0" "Chinese README version current"
Assert-Contains "README_EN.md" "Version:\s*3\.1\.0" "English README version current"
if ($failures.Count -gt 0) {
Write-Host "Skill integrity check failed:"
foreach ($failure in $failures) {
Write-Host " - $failure"
}
exit 1
}
Write-Host "Skill integrity check passed."