feat: brain-template v2.0 — BSI-v3 complet + tiers documentés

- README reécrit : tiers free/pro/full + modèle clé API + multi-instance
- Sync agents/ (57 agents, kernel-isolation validated)
- Sync scripts/ BSI-v3 (file-lock, preflight, human-gate, brain-status)
- KERNEL.md v0.7.0 — zones + délégation + rendering + isolation
- brain-compose.yml v0.7.0 — rendering mode + kerneluser
- workflows/ — template + brain-engine exemple
- locks/.gitkeep + claims/.gitkeep
- helloWorld : RAG boot tier full only (bsi-rag retiré du template)
This commit is contained in:
2026-03-16 23:26:38 +01:00
parent 0b0e6649c2
commit 878886cd51
110 changed files with 7656 additions and 680 deletions

83
scripts/brain-db-sync.sh Executable file
View File

@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# brain-db-sync.sh — Sync brain.db depuis les sources brain
#
# Usage :
# brain-db-sync.sh → migrate + log résultat
# brain-db-sync.sh --quiet → log fichier uniquement (pour hooks git)
# brain-db-sync.sh --check → exit 0 si brain.db à jour, exit 2 si stale
#
# Headless : zéro notify-send, zéro dépendance Wayland/display.
# Appelable depuis hook git post-commit, cron, ou manuellement.
#
# Exit codes :
# 0 = sync réussi
# 1 = migrate.py introuvable ou Python absent
# 2 = brain.db stale (--check uniquement)
# 3 = migrate.py a échoué
set -euo pipefail
BRAIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
MIGRATE="$BRAIN_ROOT/brain-engine/migrate.py"
DB_PATH="$BRAIN_ROOT/brain.db"
LOG_FILE="$BRAIN_ROOT/brain-engine/sync.log"
QUIET=false
CHECK_ONLY=false
for arg in "$@"; do
case "$arg" in
--quiet) QUIET=true ;;
--check) CHECK_ONLY=true ;;
esac
done
log() {
local ts
ts=$(date '+%Y-%m-%dT%H:%M:%S')
echo "[$ts] $*" >> "$LOG_FILE"
$QUIET || echo "[brain-db-sync] $*"
}
# Vérifications préalables
if [[ ! -f "$MIGRATE" ]]; then
log "ERROR: migrate.py introuvable ($MIGRATE)"
exit 1
fi
if ! python3 -c "import sqlite3" 2>/dev/null; then
log "ERROR: python3/sqlite3 absent"
exit 1
fi
# --check : brain.db stale si plus vieux que le dernier commit touchant claims/ ou handoffs/
if $CHECK_ONLY; then
if [[ ! -f "$DB_PATH" ]]; then
log "STALE: brain.db absent"
exit 2
fi
db_mtime=$(stat -c %Y "$DB_PATH" 2>/dev/null || echo 0)
last_commit_ts=$(git -C "$BRAIN_ROOT" log -1 --format="%ct" -- claims/ handoffs/ BRAIN-INDEX.md 2>/dev/null || echo 0)
if [[ "$last_commit_ts" -gt "$db_mtime" ]]; then
log "STALE: brain.db ($db_mtime) < dernier commit claims/handoffs ($last_commit_ts)"
exit 2
fi
log "OK: brain.db à jour"
exit 0
fi
# Sync
log "Démarrage migrate.py..."
if python3 "$MIGRATE" >> "$LOG_FILE" 2>&1; then
claim_count=$(python3 -c "
import sqlite3
conn = sqlite3.connect('$DB_PATH')
n = conn.execute(\"SELECT COUNT(*) FROM claims\").fetchone()[0]
o = conn.execute(\"SELECT COUNT(*) FROM claims WHERE status='open'\").fetchone()[0]
print(f'{o} open / {n} total')
conn.close()
" 2>/dev/null || echo "?")
log "OK — claims: $claim_count"
else
log "ERROR: migrate.py a échoué (voir $LOG_FILE)"
exit 3
fi