diff --git a/api/ambre-doc-gen.php b/api/ambre-doc-gen.php new file mode 100644 index 000000000..7b89f94ac --- /dev/null +++ b/api/ambre-doc-gen.php @@ -0,0 +1,88 @@ +false, "error"=>"content required"]); + exit; +} + +// === Type validation === +$allowed = ["pdf","docx","pptx","html","odt","epub"]; +if (!in_array($type, $allowed)) { + http_response_code(400); + echo json_encode(["ok"=>false, "error"=>"invalid type", "allowed"=>$allowed]); + exit; +} + +// === Prepare output dir === +$outdir = "/var/www/html/generated"; +if (!is_dir($outdir)) @mkdir($outdir, 0755, true); + +$ts = date("Ymd-His"); +$rand = substr(md5(random_bytes(8)), 0, 6); +$safe_title = preg_replace("/[^a-zA-Z0-9\-_]/", "-", substr($title, 0, 40)); +$basename = "wevia-{$safe_title}-{$ts}-{$rand}"; +$md_path = "$outdir/$basename.md"; +$out_path = "$outdir/$basename.$type"; + +// === Write markdown input === +$md_content = "# $title\n\n" . $content; +file_put_contents($md_path, $md_content); + +// === Generate via pandoc === +$start = microtime(true); +if ($type === "pdf") { + // Use wkhtmltopdf via pandoc for better rendering + $cmd = "pandoc " . escapeshellarg($md_path) . " --pdf-engine=wkhtmltopdf -o " . escapeshellarg($out_path) . " 2>&1"; +} else if ($type === "pptx" || $type === "docx" || $type === "odt" || $type === "html" || $type === "epub") { + $cmd = "pandoc " . escapeshellarg($md_path) . " -o " . escapeshellarg($out_path) . " 2>&1"; +} +$cmd_output = @shell_exec("timeout 30 $cmd"); +$elapsed = round((microtime(true) - $start) * 1000); + +// === Check result === +if (!file_exists($out_path) || filesize($out_path) === 0) { + @unlink($md_path); + echo json_encode([ + "ok" => false, + "error" => "pandoc failed", + "pandoc_output" => $cmd_output, + "cmd" => $cmd, + "elapsed_ms" => $elapsed, + ]); + exit; +} + +$size = filesize($out_path); +$url = "/generated/$basename.$type"; + +// Keep md source for provenance +echo json_encode([ + "ok" => true, + "url" => $url, + "full_url" => "https://weval-consulting.com$url", + "size" => $size, + "size_human" => $size > 1024 ? round($size/1024, 1) . "KB" : "$size B", + "type" => $type, + "title" => $title, + "elapsed_ms" => $elapsed, + "md_source" => "/generated/$basename.md", + "ts" => date("c"), + "engine" => $type === "pdf" ? "pandoc+wkhtmltopdf" : "pandoc", +], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); diff --git a/api/ambre-libs-check.php b/api/ambre-libs-check.php new file mode 100644 index 000000000..55d16aea0 --- /dev/null +++ b/api/ambre-libs-check.php @@ -0,0 +1,45 @@ +true, "ts"=>date("c"), "s204"=>[]]; + +// Shell binary checks +foreach (["pandoc","wkhtmltopdf","libreoffice","soffice","unoconv","markdown","gs"] as $cmd) { + $p = @trim(shell_exec("which $cmd 2>/dev/null")); + $out["s204"]["bin_$cmd"] = $p ?: "NOT FOUND"; +} + +// Composer autoload paths (commonly in /var/www/html/vendor or /opt/wevia-brain/vendor) +foreach (["/var/www/html/vendor/autoload.php","/opt/wevia-brain/vendor/autoload.php","/var/www/weval/vendor/autoload.php","/opt/weval-l99/vendor/autoload.php"] as $autoload) { + if (file_exists($autoload)) { + $out["s204"]["composer_$autoload"] = "EXISTS"; + } +} + +// Scan vendor folder for specific packages +foreach (["/var/www/html/vendor","/opt/wevia-brain/vendor","/var/www/weval/vendor"] as $vendor_dir) { + if (is_dir($vendor_dir)) { + foreach (["dompdf","phpoffice","mpdf","tcpdf","phpspreadsheet","phppresentation","phpword"] as $pkg) { + $found = @shell_exec("find $vendor_dir -maxdepth 3 -type d -iname "*$pkg*" 2>/dev/null | head -3"); + if (trim($found)) $out["s204"]["pkg_$pkg"] = trim($found); + } + } +} + +// PHP extensions +$ext_list = get_loaded_extensions(); +foreach (["gd","imagick","zip","mbstring","xml","curl","openssl"] as $ext) { + $out["s204"]["ext_$ext"] = in_array($ext, $ext_list) ? "YES" : "NO"; +} + +// Check /var/www/html/generated directory +$out["s204"]["generated_dir"] = is_dir("/var/www/html/generated") ? "EXISTS" : "MISSING"; +if (is_dir("/var/www/html/generated")) { + $files = glob("/var/www/html/generated/*"); + $out["s204"]["generated_count"] = count($files); + $out["s204"]["generated_sample"] = array_slice(array_map("basename", $files), 0, 5); +} + +echo json_encode($out, JSON_PRETTY_PRINT); diff --git a/api/ambre-list-stubs.php b/api/ambre-list-stubs.php new file mode 100644 index 000000000..7df88bd6b --- /dev/null +++ b/api/ambre-list-stubs.php @@ -0,0 +1,33 @@ +count($files), "matches"=>[]]; +foreach ($files as $f) { + $name = basename($f, ".php"); + $short = str_replace("intent-opus4-", "", $name); + if ($kw && stripos($short, $kw) === false) continue; + // Read metadata if array stub + ob_start(); + $info = @include $f; + @ob_end_clean(); + $meta = [ + "name" => $short, + "size" => filesize($f), + "mtime" => gmdate("c", filemtime($f)), + ]; + if (is_array($info)) { + $meta["triggers"] = $info["triggers"] ?? []; + $meta["status"] = $info["status"] ?? "?"; + $meta["cmd"] = $info["cmd"] ?? "?"; + } else { + $meta["type"] = "direct-exec"; + } + $out["matches"][] = $meta; +} +$out["matches_count"] = count($out["matches"]); +echo json_encode($out, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES); diff --git a/api/nonreg-latest.json b/api/nonreg-latest.json index ebbbccd09..fc0f89391 100644 --- a/api/nonreg-latest.json +++ b/api/nonreg-latest.json @@ -1 +1 @@ -{"ts": "20260421_150335", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.3, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []} \ No newline at end of file +{"ts": "20260421_152221", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 32.4, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []} \ No newline at end of file diff --git a/api/nonreg-report.html b/api/nonreg-report.html index 57b262c93..c198f6332 100644 --- a/api/nonreg-report.html +++ b/api/nonreg-report.html @@ -1 +1 @@ -
153/153 PASS | 0 FAIL | 32.3s | 10 couches | 4 machines
| Test | Couche | St | Detail |
|---|---|---|---|
| Home | S204 | PASS | 200 22KB |
| WEVIA | S204 | PASS | 200 22KB |
| Manager | S204 | PASS | 302 1KB |
| Radar | S204 | PASS | 200 60KB |
| ToolsHub | S204 | PASS | 302 1KB |
| Monitor | S204 | PASS | 302 1KB |
| Huawei | S204 | PASS | 200 43KB |
| DeerFlow | S204 | PASS | 200 22KB |
| CRM-Hub | S204 | PASS | 200 25KB |
| WV-Dash | S95-WV | PASS | 301 0KB |
| WV-Apps | S95-WV | PASS | 200 2KB |
| WV-IA | S95-WV | PASS | 200 13KB |
| WV-Proc | S95-WV | PASS | 200 9KB |
| WV-Widget | S95-WV | PASS | 200 23KB |
| WV-Sent | S95-WV | PASS | 200 12KB |
| WV-Ctrl | S95-WV | PASS | 200 18KB |
| WV-Brain | S95-WV | PASS | 200 30KB |
| WV-O365 | S95-WV | PASS | 200 34KB |
| WV-Deliv | S95-WV | PASS | 200 5KB |
| WV-Warm | S95-WV | PASS | 200 7KB |
| WV-Send | S95-WV | PASS | 200 0KB |
| A-ghost-ne | S95-ARS | PASS | 200 10KB |
| A-brain-se | S95-ARS | PASS | 200 32KB |
| A-campaign | S95-ARS | PASS | 200 31KB |
| A-growth-e | S95-ARS | PASS | 200 20KB |
| A-deal-pip | S95-ARS | PASS | 200 21KB |
| A-cloud-pr | S95-ARS | PASS | 200 18KB |
| A-cloudfla | S95-ARS | PASS | 200 29KB |
| A-dashboar | S95-ARS | PASS | 200 32KB |
| A-send-pip | S95-ARS | PASS | 200 6KB |
| A-harvest- | S95-ARS | PASS | 200 44KB |
| A-command- | S95-ARS | PASS | 200 45KB |
| A-domain-m | S95-ARS | PASS | 200 40KB |
| A-ceo-dash | S95-ARS | PASS | 200 23KB |
| A-reputati | S95-ARS | PASS | 200 38KB |
| A-newslett | S95-ARS | PASS | 200 29KB |
| A-tracking | S95-ARS | PASS | 200 21KB |
| A-self-hea | S95-ARS | PASS | 200 42KB |
| iResp-Root | S95-iR | PASS | 200 |
| Ethica | INFRA | PASS | 302 0KB |
| Consent | INFRA | PASS | 200 9KB |
| Twenty | INFRA | PASS | 200 2KB |
| n8n | INFRA | PASS | 200 16KB |
| MM | INFRA | PASS | 200 681KB |
| WEVIA | API | PASS | JSON 53B |
| Manifest | API | PASS | JSON 2906B |
| Health | API | PASS | JSON 952B |
| AEGIS | API | PASS | JSON 424B |
| AE-Sc | API | PASS | JSON 98B |
| AE-Pol | API | PASS | JSON 244B |
| SS | API | PASS | JSON 269B |
| SS-S | API | PASS | JSON 313B |
| SS-R | API | PASS | JSON 137B |
| AIOS | API | PASS | JSON 254B |
| AI-Ag | API | PASS | JSON 348B |
| AI-K | API | PASS | JSON 281B |
| OClaw | API | PASS | JSON 391B |
| Prom | API | PASS | JSON 121B |
| SMem | API | PASS | JSON 196B |
| Mstr | API | PASS | JSON 211B |
| Dify | API | PASS | JSON 479B |
| Evo | API | PASS | JSON 143B |
| APcs | API | PASS | JSON 125B |
| Goose | API | PASS | JSON 177B |
| BrUse | API | PASS | JSON 24B |
| EthP | API | PASS | JSON 78B |
| Rtr | API | PASS | JSON 189B |
| NR-JSON | API | PASS | JSON 774B |
| CRM | API | PASS | JSON 25B |
| LvMet | API | PASS | JSON 85B |
| MonDsh | API | PASS | JSON 1520B |
| IP-WV | SEC | PASS | Clean |
| IP-WA | SEC | PASS | Clean |
| IP-CRM | SEC | PASS | Clean |
| Nuclei | SEC | PASS | 0 finds |
| KumoMTA | S95-BK | PASS | active |
| PMTA | S95-BK | PASS | 2 procs (senders standby) |
| EthDB | S95-BK | PASS | 161733 ct |
| SendDB | S95-BK | PASS | 3097643 ct |
| S95-Dsk | S95-BK | PASS | 81% |
| Docker | S95-BK | PASS | active |
| C2-API | PASS | JSON 352B | |
| WA-Hook | C2-API | PASS | 403 |
| SpamScore | C2-API | PASS | 200 |
| WEVADS-IA | C2-SPA | PASS | 200 13KB |
| Blacklist | C2-WV | PASS | 200 2KB |
| WorldDash | C2-WV | PASS | 200 15KB |
| Seeds | C2-WV | PASS | 200 1058KB |
| NR-API | C2-API | PASS | JSON 719B |
| SSO-blade-cent | SSO | PASS | 200 |
| SSO-blade-ai.h | SSO | PASS | 200 |
| SSO-claude-mon | SSO | PASS | 200 |
| SSO-crons-moni | SSO | PASS | 200 |
| SSO-monitoring | SSO | PASS | 200 |
| SSO-openclaw.h | SSO | PASS | 200 |
| SSO-crm.html | SSO | PASS | 200 |
| SSO-world-map- | SSO | PASS | 200 |
| B2B-Leads | DATA | PASS | 2089 leads |
| DATA | PASS | 2344 profiles | |
| Ethica-DZ | DATA | PASS | 122337 HCPs |
| Ethica-MA | DATA | PASS | 19723 HCPs |
| Ethica-TN | DATA | PASS | 17794 HCPs |
| Ethica-Crons | CRONS | PASS | 17 cron entries (crontab-based) |
| Ethica-Scripts | CRONS | PASS | 15 scripts |
| Blade-API | BLADE | PASS | JSON 294B |
| Blade-Brain | BLADE | PASS | 18B |
| Blade-AI | BLADE | PASS | 302 |
| Blade-Ctr | BLADE | PASS | 302 |
| Sentinel-PS1 | BLADE | PASS | 200 16KB |
| Life-API | LIFE | PASS | 50B |
| Life-App | LIFE | PASS | 200 62KB |
| Life-HTML | LIFE | PASS | 200 24KB |
| Blade-TG | BLADE | PASS | 11B |
| Blade-MM | BLADE | PASS | 108B |
| WEVIA-Chat | FUNC | PASS | WEVIA Engine 183ch |
| Life-Chat | FUNC | PASS | 36ch |
| Ethica-Chat | FUNC | PASS | 451ch |
| Monitor-UP | FUNC | PASS | 11 services UP |
| Ollama-Live | FUNC | PASS | 7 models |
| Arsenal-HP | FUNC | PASS | 1378 screens |
| Ethica-HCPs | FUNC | PASS | 161733 HCPs |
| SSO-Blade | SSO | PASS | 302 |
| SSO-Monitor | SSO | PASS | 302 |
| SSO-CC | SSO | PASS | 302 |
| SSO-NR | SSO | PASS | 302 |
| SSO-MT | SSO | PASS | 302 |
| SSO-Ops | SSO | PASS | 302 |
| SSO-Tools | SSO | PASS | 302 |
| SSO-Apps | SSO | PASS | 302 |
| SSO-OClaw | SSO | PASS | 302 |
| SSO-CRM | SSO | PASS | 200 |
| SSO-Wksp | SSO | PASS | 200 |
| SSO-Life | SSO | PASS | 200 |
| SSO-Mega | SSO | PASS | 302 |
| Sub-CRM | SSO | PASS | 200 |
| Sub-n8n | SSO | PASS | 200 |
| Sub-MM | SSO | PASS | 200 |
| Sub-Deer | SSO | PASS | 200 |
| DF-Title | 01AVR | PASS | TWENTY! |
| CyberMon | 01AVR | PASS | 200 |
| Plausible | 01AVR | PASS | present |
| Plaus-Blog | 01AVR | PASS | present |
| Caps10 | 01AVR | PASS | 10/10 |
| OSS-Disc | 01AVR | PASS | 200 9921B |
| EthFeed | 01AVR | PASS | 161733 HCPs 20 feed |
| BladeAPI | 01AVR | PASS | 200 294B |
| CC-SSO | 01AVR | PASS | 302 |
| HealthCk | 01AVR | PASS | exists |
| Bench-LB-Dict | STRUCT | PASS | type=list len=39 |
| Bench-LB-Scores | STRUCT | PASS | val_type=dict |
| Bench-Eco | STRUCT | PASS | score=80 |
| Bench-AIs | STRUCT | PASS | count=39 |
| CronStatus | STRUCT | PASS | 10 active 5 disabled |
153/153 PASS | 0 FAIL | 32.4s | 10 couches | 4 machines
| Test | Couche | St | Detail |
|---|---|---|---|
| Home | S204 | PASS | 200 22KB |
| WEVIA | S204 | PASS | 200 22KB |
| Manager | S204 | PASS | 302 1KB |
| Radar | S204 | PASS | 200 60KB |
| ToolsHub | S204 | PASS | 302 1KB |
| Monitor | S204 | PASS | 302 1KB |
| Huawei | S204 | PASS | 200 43KB |
| DeerFlow | S204 | PASS | 200 22KB |
| CRM-Hub | S204 | PASS | 200 25KB |
| WV-Dash | S95-WV | PASS | 301 0KB |
| WV-Apps | S95-WV | PASS | 200 2KB |
| WV-IA | S95-WV | PASS | 200 13KB |
| WV-Proc | S95-WV | PASS | 200 9KB |
| WV-Widget | S95-WV | PASS | 200 23KB |
| WV-Sent | S95-WV | PASS | 200 12KB |
| WV-Ctrl | S95-WV | PASS | 200 18KB |
| WV-Brain | S95-WV | PASS | 200 30KB |
| WV-O365 | S95-WV | PASS | 200 34KB |
| WV-Deliv | S95-WV | PASS | 200 5KB |
| WV-Warm | S95-WV | PASS | 200 7KB |
| WV-Send | S95-WV | PASS | 200 0KB |
| A-ghost-ne | S95-ARS | PASS | 200 10KB |
| A-brain-se | S95-ARS | PASS | 200 32KB |
| A-campaign | S95-ARS | PASS | 200 31KB |
| A-growth-e | S95-ARS | PASS | 200 20KB |
| A-deal-pip | S95-ARS | PASS | 200 21KB |
| A-cloud-pr | S95-ARS | PASS | 200 18KB |
| A-cloudfla | S95-ARS | PASS | 200 29KB |
| A-dashboar | S95-ARS | PASS | 200 32KB |
| A-send-pip | S95-ARS | PASS | 200 6KB |
| A-harvest- | S95-ARS | PASS | 200 44KB |
| A-command- | S95-ARS | PASS | 200 45KB |
| A-domain-m | S95-ARS | PASS | 200 40KB |
| A-ceo-dash | S95-ARS | PASS | 200 23KB |
| A-reputati | S95-ARS | PASS | 200 38KB |
| A-newslett | S95-ARS | PASS | 200 29KB |
| A-tracking | S95-ARS | PASS | 200 21KB |
| A-self-hea | S95-ARS | PASS | 200 42KB |
| iResp-Root | S95-iR | PASS | 200 |
| Ethica | INFRA | PASS | 302 0KB |
| Consent | INFRA | PASS | 200 9KB |
| Twenty | INFRA | PASS | 200 2KB |
| n8n | INFRA | PASS | 200 16KB |
| MM | INFRA | PASS | 200 681KB |
| WEVIA | API | PASS | JSON 53B |
| Manifest | API | PASS | JSON 2906B |
| Health | API | PASS | JSON 952B |
| AEGIS | API | PASS | JSON 424B |
| AE-Sc | API | PASS | JSON 98B |
| AE-Pol | API | PASS | JSON 244B |
| SS | API | PASS | JSON 269B |
| SS-S | API | PASS | JSON 313B |
| SS-R | API | PASS | JSON 137B |
| AIOS | API | PASS | JSON 255B |
| AI-Ag | API | PASS | JSON 348B |
| AI-K | API | PASS | JSON 281B |
| OClaw | API | PASS | JSON 391B |
| Prom | API | PASS | JSON 123B |
| SMem | API | PASS | JSON 196B |
| Mstr | API | PASS | JSON 211B |
| Dify | API | PASS | JSON 479B |
| Evo | API | PASS | JSON 143B |
| APcs | API | PASS | JSON 125B |
| Goose | API | PASS | JSON 177B |
| BrUse | API | PASS | JSON 24B |
| EthP | API | PASS | JSON 78B |
| Rtr | API | PASS | JSON 189B |
| NR-JSON | API | PASS | JSON 774B |
| CRM | API | PASS | JSON 25B |
| LvMet | API | PASS | JSON 85B |
| MonDsh | API | PASS | JSON 1520B |
| IP-WV | SEC | PASS | Clean |
| IP-WA | SEC | PASS | Clean |
| IP-CRM | SEC | PASS | Clean |
| Nuclei | SEC | PASS | 0 finds |
| KumoMTA | S95-BK | PASS | active |
| PMTA | S95-BK | PASS | 2 procs (senders standby) |
| EthDB | S95-BK | PASS | 161733 ct |
| SendDB | S95-BK | PASS | 3097643 ct |
| S95-Dsk | S95-BK | PASS | 81% |
| Docker | S95-BK | PASS | active |
| C2-API | PASS | JSON 352B | |
| WA-Hook | C2-API | PASS | 403 |
| SpamScore | C2-API | PASS | 200 |
| WEVADS-IA | C2-SPA | PASS | 200 13KB |
| Blacklist | C2-WV | PASS | 200 2KB |
| WorldDash | C2-WV | PASS | 200 15KB |
| Seeds | C2-WV | PASS | 200 1058KB |
| NR-API | C2-API | PASS | JSON 719B |
| SSO-blade-cent | SSO | PASS | 200 |
| SSO-blade-ai.h | SSO | PASS | 200 |
| SSO-claude-mon | SSO | PASS | 200 |
| SSO-crons-moni | SSO | PASS | 200 |
| SSO-monitoring | SSO | PASS | 200 |
| SSO-openclaw.h | SSO | PASS | 200 |
| SSO-crm.html | SSO | PASS | 200 |
| SSO-world-map- | SSO | PASS | 200 |
| B2B-Leads | DATA | PASS | 2089 leads |
| DATA | PASS | 2344 profiles | |
| Ethica-DZ | DATA | PASS | 122337 HCPs |
| Ethica-MA | DATA | PASS | 19723 HCPs |
| Ethica-TN | DATA | PASS | 17794 HCPs |
| Ethica-Crons | CRONS | PASS | 17 cron entries (crontab-based) |
| Ethica-Scripts | CRONS | PASS | 15 scripts |
| Blade-API | BLADE | PASS | JSON 294B |
| Blade-Brain | BLADE | PASS | 18B |
| Blade-AI | BLADE | PASS | 302 |
| Blade-Ctr | BLADE | PASS | 302 |
| Sentinel-PS1 | BLADE | PASS | 200 16KB |
| Life-API | LIFE | PASS | 50B |
| Life-App | LIFE | PASS | 200 62KB |
| Life-HTML | LIFE | PASS | 200 24KB |
| Blade-TG | BLADE | PASS | 11B |
| Blade-MM | BLADE | PASS | 108B |
| WEVIA-Chat | FUNC | PASS | WEVIA Engine 152ch |
| Life-Chat | FUNC | PASS | 36ch |
| Ethica-Chat | FUNC | PASS | 220ch |
| Monitor-UP | FUNC | PASS | 11 services UP |
| Ollama-Live | FUNC | PASS | 7 models |
| Arsenal-HP | FUNC | PASS | 1378 screens |
| Ethica-HCPs | FUNC | PASS | 161733 HCPs |
| SSO-Blade | SSO | PASS | 302 |
| SSO-Monitor | SSO | PASS | 302 |
| SSO-CC | SSO | PASS | 302 |
| SSO-NR | SSO | PASS | 302 |
| SSO-MT | SSO | PASS | 302 |
| SSO-Ops | SSO | PASS | 302 |
| SSO-Tools | SSO | PASS | 302 |
| SSO-Apps | SSO | PASS | 302 |
| SSO-OClaw | SSO | PASS | 302 |
| SSO-CRM | SSO | PASS | 200 |
| SSO-Wksp | SSO | PASS | 200 |
| SSO-Life | SSO | PASS | 200 |
| SSO-Mega | SSO | PASS | 302 |
| Sub-CRM | SSO | PASS | 200 |
| Sub-n8n | SSO | PASS | 200 |
| Sub-MM | SSO | PASS | 200 |
| Sub-Deer | SSO | PASS | 200 |
| DF-Title | 01AVR | PASS | TWENTY! |
| CyberMon | 01AVR | PASS | 200 |
| Plausible | 01AVR | PASS | present |
| Plaus-Blog | 01AVR | PASS | present |
| Caps10 | 01AVR | PASS | 10/10 |
| OSS-Disc | 01AVR | PASS | 200 9921B |
| EthFeed | 01AVR | PASS | 161733 HCPs 20 feed |
| BladeAPI | 01AVR | PASS | 200 294B |
| CC-SSO | 01AVR | PASS | 302 |
| HealthCk | 01AVR | PASS | exists |
| Bench-LB-Dict | STRUCT | PASS | type=list len=39 |
| Bench-LB-Scores | STRUCT | PASS | val_type=dict |
| Bench-Eco | STRUCT | PASS | score=80 |
| Bench-AIs | STRUCT | PASS | count=39 |
| CronStatus | STRUCT | PASS | 10 active 5 disabled |