Auto-sync: 2026-04-21 00:02
This commit is contained in:
@@ -10,18 +10,23 @@
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Keep in sync with AGENT_DIRS in scripts/convert.sh
|
||||
AGENT_DIRS=(
|
||||
academic
|
||||
design
|
||||
engineering
|
||||
finance
|
||||
game-development
|
||||
marketing
|
||||
paid-media
|
||||
product
|
||||
project-management
|
||||
testing
|
||||
support
|
||||
sales
|
||||
spatial-computing
|
||||
specialized
|
||||
strategy
|
||||
support
|
||||
testing
|
||||
)
|
||||
|
||||
REQUIRED_FRONTMATTER=("name" "description" "color")
|
||||
@@ -30,9 +35,30 @@ RECOMMENDED_SECTIONS=("Identity" "Core Mission" "Critical Rules")
|
||||
errors=0
|
||||
warnings=0
|
||||
|
||||
classify_header_target() {
|
||||
local header_lower="$1"
|
||||
|
||||
if [[ "$header_lower" =~ identity ]] ||
|
||||
[[ "$header_lower" =~ learning.*memory ]] ||
|
||||
[[ "$header_lower" =~ communication ]] ||
|
||||
[[ "$header_lower" =~ style ]] ||
|
||||
[[ "$header_lower" =~ critical.rule ]] ||
|
||||
[[ "$header_lower" =~ rules.you.must.follow ]]; then
|
||||
printf 'soul'
|
||||
else
|
||||
printf 'agents'
|
||||
fi
|
||||
}
|
||||
|
||||
lint_file() {
|
||||
local file="$1"
|
||||
|
||||
if [[ ! -f "$file" ]]; then
|
||||
echo "ERROR $file: not a file or does not exist"
|
||||
errors=$((errors + 1))
|
||||
return
|
||||
fi
|
||||
|
||||
# 1. Check frontmatter delimiters
|
||||
local first_line
|
||||
first_line=$(head -1 "$file")
|
||||
@@ -71,11 +97,39 @@ lint_file() {
|
||||
fi
|
||||
done
|
||||
|
||||
# 4. Check file has meaningful content
|
||||
if [[ $(echo "$body" | wc -w) -lt 50 ]]; then
|
||||
# 4. Check file has meaningful content (awk strips wc's leading whitespace on macOS/BSD)
|
||||
local word_count
|
||||
word_count=$(echo "$body" | wc -w | awk '{print $1}')
|
||||
if [[ "${word_count:-0}" -lt 50 ]]; then
|
||||
echo "WARN $file: body seems very short (< 50 words)"
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
local soul_headers=0
|
||||
local agents_headers=0
|
||||
while IFS= read -r line; do
|
||||
if [[ "$line" =~ ^##[[:space:]] ]]; then
|
||||
local header_lower
|
||||
header_lower=$(printf '%s' "$line" | tr '[:upper:]' '[:lower:]')
|
||||
local target
|
||||
target=$(classify_header_target "$header_lower")
|
||||
if [[ "$target" == "soul" ]]; then
|
||||
soul_headers=$((soul_headers + 1))
|
||||
else
|
||||
agents_headers=$((agents_headers + 1))
|
||||
fi
|
||||
fi
|
||||
done <<< "$body"
|
||||
|
||||
if [[ $soul_headers -eq 0 ]]; then
|
||||
echo "WARN $file: no section headers map to SOUL.md in convert.sh"
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
|
||||
if [[ $agents_headers -eq 0 ]]; then
|
||||
echo "WARN $file: no section headers map to AGENTS.md in convert.sh"
|
||||
warnings=$((warnings + 1))
|
||||
fi
|
||||
}
|
||||
|
||||
# Collect files to lint
|
||||
|
||||
Reference in New Issue
Block a user