diff --git a/scripts/test-shell-packages.ps1 b/scripts/test-shell-packages.ps1 index 5f49ef1..30b0e4c 100644 --- a/scripts/test-shell-packages.ps1 +++ b/scripts/test-shell-packages.ps1 @@ -22,8 +22,16 @@ foreach ($shell in @('powershell','bash')) { $package = Join-Path $root "generated/$client-$shell" $file = if ($client -eq 'codex') { 'config.toml' } else { 'settings.json' } $content = Get-Content -LiteralPath (Join-Path $package $file) -Raw + if ($client -eq 'codex') { + foreach ($entry in @(Import-Csv (Join-Path $root 'adapters/claude/rule-skills.tsv') -Delimiter ([char]9))) { + $rulePath = $entry.rule_file + if (Test-Path (Join-Path $root "shared/rules/$($entry.rule_file)") -PathType Container) { $rulePath = "$($entry.rule_file)/index.md" } + if ((Get-Content (Join-Path $package 'AGENTS.md') -Raw) -notmatch [regex]::Escape("- rules/$rulePath for $($entry.trigger).")) { throw "Codex rule loading is missing $($entry.rule_file) in $package" } + } + } if ($client -eq 'claude') { $settings = $content | ConvertFrom-Json } if (@(Get-ChildItem "$package/agents" -File).Count -ne $sourceAgentCount) { throw "Missing agents in $package" } + if ($client -eq 'claude' -and (Get-Content (Join-Path $package 'agents/reviewer.md') -Raw) -notmatch '(?m)^tools: Read,Diff,Search\r?$') { throw "Reviewer capability profile is missing in $package" } $expectedSkillCount = if ($client -eq 'claude') { $sourceSkillCount + $ruleSkillCount } else { $sourceSkillCount } if (@(Get-ChildItem "$package/skills" -Filter SKILL.md -Recurse).Count -ne $expectedSkillCount) { throw "Missing skills in $package" } $expected = if ($shell -eq 'powershell') { '__POWERSHELL_COMMAND__ .*flashbang.ps1' } else { 'bash .*flashbang.sh' } diff --git a/scripts/test-shell-packages.sh b/scripts/test-shell-packages.sh index 3c0b9e8..cd9e56a 100644 --- a/scripts/test-shell-packages.sh +++ b/scripts/test-shell-packages.sh @@ -31,7 +31,17 @@ for shell in powershell bash; do file=config.toml [ "$client" != claude ] || file=settings.json test -f "$package/$file" + if [ "$client" = codex ]; then + while IFS=$'\t' read -r rule_file skill_name trigger; do + [ "$rule_file" = rule_file ] && continue + [ -n "$rule_file" ] || continue + rule_path=$rule_file + [ -d "$root/shared/rules/$rule_file" ] && rule_path="$rule_file/index.md" + grep -Fq -- "- rules/$rule_path for $trigger." "$package/AGENTS.md" + done < "$root/adapters/claude/rule-skills.tsv" + fi test "$(find "$package/agents" -type f | wc -l)" -eq "$source_agent_count" + if [ "$client" = claude ]; then grep -q '^tools: Read,Diff,Search$' "$package/agents/reviewer.md"; fi expected_skill_count=$source_skill_count [ "$client" != claude ] || expected_skill_count=$((source_skill_count + rule_skill_count)) test "$(find "$package/skills" -name SKILL.md | wc -l)" -eq "$expected_skill_count" diff --git a/shared/agents/reviewer/instructions.md b/shared/agents/reviewer/instructions.md index e6afe44..878e826 100644 --- a/shared/agents/reviewer/instructions.md +++ b/shared/agents/reviewer/instructions.md @@ -2,4 +2,6 @@ Provide analytical correctness review using the acceptance criteria and actual git diff. Inspect changed symbols first, then direct callers, dependencies, tests, and contracts needed to judge correctness. Expand for shared state, configuration, persistence, security, generated code, or public API effects; avoid broad repository exploration by default. +For each finding, report SEVERITY (blocking, important, or minor), LOCATION, IMPACT, EVIDENCE, and SCOPE (introduced, pre-existing, or uncertain). Do not report stylistic preferences or pre-existing issues unless they materially affect the requested change. Prioritize actionable correctness defects, keep unrelated cleanup out of scope, and use blocking only for security, data-loss, broken contracts, or deterministic failures. + Check logic, regressions, architecture, maintainability, security, and contract consistency. Do not automatically rerun the full test suite or duplicate a verifier's evidence. Follow the shared orchestration handoff protocol; report actionable findings with severity and evidence. Do not modify implementation code unless assigned.