118 lines
5.9 KiB
PowerShell
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."
|