#!/bin/bash # ARCHI→MEETING PIPELINE — feeds recommendations to meeting rooms # Cron: */6h TS=$(date -Iseconds) ARCHI=/var/www/html/api/architecture-scanner.php MEETING_DATA=/var/www/html/api/meeting-archi-agenda.json LOG=/tmp/archi-meeting-pipeline.log echo "$TS === ARCHI→MEETING ===" >> $LOG # 1. Fetch fresh recommendations RECS=$(curl -sk --max-time 30 'https://127.0.0.1/api/architecture-scanner.php' -H 'Host: weval-consulting.com' 2>/dev/null) # 2. Parse and assign to squads python3 << 'PYEND' import json,sys,time try: data = json.loads(open("/dev/stdin").read() if False else "") except: import urllib.request,ssl ctx=ssl._create_unverified_context() req=urllib.request.Request("https://127.0.0.1/api/architecture-scanner.php",headers={"Host":"weval-consulting.com"}) data=json.loads(urllib.request.urlopen(req,context=ctx,timeout=30).read()) recs = data.get("recommendations", []) ts = time.strftime("%Y-%m-%dT%H:%M:%S") # Map categories to squads + agents SQUAD_MAP = { "INFRA": {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX", "Gap Detector"]}, "DOCKER": {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX"]}, "SECURITY": {"squad": "security", "lead": "Dark Tools", "agents": ["Dark Tools", "CrowdSec"]}, "OPTIMIZATION": {"squad": "ia", "lead": "WEVIA Master", "agents": ["WEVIA Master", "L99"]}, "SCALABILITY": {"squad": "dev", "lead": "NonReg", "agents": ["NonReg", "Evolution"]}, "KNOWLEDGE": {"squad": "ia", "lead": "DeerFlow", "agents": ["DeerFlow", "WEVIA Master"]}, "AI": {"squad": "ia", "lead": "OpenClaw", "agents": ["OpenClaw", "WEVIA Master"]}, } agenda = { "ts": ts, "type": "archi-review", "title": "Architecture Review — " + ts[:10], "score": data.get("score", "?"), "total_recs": len(recs), "items": [], "decisions": [], "actions": [] } for r in recs: cat = r.get("category", "INFRA") sev = r.get("severity", "info") squad = SQUAD_MAP.get(cat, {"squad": "infra", "lead": "CORTEX", "agents": ["CORTEX"]}) item = { "severity": sev, "category": cat, "title": r.get("title", ""), "detail": r.get("detail", ""), "squad": squad["squad"], "lead": squad["lead"], "agents": squad["agents"], "action_type": r.get("action", "manual"), "fix_cmd": r.get("fix_cmd", ""), "status": "pending" } agenda["items"].append(item) # Auto-generate decisions based on severity if sev in ["critical", "warning"]: agenda["decisions"].append({ "item": r.get("title", ""), "decision": "FIX IMMEDIATE" if sev == "critical" else "PLANIFIER FIX", "assigned_to": squad["lead"], "squad": squad["squad"], "deadline": "24h" if sev == "critical" else "7j" }) agenda["actions"].append({ "action": r.get("title", ""), "agent": squad["lead"], "type": r.get("action", "manual"), "cmd": r.get("fix_cmd", ""), "status": "pending" }) elif sev in ["info", "opportunity"]: agenda["decisions"].append({ "item": r.get("title", ""), "decision": "BACKLOG" if sev == "info" else "OPPORTUNITE", "assigned_to": squad["lead"], "squad": squad["squad"], "deadline": "30j" }) json.dump(agenda, open("/var/www/html/api/meeting-archi-agenda.json", "w"), indent=2, ensure_ascii=False) print(f"AGENDA: {len(agenda['items'])} items, {len(agenda['decisions'])} decisions, {len(agenda['actions'])} actions") PYEND echo "$TS DONE" >> $LOG