plugins/d-nd-core/skills/ecosystem-audit/SKILL.md
Audit the D-ND ecosystem state across all projects, sites, and nodes. Use periodically or after major changes to find gaps, stale content, broken links, and sync issues.
npx skillsauth add grazianoguiducci/d-nd-seed ecosystem-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Run a comprehensive audit across the ecosystem to find gaps and issues.
Check if all repos are pushed and deployed:
echo "=== Repo Sync Audit ==="
# List your project repos here (auto-detected from DND_PROJECT_DIR subdirs with .git)
for dir in "${DND_PROJECT_DIR}"/*/; do
if [ -d "$dir/.git" ]; then
name=$(basename "$dir")
cd "$dir"
LOCAL=$(git rev-parse HEAD 2>/dev/null | cut -c1-7)
REMOTE=$(git rev-parse origin/$(git branch --show-current) 2>/dev/null | cut -c1-7)
DIRTY=$(git status --porcelain 2>/dev/null | wc -l)
STATUS="OK"
[ "$LOCAL" != "$REMOTE" ] && STATUS="UNPUSHED"
[ "$DIRTY" -gt 0 ] && STATUS="DIRTY($DIRTY)"
echo " $name: $LOCAL $STATUS"
fi
done
Check if VPS matches latest commits:
echo "=== VPS Deploy Audit ==="
# Adapt: check your deployed service matches local commits
ssh root@${DND_VPS_IP} "
echo 'Host repo:' \$(cd /opt/project && git rev-parse --short HEAD 2>/dev/null || echo 'N/A')
echo 'Container:' \$(docker exec app-container cat /app/package.json 2>/dev/null | grep version || echo 'check manually')
echo 'Health:' \$(curl -s localhost:\${DND_VPS_PORT:-3002}/api/status | python3 -c 'import sys,json; d=json.load(sys.stdin); print(d.get(\"status\",\"?\"), d.get(\"uptime\",\"?\"))' 2>/dev/null)
"
Check pages, translations, i18n coverage (adapt to your content structure):
echo "=== Content Audit ==="
# Example: check pages.json for bilingual coverage
# Adapt the path and field names to your project
ssh root@${DND_VPS_IP} 'python3 -c "
import json, os
pages_path = os.environ.get(\"DND_PAGES_JSON\", \"/opt/site/data/pages.json\")
with open(pages_path) as f:
data = json.load(f)
pages = data.get(\"pages\", [])
total = len(pages)
published = sum(1 for p in pages if p.get(\"status\")==\"published\")
bilingual = sum(1 for p in pages if p.get(\"content_en\") and len(p[\"content_en\"])>100)
print(f\"Pages: {total} total, {published} published, {bilingual} bilingual\")
for p in pages:
ci=len(p.get(\"content\",\"\"))
ce=len(p.get(\"content_en\",\"\"))
status=\"OK\" if ci>100 and ce>100 else \"GAP\"
print(f\" [{status}] {p.get(\"slug\",\"?\")} IT:{ci} EN:{ce}\")
"'
Check d-nd-seed completeness:
echo "=== Seed Audit ==="
SEED="${DND_PROJECT_DIR}/d-nd-seed"
echo "Coder skills: $(ls $SEED/skills/coder/*.md 2>/dev/null | wc -l)"
echo "Thinker skills: $(ls $SEED/skills/thinker/*/SKILL.md 2>/dev/null | wc -l) (x2 lang)"
echo "Plugin skills: $(ls $SEED/plugins/d-nd-core/skills/*/SKILL.md 2>/dev/null | wc -l)"
echo "Kernels: $(ls $SEED/kernels/*.md 2>/dev/null | wc -l)"
echo "Profiles: $(ls $SEED/profiles/*.json 2>/dev/null | wc -l)"
Check inter-node communication (if messaging API is configured):
echo "=== Messaging Health ==="
if [ -n "${DND_API_TOKEN}" ]; then
curl -s "http://${DND_VPS_IP}:${DND_VPS_PORT:-3002}/api/node-sync?unread=true" \
-H "X-Auth-Token: ${DND_API_TOKEN}" | python3 -c "
import sys,json
msgs = json.load(sys.stdin)
if isinstance(msgs, list):
print(f'Unread messages: {len(msgs)}')
for m in msgs[:5]:
print(f' [{m.get(\"from\",\"?\")}→{m.get(\"to\",\"?\")}] {m.get(\"type\",\"?\")} {str(m.get(\"content\",\"\"))[:60]}')
else:
print(f'Response: {msgs}')
" 2>/dev/null
else
echo " No messaging API configured (DND_API_TOKEN not set)."
fi
Produce a structured report:
$ARGUMENTS
testing
Closure reflection protocol. After a significant work block concludes (feature shipped, session ending, major commit landed, cross-node coordination resolved), runs a 10-question interview that extracts meaning, impact, and next questions — then emits multiple audience-specific artifacts (changelog, external editorial, AI integration docs, memory crystal, backlog seed). Turns implicit maturation into explicit narrative. Use at the end of meaningful work, not after trivial edits.
testing
The neutral form of the D-ND method. Meta-skill that recognizes context and orients toward the right specialization (cec, autologica, cascade, assertion-verifier, etc.). Activate at the start of a non-trivial work block or when input matches trigger words ('where are we', 'what here', 'orchestrate', 'connect', 'sieve this').
development
Five mechanical gates for any content publish pipeline with CMS + rendering layers. Prevents false security: 'API returned 200' does not mean 'visitor sees clean content'. Use when writing content to a multi-layer serving system (CMS API, static files, prerendered HTML, cached copies).
testing
Multi-node consultation protocol for high-leverage decisions. Dispatches the same question to N independent LLM/agent nodes in isolation, then synthesizes their responses into a summa that exposes convergence (high-confidence claims), dissensus (real uncertainty zones), and emergent points (insights no single node produced). Reduces single-node training bias. Supports recursive escalation for stable-state convergence. Use for decisions that propagate via A14 cascade — seed updates, crystallizations, advisory→mechanical promotions, high-visibility copy, lab result interpretation.