23f7624596
ADR-166 MCP Bridge Security Lock / Static-source security lock (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / Compose default binds loopback + Mongo has auth (push) Failing after 2s
CodeQL Advanced / Analyze (rust) (push) Failing after 0s
ADR-166 MCP Bridge Security Lock / plugin-agent-federation bindHost default (push) Failing after 1s
ADR-166 MCP Bridge Security Lock / Runtime behavior — 401 + terminal gate + fail-closed (push) Failing after 4s
business-pods-smoke / smoke (push) Failing after 1s
all-plugins-smoke / smoke-all (push) Failing after 2s
CI/CD Pipeline / Security & Code Quality (push) Failing after 1s
CI/CD Pipeline / Test Suite (ubuntu-latest) (push) Failing after 1s
CI/CD Pipeline / Build & Package (macos-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (ubuntu-latest) (push) Has been skipped
CI/CD Pipeline / Build & Package (windows-latest) (push) Has been skipped
CI/CD Pipeline / Documentation & Examples (push) Failing after 1s
Clone Tracker (14-day rolling) / Snapshot clones for ruflo ecosystem (push) Failing after 1s
CodeQL Advanced / Analyze (actions) (push) Failing after 1s
CodeQL Advanced / Analyze (javascript-typescript) (push) Failing after 1s
federation-peer-rust / stable-noop (push) Failing after 1s
metaharness-ci / score (push) Failing after 1s
metaharness-ci / router-compat (push) Failing after 0s
metaharness-ci / similarity-tests (push) Failing after 0s
no-agentbbs-smoke / smoke-without-agentbbs (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (windows-latest) (push) Has been skipped
codex-integration-audit / Codex integration audit (push) Failing after 1s
helpers-manifest-guard / guard (push) Failing after 1s
🔗 Cross-Agent Integration Tests / 🤝 Agent Coordination Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🧠 Memory Sharing Integration (push) Has been skipped
🔗 Cross-Agent Integration Tests / 🛡️ Fault Tolerance Tests (push) Has been skipped
🔗 Cross-Agent Integration Tests / ⚡ Performance Integration Tests (push) Has been skipped
metaharness-ci / mcp-scan (push) Failing after 1s
metaharness-ci / eject-dryrun (push) Failing after 1s
metaharness-ci / metaharness-real-data (push) Failing after 0s
no-cli-optdep-bloat-2561 / guard (push) Failing after 1s
no-metaharness-smoke / smoke-without-metaharness (push) Failing after 1s
no-phantom-agentic-flow-subpath / guard (push) Failing after 1s
🔄 Automated Rollback Manager / 🚨 Failure Detection (push) Failing after 1s
V3 CI/CD Pipeline / Plugin hooks smoke / ubuntu-latest / Node 22 (push) Failing after 1s
V3 CI/CD Pipeline / ruflo-graph-intelligence build + test smoke (#2044, ADR-123) (push) Failing after 1s
CVE Audit Gate / Audit root (critical-blocking) (push) Failing after 2s
cost-tracker-smoke / smoke (push) Failing after 3s
oia-audit-weekly / audit (push) Failing after 2s
ruflo-agent-smoke / ruflo-agent structural smoke (push) Failing after 1s
📊 Status Badges Update / 📊 Update Status Badges (push) Failing after 1s
V3 CI/CD Pipeline / Static regression guards (#2267 YAML + (push) Failing after 1s
V3 CI/CD Pipeline / Test V3 Packages (push) Failing after 0s
V3 CI/CD Pipeline / agent_execute provider routing smoke (#2042) (push) Failing after 0s
CVE Audit Gate / Audit v3 (critical-blocking) (push) Failing after 1s
federation-peer-rust / stable-native (push) Failing after 2s
🔗 Cross-Agent Integration Tests / 🚀 Integration Test Setup (push) Failing after 2s
neural-trader-smoke / runtime-smoke (push) Failing after 1s
V3 CI/CD Pipeline / Build V3 (macos-latest) (push) Has been skipped
V3 CI/CD Pipeline / Build V3 (ubuntu-latest) (push) Has been skipped
V3 CI/CD Pipeline / Type Check V3 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 24 (push) Failing after 1s
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / ubuntu-latest / Node 22 (push) Failing after 2s
V3 CI/CD Pipeline / browser rvf create flag smoke (#2015) (push) Failing after 0s
V3 CI/CD Pipeline / Dependency review (#2046) (push) Has been skipped
V3 CI/CD Pipeline / Supply-chain audit (#2046) (push) Failing after 0s
V3 CI/CD Pipeline / witness marker drift smoke (#2021) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader portfolio CG smoke (#2068, ADR-126 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / neural-trader backtest signing smoke (#2068, ADR-126 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / kg-extract type-import classification smoke (#2049) (push) Failing after 0s
V3 CI/CD Pipeline / witness verify precondition smoke (#1880) (push) Failing after 2s
V3 CI/CD Pipeline / neural-trader pipeline risk-gate smoke (#2068, ADR-126 Phase 5) (push) Failing after 0s
V3 CI/CD Pipeline / neural-trader feature attribution smoke (#2068, ADR-126 Phase 6) (push) Failing after 0s
V3 CI/CD Pipeline / plugin-registry signature verification smoke (#1922, CWE-347) (push) Failing after 4s
V3 CI/CD Pipeline / memory stats legacy-DB smoke (#2120) (push) Failing after 4s
V3 CI/CD Pipeline / github deprecated actions smoke (#2089, ADR-127 Phase 3) (push) Failing after 1s
V3 CI/CD Pipeline / graph query + pathfinder smoke (ADR-130 P2+P5) (push) Has been skipped
V3 CI/CD Pipeline / graph trajectory hooks smoke (ADR-130 P3) (push) Has been skipped
V3 CI/CD Pipeline / graph plugin adapter smoke (ADR-130 P4) (push) Has been skipped
V3 CI/CD Pipeline / graph benchmark (ADR-130 P6) (push) Has been skipped
V3 CI/CD Pipeline / statusline generator delegation smoke (#2195) (push) Failing after 1s
V3 CI/CD Pipeline / wizard init regression guard (#2206 (push) Failing after 1s
V3 CI/CD Pipeline / memory no-stray-db smoke (ADR-125 P7) (push) Failing after 1s
V3 CI/CD Pipeline / github-safe injection smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github actions pin smoke (#2089, ADR-127 Phase 1) (push) Failing after 1s
V3 CI/CD Pipeline / github attribution opt-in smoke (#2089, ADR-127 Phase 4) (push) Failing after 1s
V3 CI/CD Pipeline / pre-bash hook safety smoke (#2017) (push) Failing after 1s
V3 CI/CD Pipeline / Memory import smoke / ubuntu-latest (push) Failing after 0s
V3 CI/CD Pipeline / MCP protocol smoke / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / ruvllm WASM auto-init smoke (#2086) (push) Failing after 4s
V3 CI/CD Pipeline / MCP paired-tool round-trip smoke (#1889) (push) Failing after 1s
V3 CI/CD Pipeline / Plugin package install-safety (#1902/#1903/#1904) (push) Failing after 1s
V3 CI/CD Pipeline / Tool description discoverability (ADR-112) (push) Failing after 3s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (22) (push) Failing after 1s
V3 CI/CD Pipeline / CLI npx-install smoke (#1147 / (24) (push) Failing after 1s
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / ubuntu-latest (push) Failing after 2s
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / ubuntu-latest (push) Failing after 1s
V3 CI/CD Pipeline / Vector-index dimension audit (#1947) (push) Failing after 0s
V3 CI/CD Pipeline / Hook-command install safety (#1921) (push) Failing after 1s
V3 CI/CD Pipeline / ToolOutputGuardrail smoke (ADR-131, (push) Failing after 1s
V3 CI/CD Pipeline / init-bundle invariants smoke (#2095, ADR-128 Phase 5) (push) Failing after 1s
V3 CI/CD Pipeline / wasm provider bridge smoke (ADR-129 P1) (push) Failing after 2s
V3 CI/CD Pipeline / wasm gallery CRUD smoke (ADR-129 P3) (push) Failing after 1s
V3 CI/CD Pipeline / wasm plugin bridge smoke (ADR-129 P4) (push) Failing after 0s
V3 CI/CD Pipeline / wasm compose smoke (ADR-129 P2) (push) Failing after 4s
V3 CI/CD Pipeline / graph schema smoke (ADR-130 P1) (push) Failing after 0s
Validate Marketplace / validate (push) Failing after 1s
🔍 Verification Pipeline / 🚀 Setup Verification (push) Failing after 1s
🔍 Verification Pipeline / 🛡️ Security Verification (push) Has been skipped
🔍 Verification Pipeline / 📝 Code Quality (push) Has been skipped
🔍 Verification Pipeline / 🧪 Test Verification (${{ matrix.os }}, Node ${{ matrix.node }}) (push) Has been skipped
🔍 Verification Pipeline / 🏗️ Build Verification (push) Has been skipped
🔍 Verification Pipeline / 📚 Documentation Verification (push) Has been skipped
CVE Audit Gate / High-severity report (warn only) (push) Has been cancelled
🔄 Automated Rollback Manager / 🔄 Execute Rollback (push) Has been cancelled
🔄 Automated Rollback Manager / ✅ Post-Rollback Verification (push) Has been cancelled
🔄 Automated Rollback Manager / 📊 Rollback Monitoring (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook execution smoke (#2132) / windows-latest (push) Has been cancelled
🔄 Automated Rollback Manager / ⏳ Manual Rollback Approval (push) Has been cancelled
V3 CI/CD Pipeline / MCP protocol smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Memory import smoke / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows hook shim smoke (#2132) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Windows init hooks smoke (#2132) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / macos-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / ubuntu-latest (push) Has been cancelled
V3 CI/CD Pipeline / Witness verify (signed manifest) / windows-latest (push) Has been cancelled
V3 CI/CD Pipeline / Publish to npm (alpha) (push) Has been cancelled
V3 CI/CD Pipeline / Smoke (no better-sqlite3) / macos-latest / Node 22 (push) Has been cancelled
V3 CI/CD Pipeline / Plugin hooks smoke / macos-latest / Node 22 (push) Has been cancelled
CI/CD Pipeline / Deploy & Release (push) Has been cancelled
CI/CD Pipeline / CI Status (push) Has been cancelled
🔗 Cross-Agent Integration Tests / 📊 Integration Test Report (push) Has been cancelled
🔄 Automated Rollback Manager / 🔍 Pre-Rollback Validation (push) Has been cancelled
🔍 Verification Pipeline / ⚡ Performance Verification (push) Has been cancelled
🔍 Verification Pipeline / 📊 Verification Report (push) Has been cancelled
593 lines
30 KiB
Bash
593 lines
30 KiB
Bash
#!/bin/sh
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# Ruflo RVFA Appliance — Full Capability Verification Suite
|
|
# ADR-058: Self-Contained Ruflo RVF Appliance
|
|
#
|
|
# Tests ALL 35 categories (95+ checks) to verify every capability
|
|
# of the Ruflo + Claude Flow system works correctly.
|
|
#
|
|
# Usage:
|
|
# sh verify-appliance.sh # Run all checks
|
|
# sh verify-appliance.sh --quick # Critical checks only
|
|
# sh verify-appliance.sh --category memory # Single category
|
|
# sh verify-appliance.sh --json # JSON output
|
|
# ═══════════════════════════════════════════════════════════════
|
|
set -e
|
|
|
|
# ── Configuration ─────────────────────────────────────────────
|
|
PASS=0
|
|
FAIL=0
|
|
WARN=0
|
|
SKIP=0
|
|
ERRORS=""
|
|
START_TIME=$(date +%s)
|
|
QUICK_MODE=0
|
|
TARGET_CATEGORY=""
|
|
JSON_MODE=0
|
|
RUFLO_CMD="${RUFLO_CMD:-ruflo}"
|
|
|
|
# Parse arguments
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--quick|-q) QUICK_MODE=1; shift ;;
|
|
--category|-c) TARGET_CATEGORY="$2"; shift 2 ;;
|
|
--json|-j) JSON_MODE=1; shift ;;
|
|
--help|-h)
|
|
echo "Ruflo Appliance Verification Suite"
|
|
echo ""
|
|
echo "Usage: sh verify-appliance.sh [OPTIONS]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --quick, -q Run critical checks only (categories 1-5, 25)"
|
|
echo " --category, -c NAME Run single category (e.g. memory, security, mcp)"
|
|
echo " --json, -j Output results as JSON"
|
|
echo " --help, -h Show this help"
|
|
echo ""
|
|
echo "Environment:"
|
|
echo " RUFLO_CMD=ruflo Command to test (default: ruflo)"
|
|
echo " SKIP_NETWORK=1 Skip checks that require network"
|
|
echo " SKIP_MODELS=1 Skip local model inference checks"
|
|
exit 0
|
|
;;
|
|
*) shift ;;
|
|
esac
|
|
done
|
|
|
|
# ── Test Helpers ──────────────────────────────────────────────
|
|
check() {
|
|
local name="$1"
|
|
shift
|
|
local output
|
|
output=$("$@" 2>&1) && {
|
|
PASS=$((PASS + 1))
|
|
[ "$JSON_MODE" = "0" ] && printf " ✓ %s\n" "$name"
|
|
return 0
|
|
} || {
|
|
FAIL=$((FAIL + 1))
|
|
ERRORS="$ERRORS\n ✗ $name: $(echo "$output" | tail -1)"
|
|
[ "$JSON_MODE" = "0" ] && printf " ✗ %s\n" "$name"
|
|
return 1
|
|
}
|
|
}
|
|
|
|
check_contains() {
|
|
local name="$1"
|
|
local expected="$2"
|
|
shift 2
|
|
local output
|
|
output=$("$@" 2>&1)
|
|
if echo "$output" | grep -qi "$expected"; then
|
|
PASS=$((PASS + 1))
|
|
[ "$JSON_MODE" = "0" ] && printf " ✓ %s\n" "$name"
|
|
return 0
|
|
else
|
|
FAIL=$((FAIL + 1))
|
|
ERRORS="$ERRORS\n ✗ $name: expected '$expected' in output"
|
|
[ "$JSON_MODE" = "0" ] && printf " ✗ %s\n" "$name"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
check_warn() {
|
|
local name="$1"
|
|
shift
|
|
local output
|
|
output=$("$@" 2>&1) && {
|
|
PASS=$((PASS + 1))
|
|
[ "$JSON_MODE" = "0" ] && printf " ✓ %s\n" "$name"
|
|
} || {
|
|
WARN=$((WARN + 1))
|
|
[ "$JSON_MODE" = "0" ] && printf " ⚠ %s (non-critical)\n" "$name"
|
|
}
|
|
}
|
|
|
|
check_skip() {
|
|
local name="$1"
|
|
local reason="$2"
|
|
SKIP=$((SKIP + 1))
|
|
[ "$JSON_MODE" = "0" ] && printf " ⊘ %s (skipped: %s)\n" "$name" "$reason"
|
|
}
|
|
|
|
section() {
|
|
local num="$1"
|
|
local name="$2"
|
|
[ "$JSON_MODE" = "0" ] && echo "" && echo "═══ $num. $name ═══"
|
|
}
|
|
|
|
should_run() {
|
|
local category="$1"
|
|
[ -z "$TARGET_CATEGORY" ] && return 0
|
|
echo "$category" | grep -qi "$TARGET_CATEGORY" && return 0
|
|
return 1
|
|
}
|
|
|
|
is_quick() {
|
|
[ "$QUICK_MODE" = "1" ]
|
|
}
|
|
|
|
# ── Detect Ruflo version ─────────────────────────────────────
|
|
RUFLO_VERSION=$($RUFLO_CMD --version 2>/dev/null || echo "unknown")
|
|
|
|
# ── Banner ────────────────────────────────────────────────────
|
|
if [ "$JSON_MODE" = "0" ]; then
|
|
echo "╔══════════════════════════════════════════════════════════╗"
|
|
echo "║ Ruflo Appliance — Full Capability Verification Suite ║"
|
|
if [ -f /etc/os-release ]; then
|
|
OS_NAME=$(grep PRETTY /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"' || echo "unknown")
|
|
echo "║ OS: $OS_NAME"
|
|
fi
|
|
echo "║ Node: $(node --version 2>/dev/null || echo 'N/A')"
|
|
echo "║ Ruflo: $RUFLO_VERSION"
|
|
echo "║ Mode: $([ "$QUICK_MODE" = "1" ] && echo "Quick" || echo "Full") | $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
|
|
echo "╚══════════════════════════════════════════════════════════╝"
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PART I: Core CLI (Categories 1-5)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ── 1. CLI Core ───────────────────────────────────────────────
|
|
if should_run "cli"; then
|
|
section 1 "CLI Core"
|
|
check "ruflo --version" $RUFLO_CMD --version
|
|
check "ruflo --help" $RUFLO_CMD --help
|
|
check_contains "version string valid" "[0-9]\+\.[0-9]\+\.[0-9]" $RUFLO_CMD --version
|
|
fi
|
|
|
|
# ── 2. Doctor ─────────────────────────────────────────────────
|
|
if should_run "doctor"; then
|
|
section 2 "Doctor (Health Checks)"
|
|
check "doctor runs" $RUFLO_CMD doctor
|
|
check "doctor --fix" $RUFLO_CMD doctor --fix
|
|
check "doctor -c node" $RUFLO_CMD doctor -c node
|
|
check "doctor -c npm" $RUFLO_CMD doctor -c npm
|
|
check "doctor -c disk" $RUFLO_CMD doctor -c disk
|
|
check "doctor -c version" $RUFLO_CMD doctor -c version
|
|
fi
|
|
|
|
# ── 3. Init System ────────────────────────────────────────────
|
|
if should_run "init"; then
|
|
section 3 "Init System"
|
|
TEST_DIR="/tmp/ruflo-verify-$$"
|
|
mkdir -p "$TEST_DIR" && cd "$TEST_DIR"
|
|
check "init --yes" $RUFLO_CMD init --yes
|
|
check ".claude/settings.json exists" test -f .claude/settings.json
|
|
check ".claude/helpers/ exists" test -d .claude/helpers
|
|
check_contains "no TeammateIdle in hooks" "false" sh -c '! grep -q "TeammateIdle" .claude/settings.json && echo false'
|
|
check_contains "no TaskCompleted in hooks" "false" sh -c '! grep -q "\"TaskCompleted\"" .claude/settings.json && echo false'
|
|
check_contains "AGENT_TEAMS env set" "AGENT_TEAMS" cat .claude/settings.json
|
|
check_contains "agentTeams config present" "agentTeams" cat .claude/settings.json
|
|
check_contains "statusLine configured" "statusLine" cat .claude/settings.json
|
|
check "helpers/statusline.cjs exists" test -f .claude/helpers/statusline.cjs
|
|
cd /tmp
|
|
rm -rf "$TEST_DIR"
|
|
fi
|
|
|
|
# ── 4. Memory Operations ─────────────────────────────────────
|
|
if should_run "memory"; then
|
|
section 4 "Memory Operations (AgentDB + RVF)"
|
|
check "memory init" $RUFLO_CMD memory init --force
|
|
check "memory store key-1" $RUFLO_CMD memory store --key "verify-1" --value "Capability verification entry one" --namespace verify
|
|
check "memory store key-2" $RUFLO_CMD memory store --key "verify-2" --value "Vector search verification entry" --namespace verify
|
|
check "memory store key-3 with tags" $RUFLO_CMD memory store --key "verify-3" --value "Embedding generation test data" --namespace verify --tags "test,verify"
|
|
check "memory list" $RUFLO_CMD memory list --namespace verify
|
|
check_contains "memory list shows 3 entries" "3" $RUFLO_CMD memory list --namespace verify
|
|
check "memory search (semantic)" $RUFLO_CMD memory search --query "vector search" --namespace verify
|
|
check_contains "memory search finds result" "verify-" $RUFLO_CMD memory search --query "capability verification" --namespace verify
|
|
check "memory retrieve" $RUFLO_CMD memory retrieve --key "verify-1" --namespace verify
|
|
check_contains "memory retrieve content correct" "Capability verification" $RUFLO_CMD memory retrieve --key "verify-1" --namespace verify
|
|
check "memory store with TTL" $RUFLO_CMD memory store --key "ttl-verify" --value "expires soon" --namespace verify --ttl 3600
|
|
check "memory delete" $RUFLO_CMD memory delete --key "ttl-verify" --namespace verify
|
|
# Cleanup
|
|
$RUFLO_CMD memory delete --key "verify-1" --namespace verify >/dev/null 2>&1 || true
|
|
$RUFLO_CMD memory delete --key "verify-2" --namespace verify >/dev/null 2>&1 || true
|
|
$RUFLO_CMD memory delete --key "verify-3" --namespace verify >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# ── 5. Config Management ─────────────────────────────────────
|
|
if should_run "config"; then
|
|
section 5 "Config Management"
|
|
check "config show" $RUFLO_CMD config show
|
|
check "config get" $RUFLO_CMD config get memory.backend
|
|
check_warn "config set" $RUFLO_CMD config set memory.backend hybrid
|
|
check "config list" $RUFLO_CMD config list
|
|
fi
|
|
|
|
# Stop here for quick mode (except cross-feature at end)
|
|
if is_quick && [ -z "$TARGET_CATEGORY" ]; then
|
|
# Jump to cross-feature integration
|
|
section 25 "Cross-Feature Integration (Quick)"
|
|
check "quick: store" $RUFLO_CMD memory store --key "quick-test" --value "Quick mode integration test" --namespace quick
|
|
check_contains "quick: search" "quick-test" $RUFLO_CMD memory search --query "integration test" --namespace quick
|
|
check_contains "quick: retrieve" "Quick mode" $RUFLO_CMD memory retrieve --key "quick-test" --namespace quick
|
|
check "quick: cleanup" $RUFLO_CMD memory delete --key "quick-test" --namespace quick
|
|
|
|
# Print results and exit
|
|
END_TIME=$(date +%s)
|
|
DURATION=$((END_TIME - START_TIME))
|
|
echo ""
|
|
echo "══════════════════════════════════════════════════"
|
|
echo " QUICK MODE RESULTS (${DURATION}s)"
|
|
echo "══════════════════════════════════════════════════"
|
|
echo " Passed: $PASS"
|
|
echo " Failed: $FAIL"
|
|
echo " Warnings: $WARN"
|
|
echo " Total: $((PASS + FAIL + WARN))"
|
|
echo ""
|
|
[ $FAIL -gt 0 ] && printf "$ERRORS\n"
|
|
[ $FAIL -eq 0 ] && echo " ★ ALL CRITICAL CHECKS PASSED" || echo " ✗ $FAIL FAILURES"
|
|
echo "══════════════════════════════════════════════════"
|
|
exit $FAIL
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PART II: Agent & Swarm (Categories 6-9)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ── 6. Session Management ─────────────────────────────────────
|
|
if should_run "session"; then
|
|
section 6 "Session Management"
|
|
check_warn "session list" $RUFLO_CMD session list
|
|
check_warn "session start" $RUFLO_CMD session start --session-id "verify-session-$$"
|
|
check_warn "session status" $RUFLO_CMD session status
|
|
check_warn "session end" $RUFLO_CMD session end
|
|
fi
|
|
|
|
# ── 7. Agent System ───────────────────────────────────────────
|
|
if should_run "agent"; then
|
|
section 7 "Agent System"
|
|
check "agent list" $RUFLO_CMD agent list
|
|
check_warn "agent spawn (dry)" $RUFLO_CMD agent spawn -t coder --name verify-agent --dry-run
|
|
check_warn "agent status" $RUFLO_CMD agent status
|
|
check_warn "agent pool" $RUFLO_CMD agent pool
|
|
fi
|
|
|
|
# ── 8. Swarm Coordination ────────────────────────────────────
|
|
if should_run "swarm"; then
|
|
section 8 "Swarm Coordination"
|
|
check_warn "swarm status" $RUFLO_CMD swarm status
|
|
check_warn "swarm init (hierarchical)" $RUFLO_CMD swarm init --topology hierarchical --max-agents 4
|
|
check_warn "swarm init (mesh)" $RUFLO_CMD swarm init --topology mesh --max-agents 4
|
|
fi
|
|
|
|
# ── 9. Task System ────────────────────────────────────────────
|
|
if should_run "task"; then
|
|
section 9 "Task System"
|
|
check_warn "task list" $RUFLO_CMD task list
|
|
check_warn "task create" $RUFLO_CMD task create --description "Verify task system" --type feature
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PART III: Intelligence & Learning (Categories 10-14)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ── 10. Hooks System ──────────────────────────────────────────
|
|
if should_run "hooks"; then
|
|
section 10 "Hooks System (17 Hooks + 12 Workers)"
|
|
check "hooks list" $RUFLO_CMD hooks list
|
|
check "hooks route" $RUFLO_CMD hooks route --task "test routing"
|
|
check_warn "hooks pre-task" $RUFLO_CMD hooks pre-task --description "verify hooks"
|
|
check "hooks worker list" $RUFLO_CMD hooks worker list
|
|
check "hooks statusline" $RUFLO_CMD hooks statusline --json
|
|
check "hooks progress" $RUFLO_CMD hooks progress
|
|
fi
|
|
|
|
# ── 11. Security ──────────────────────────────────────────────
|
|
if should_run "security"; then
|
|
section 11 "Security"
|
|
check "security scan" $RUFLO_CMD security scan
|
|
check "security audit" $RUFLO_CMD security audit
|
|
check "security validate" $RUFLO_CMD security validate
|
|
fi
|
|
|
|
# ── 12. Performance ───────────────────────────────────────────
|
|
if should_run "performance"; then
|
|
section 12 "Performance"
|
|
check "performance metrics" $RUFLO_CMD performance metrics
|
|
check "performance benchmark" $RUFLO_CMD performance benchmark
|
|
fi
|
|
|
|
# ── 13. Neural / Intelligence ─────────────────────────────────
|
|
if should_run "neural"; then
|
|
section 13 "Neural / Intelligence (SONA + MoE)"
|
|
check "neural status" $RUFLO_CMD neural status
|
|
check "neural patterns" $RUFLO_CMD neural patterns --list
|
|
fi
|
|
|
|
# ── 14. Embeddings ────────────────────────────────────────────
|
|
if should_run "embeddings"; then
|
|
section 14 "Embeddings (Vector Generation)"
|
|
check "embeddings embed" $RUFLO_CMD embeddings embed --text "test embedding generation"
|
|
check "embeddings search" $RUFLO_CMD embeddings search --query "test" --namespace verify
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PART IV: Platform Services (Categories 15-24)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ── 15. Workflow System ───────────────────────────────────────
|
|
if should_run "workflow"; then
|
|
section 15 "Workflow System"
|
|
check "workflow list" $RUFLO_CMD workflow list
|
|
check "workflow templates" $RUFLO_CMD workflow list --templates
|
|
fi
|
|
|
|
# ── 16. Daemon ────────────────────────────────────────────────
|
|
if should_run "daemon"; then
|
|
section 16 "Daemon (Background Workers)"
|
|
check "daemon status" $RUFLO_CMD daemon status
|
|
check "daemon start" $RUFLO_CMD daemon start
|
|
fi
|
|
|
|
# ── 17. Claims Authorization ──────────────────────────────────
|
|
if should_run "claims"; then
|
|
section 17 "Claims Authorization (RBAC)"
|
|
check "claims list" $RUFLO_CMD claims list
|
|
check "claims check" $RUFLO_CMD claims check --claim "memory:read"
|
|
fi
|
|
|
|
# ── 18. Migration ─────────────────────────────────────────────
|
|
if should_run "migration"; then
|
|
section 18 "Migration (V2 → V3)"
|
|
check_warn "migrate status" $RUFLO_CMD migrate status
|
|
fi
|
|
|
|
# ── 19. Plugins ───────────────────────────────────────────────
|
|
if should_run "plugin"; then
|
|
section 19 "Plugins (IPFS Registry)"
|
|
check "plugins list" $RUFLO_CMD plugins list
|
|
fi
|
|
|
|
# ── 20. MCP Server ────────────────────────────────────────────
|
|
if should_run "mcp"; then
|
|
section 20 "MCP Server (215 Tools)"
|
|
check_contains "mcp help" "mcp" $RUFLO_CMD mcp --help
|
|
check "mcp list" $RUFLO_CMD mcp list
|
|
fi
|
|
|
|
# ── 21. Shell Completions ─────────────────────────────────────
|
|
if should_run "completions"; then
|
|
section 21 "Shell Completions"
|
|
check "completions bash" $RUFLO_CMD completions bash
|
|
check "completions zsh" $RUFLO_CMD completions zsh
|
|
fi
|
|
|
|
# ── 22. Status ────────────────────────────────────────────────
|
|
if should_run "status"; then
|
|
section 22 "System Status"
|
|
check_warn "status" $RUFLO_CMD status
|
|
fi
|
|
|
|
# ── 23. Hive-Mind ─────────────────────────────────────────────
|
|
if should_run "hive"; then
|
|
section 23 "Hive-Mind (Byzantine Consensus)"
|
|
check_warn "hive-mind status" $RUFLO_CMD hive-mind status
|
|
fi
|
|
|
|
# ── 24. Process Management ────────────────────────────────────
|
|
if should_run "process"; then
|
|
section 24 "Process Management"
|
|
check_warn "process list" $RUFLO_CMD process list
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# PART V: Integration & End-to-End (Categories 25-35)
|
|
# ═══════════════════════════════════════════════════════════════
|
|
|
|
# ── 25. Cross-Feature Integration ─────────────────────────────
|
|
if should_run "integration"; then
|
|
section 25 "Cross-Feature Integration"
|
|
check "integration: store" $RUFLO_CMD memory store --key "int-verify" --value "Cross-feature integration with vector embeddings and semantic search" --namespace integration
|
|
check_contains "integration: search finds it" "int-verify" $RUFLO_CMD memory search --query "cross feature integration" --namespace integration
|
|
check_contains "integration: retrieve content" "Cross-feature" $RUFLO_CMD memory retrieve --key "int-verify" --namespace integration
|
|
check "integration: cleanup" $RUFLO_CMD memory delete --key "int-verify" --namespace integration
|
|
fi
|
|
|
|
# ── 26. RVF Format Verification ───────────────────────────────
|
|
if should_run "rvf"; then
|
|
section 26 "RVF Format Verification"
|
|
RVF_DIR="/tmp/ruflo-rvf-verify-$$"
|
|
mkdir -p "$RVF_DIR"
|
|
|
|
# Test RVF backend by writing and reading data
|
|
check "rvf: memory init creates backend" $RUFLO_CMD memory init --force
|
|
check "rvf: store creates data file" $RUFLO_CMD memory store --key "rvf-test" --value "RVF binary format verification" --namespace rvf-verify
|
|
check_contains "rvf: retrieve confirms persistence" "RVF binary" $RUFLO_CMD memory retrieve --key "rvf-test" --namespace rvf-verify
|
|
check "rvf: multiple entries" sh -c "$RUFLO_CMD memory store --key 'rvf-2' --value 'Second entry' --namespace rvf-verify && $RUFLO_CMD memory store --key 'rvf-3' --value 'Third entry' --namespace rvf-verify"
|
|
check_contains "rvf: list shows entries" "3" $RUFLO_CMD memory list --namespace rvf-verify
|
|
check "rvf: delete works" $RUFLO_CMD memory delete --key "rvf-test" --namespace rvf-verify
|
|
check_contains "rvf: list after delete" "2" $RUFLO_CMD memory list --namespace rvf-verify
|
|
# Cleanup
|
|
$RUFLO_CMD memory delete --key "rvf-2" --namespace rvf-verify >/dev/null 2>&1 || true
|
|
$RUFLO_CMD memory delete --key "rvf-3" --namespace rvf-verify >/dev/null 2>&1 || true
|
|
rm -rf "$RVF_DIR"
|
|
fi
|
|
|
|
# ── 27. Local Model Inference (ruvLLM from RuVector) ──────────
|
|
if should_run "ruvllm"; then
|
|
section 27 "Local Model Inference (ruvLLM / RuVector)"
|
|
if [ "${SKIP_MODELS:-0}" = "1" ]; then
|
|
check_skip "ruvllm: model load" "SKIP_MODELS=1"
|
|
check_skip "ruvllm: tokenize" "SKIP_MODELS=1"
|
|
check_skip "ruvllm: generate" "SKIP_MODELS=1"
|
|
check_skip "ruvllm: stream" "SKIP_MODELS=1"
|
|
elif command -v ruflo-ruvllm >/dev/null 2>&1; then
|
|
check_warn "ruvllm: engine available" ruflo-ruvllm --version
|
|
check_warn "ruvllm: model list" ruflo-ruvllm models list
|
|
check_warn "ruvllm: tokenize" ruflo-ruvllm tokenize --text "Hello world"
|
|
check_warn "ruvllm: generate" ruflo-ruvllm generate --prompt "2+2=" --max-tokens 10
|
|
else
|
|
check_skip "ruvllm: engine" "ruflo-ruvllm not installed (future: ADR-058 Phase 3)"
|
|
check_skip "ruvllm: inference" "ruflo-ruvllm not installed"
|
|
fi
|
|
fi
|
|
|
|
# ── 28. API Key Vault ─────────────────────────────────────────
|
|
if should_run "vault"; then
|
|
section 28 "API Key Vault"
|
|
if [ "${SKIP_NETWORK:-0}" = "1" ]; then
|
|
check_skip "vault: connectivity" "SKIP_NETWORK=1"
|
|
else
|
|
check_warn "vault: provider test (anthropic)" $RUFLO_CMD providers test anthropic
|
|
check_warn "vault: provider test (openai)" $RUFLO_CMD providers test openai
|
|
check_warn "vault: providers list" $RUFLO_CMD providers list
|
|
fi
|
|
fi
|
|
|
|
# ── 29. Boot Integrity ────────────────────────────────────────
|
|
if should_run "boot"; then
|
|
section 29 "Boot Integrity"
|
|
check "boot: ruflo binary exists" command -v $RUFLO_CMD
|
|
check "boot: node available" command -v node
|
|
check_contains "boot: node version ≥ 20" "v2[0-9]" node --version
|
|
check "boot: npm available" command -v npm
|
|
check_warn "boot: claude cli available" command -v claude
|
|
fi
|
|
|
|
# ── 30. Isolation Checks ──────────────────────────────────────
|
|
if should_run "isolation"; then
|
|
section 30 "Isolation Checks"
|
|
if [ -f /.dockerenv ] || grep -q docker /proc/1/cgroup 2>/dev/null; then
|
|
check "isolation: running in container" test -f /.dockerenv -o -d /run/.containerenv
|
|
check_warn "isolation: non-root user" test "$(id -u)" != "0"
|
|
check "isolation: /tmp writable" test -w /tmp
|
|
check "isolation: home writable" test -w "$HOME"
|
|
else
|
|
check_skip "isolation: container" "not running in container"
|
|
check "isolation: filesystem writable" test -w /tmp
|
|
fi
|
|
fi
|
|
|
|
# ── 31. Agent Swarm E2E ───────────────────────────────────────
|
|
if should_run "swarm-e2e"; then
|
|
section 31 "Agent Swarm End-to-End"
|
|
# Store coordination data, verify agents can read it
|
|
check "swarm-e2e: store coordination context" $RUFLO_CMD memory store --key "swarm-e2e-context" --value "Agent swarm coordination test: architect designs, coder implements, tester validates" --namespace swarm-e2e
|
|
check_contains "swarm-e2e: search finds coordination" "swarm-e2e" $RUFLO_CMD memory search --query "agent coordination" --namespace swarm-e2e
|
|
check "swarm-e2e: agent list available" $RUFLO_CMD agent list
|
|
check_warn "swarm-e2e: swarm init" $RUFLO_CMD swarm init --topology hierarchical --max-agents 4
|
|
check_warn "swarm-e2e: swarm status" $RUFLO_CMD swarm status
|
|
# Cleanup
|
|
$RUFLO_CMD memory delete --key "swarm-e2e-context" --namespace swarm-e2e >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# ── 32. MCP End-to-End ────────────────────────────────────────
|
|
if should_run "mcp-e2e"; then
|
|
section 32 "MCP Protocol End-to-End"
|
|
check_contains "mcp-e2e: help lists commands" "start\|list\|add" $RUFLO_CMD mcp --help
|
|
check "mcp-e2e: mcp list" $RUFLO_CMD mcp list
|
|
# Test MCP server can start (timeout after 3s)
|
|
check_warn "mcp-e2e: server starts" sh -c "timeout 3 $RUFLO_CMD mcp start --transport stdio 2>&1 || true"
|
|
fi
|
|
|
|
# ── 33. Persistence Cycle ─────────────────────────────────────
|
|
if should_run "persistence"; then
|
|
section 33 "Persistence (Write → Verify → Survive)"
|
|
PERSIST_NS="persist-verify-$$"
|
|
check "persist: write data" $RUFLO_CMD memory store --key "persist-1" --value "Persistence test: this data must survive" --namespace "$PERSIST_NS"
|
|
check "persist: write more data" $RUFLO_CMD memory store --key "persist-2" --value "Second persistence entry for durability" --namespace "$PERSIST_NS"
|
|
# Re-read (simulates restart — data should be on disk)
|
|
check_contains "persist: data survives re-read" "Persistence test" $RUFLO_CMD memory retrieve --key "persist-1" --namespace "$PERSIST_NS"
|
|
check_contains "persist: second entry survives" "Second persistence" $RUFLO_CMD memory retrieve --key "persist-2" --namespace "$PERSIST_NS"
|
|
check_contains "persist: count correct" "2" $RUFLO_CMD memory list --namespace "$PERSIST_NS"
|
|
# Cleanup
|
|
$RUFLO_CMD memory delete --key "persist-1" --namespace "$PERSIST_NS" >/dev/null 2>&1 || true
|
|
$RUFLO_CMD memory delete --key "persist-2" --namespace "$PERSIST_NS" >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# ── 34. Offline Mode ──────────────────────────────────────────
|
|
if should_run "offline"; then
|
|
section 34 "Offline Capability"
|
|
# These commands should all work without network
|
|
check "offline: version (no network needed)" $RUFLO_CMD --version
|
|
check "offline: doctor (local checks)" $RUFLO_CMD doctor -c node
|
|
check "offline: memory store (local)" $RUFLO_CMD memory store --key "offline-test" --value "Works without internet" --namespace offline
|
|
check_contains "offline: memory retrieve (local)" "Works without" $RUFLO_CMD memory retrieve --key "offline-test" --namespace offline
|
|
check "offline: config show (local)" $RUFLO_CMD config show
|
|
check_warn "offline: status (local)" $RUFLO_CMD status
|
|
check "offline: completions (local)" $RUFLO_CMD completions bash
|
|
# Cleanup
|
|
$RUFLO_CMD memory delete --key "offline-test" --namespace offline >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
# ── 35. Hot Update Simulation ─────────────────────────────────
|
|
if should_run "update"; then
|
|
section 35 "Hot Update Simulation"
|
|
# Verify the current version can be read
|
|
check "update: current version readable" $RUFLO_CMD --version
|
|
check "update: doctor validates current" $RUFLO_CMD doctor
|
|
check_warn "update: config backup possible" $RUFLO_CMD config show
|
|
fi
|
|
|
|
# ═══════════════════════════════════════════════════════════════
|
|
# RESULTS
|
|
# ═══════════════════════════════════════════════════════════════
|
|
END_TIME=$(date +%s)
|
|
DURATION=$((END_TIME - START_TIME))
|
|
TOTAL=$((PASS + FAIL + WARN + SKIP))
|
|
|
|
if [ "$JSON_MODE" = "1" ]; then
|
|
cat <<ENDJSON
|
|
{
|
|
"suite": "ruflo-appliance-verify",
|
|
"version": "$RUFLO_VERSION",
|
|
"timestamp": "$(date -u '+%Y-%m-%dT%H:%M:%SZ')",
|
|
"duration_seconds": $DURATION,
|
|
"results": {
|
|
"passed": $PASS,
|
|
"failed": $FAIL,
|
|
"warnings": $WARN,
|
|
"skipped": $SKIP,
|
|
"total": $TOTAL
|
|
},
|
|
"success": $([ $FAIL -eq 0 ] && echo "true" || echo "false")
|
|
}
|
|
ENDJSON
|
|
else
|
|
echo ""
|
|
echo "══════════════════════════════════════════════════"
|
|
echo " RESULTS (${DURATION}s)"
|
|
echo "══════════════════════════════════════════════════"
|
|
echo " Passed: $PASS"
|
|
echo " Failed: $FAIL"
|
|
echo " Warnings: $WARN (non-critical)"
|
|
echo " Skipped: $SKIP"
|
|
echo " Total: $TOTAL"
|
|
echo ""
|
|
|
|
if [ $FAIL -gt 0 ]; then
|
|
echo " FAILURES:"
|
|
printf "$ERRORS\n"
|
|
echo ""
|
|
fi
|
|
|
|
if [ $FAIL -eq 0 ]; then
|
|
echo " ★ ALL CRITICAL CHECKS PASSED"
|
|
else
|
|
echo " ✗ $FAIL CRITICAL FAILURES"
|
|
fi
|
|
echo "══════════════════════════════════════════════════"
|
|
fi
|
|
|
|
exit $FAIL
|