diff --git a/wizard-work/sol/check_sol_profile_health.py b/wizard-work/sol/check_sol_profile_health.py new file mode 100644 index 0000000..3a24133 --- /dev/null +++ b/wizard-work/sol/check_sol_profile_health.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +"""CHECK for sol-profile-health artifact. + +Re-derives the profile classification straight from the filesystem and +compares it against the recorded values in the artifact. Exit 0 = artifact +matches reality; nonzero = artifact is wrong or missing. + +Usage: python3 check_sol_profile_health.py (exit code is the verdict) +""" +import json +import os +import re +import sys + +PROFILES = "/root/.hermes/profiles" +ARTIFACT = "/root/.hermes/wizard-outputs/sol/sol-profile-health-2026-10-24.json" + + +def recompute(): + out = {} + for name in os.listdir(PROFILES): + p = os.path.join(PROFILES, name) + if not os.path.isdir(p): + continue + cfg = os.path.join(p, "config.yaml") + has_cfg = os.path.isfile(cfg) + model = "" + if has_cfg: + try: + t = open(cfg, encoding="utf-8", errors="replace").read() + m = re.search(r"model:\s*\n\s*default:\s*(.+)", t) + if not m: + m = re.search(r"default:\s*(.+)", t) + model = m.group(1).strip() if m else "" + except Exception: + model = "" + if not has_cfg: + out[name] = "PLACEHOLDER" + elif model == "": + out[name] = "STALE" + else: + out[name] = "ACTIVE" + return out + + +def main(): + failures = [] + + if not os.path.exists(ARTIFACT): + print("FAIL: artifact missing: " + ARTIFACT) + sys.exit(1) + + with open(ARTIFACT, encoding="utf-8") as fh: + art = json.load(fh) + + recorded = {} + for e in art.get("entries", []): + recorded[e["name"]] = e.get("status") + + expected = recompute() + + # Every name must be present on both sides with identical status. + for name, st in expected.items(): + if recorded.get(name) != st: + failures.append("name %r recorded=%r expected=%r" % (name, recorded.get(name), st)) + for name in recorded: + if name not in expected: + failures.append("extra name in artifact: %r" % name) + + # Summary cross-check. + counts = {} + for s in expected.values(): + counts[s] = counts.get(s, 0) + 1 + if art.get("total") != len(expected): + failures.append("total mismatch: %r != %d" % (art.get("total"), len(expected))) + if art.get("ACTIVE") != counts.get("ACTIVE", 0): + failures.append("ACTIVE count mismatch: %r != %d" % (art.get("ACTIVE"), counts.get("ACTIVE", 0))) + if art.get("STALE") != counts.get("STALE", 0): + failures.append("STALE count mismatch: %r != %d" % (art.get("STALE"), counts.get("STALE", 0))) + if art.get("PLACEHOLDER") != counts.get("PLACEHOLDER", 0): + failures.append("PLACEHOLDER count mismatch: %r != %d" % (art.get("PLACEHOLDER"), counts.get("PLACEHOLDER", 0))) + + if failures: + print("FAIL: artifact does not match filesystem reality") + for f in failures: + print(" - " + f) + sys.exit(1) + + print("PASS: sol-profile-health artifact verified against filesystem") + print(" total=%d ACTIVE=%d STALE=%d PLACEHOLDER=%d" % ( + len(expected), counts.get("ACTIVE", 0), counts.get("STALE", 0), counts.get("PLACEHOLDER", 0))) + + +if __name__ == "__main__": + main() diff --git a/wizard-work/sol/sol-profile-health-2026-10-24.json b/wizard-work/sol/sol-profile-health-2026-10-24.json new file mode 100644 index 0000000..d66748c --- /dev/null +++ b/wizard-work/sol/sol-profile-health-2026-10-24.json @@ -0,0 +1,253 @@ +{ + "generated_at_utc": "2026-10-24T05:09:48Z", + "profiles_base": "/root/.hermes/profiles", + "total": 27, + "ACTIVE": 26, + "STALE": 0, + "PLACEHOLDER": 1, + "entries": [ + { + "name": "argus", + "has_cfg": true, + "model": "meituan/longcat-2.5-preview:free", + "model_err": "", + "nfiles": 16, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "beam", + "has_cfg": true, + "model": "reflection/beam-1.0-501b-a23b:free", + "model_err": "", + "nfiles": 16, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "buzzpilot", + "has_cfg": true, + "model": "gpt-5.6-sol", + "model_err": "", + "nfiles": 23, + "ndirs": 26, + "status": "ACTIVE" + }, + { + "name": "courtney", + "has_cfg": true, + "model": "deepseek-v4-pro", + "model_err": "", + "nfiles": 12, + "ndirs": 21, + "status": "ACTIVE" + }, + { + "name": "forge", + "has_cfg": true, + "model": "poolside/laguna-s-2.1:free", + "model_err": "", + "nfiles": 29, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "home", + "has_cfg": true, + "model": "deepseek-v4-pro", + "model_err": "", + "nfiles": 10, + "ndirs": 19, + "status": "ACTIVE" + }, + { + "name": "hou3", + "has_cfg": true, + "model": "stepfun/step-3.7-flash:free", + "model_err": "", + "nfiles": 16, + "ndirs": 22, + "status": "ACTIVE" + }, + { + "name": "inference-lab", + "has_cfg": true, + "model": "gpt-5.6-sol", + "model_err": "", + "nfiles": 17, + "ndirs": 21, + "status": "ACTIVE" + }, + { + "name": "kendra", + "has_cfg": true, + "model": "deepseek-v4-pro", + "model_err": "", + "nfiles": 10, + "ndirs": 19, + "status": "ACTIVE" + }, + { + "name": "ledger", + "has_cfg": true, + "model": "upstage/solar-mini4:free", + "model_err": "", + "nfiles": 19, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "lilly", + "has_cfg": true, + "model": "deepseek-v4-pro", + "model_err": "", + "nfiles": 12, + "ndirs": 22, + "status": "ACTIVE" + }, + { + "name": "merlin", + "has_cfg": true, + "model": "stepfun/step-5-preview:free", + "model_err": "", + "nfiles": 17, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "nightprowl", + "has_cfg": true, + "model": "meituan/longcat-2.0:free", + "model_err": "", + "nfiles": 19, + "ndirs": 22, + "status": "ACTIVE" + }, + { + "name": "null", + "has_cfg": true, + "model": "meituan/longcat-2.5-preview:free", + "model_err": "", + "nfiles": 19, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "praetorian", + "has_cfg": true, + "model": "nemotron-3.5-lightning-free", + "model_err": "", + "nfiles": 31, + "ndirs": 27, + "status": "ACTIVE" + }, + { + "name": "quill", + "has_cfg": true, + "model": "stepfun/step-3.7-flash:free", + "model_err": "", + "nfiles": 18, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "scribe", + "has_cfg": true, + "model": "meituan/longcat-2.0:free", + "model_err": "", + "nfiles": 18, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "sentinel", + "has_cfg": true, + "model": "nvidia/nemotron-3.5-super-vl-120b-a12b", + "model_err": "", + "nfiles": 16, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "sherry", + "has_cfg": true, + "model": "deepseek-v4-pro", + "model_err": "", + "nfiles": 10, + "ndirs": 19, + "status": "ACTIVE" + }, + { + "name": "sol", + "has_cfg": true, + "model": "upstage/solar-mini4:free", + "model_err": "", + "nfiles": 36, + "ndirs": 27, + "status": "ACTIVE" + }, + { + "name": "spark", + "has_cfg": true, + "model": "poolside/laguna-xs-2.1:free", + "model_err": "", + "nfiles": 18, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "spark-snippet-wizard", + "has_cfg": false, + "model": "", + "model_err": "", + "nfiles": 10, + "ndirs": 13, + "status": "PLACEHOLDER" + }, + { + "name": "sphinx", + "has_cfg": true, + "model": "meituan/longcat-2.5-preview:free", + "model_err": "", + "nfiles": 19, + "ndirs": 24, + "status": "ACTIVE" + }, + { + "name": "timmy", + "has_cfg": true, + "model": "gpt-5.6-sol", + "model_err": "", + "nfiles": 21, + "ndirs": 25, + "status": "ACTIVE" + }, + { + "name": "vincent", + "has_cfg": true, + "model": "gpt-5.6-sol", + "model_err": "", + "nfiles": 19, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "volt", + "has_cfg": true, + "model": "deepseek-flash", + "model_err": "", + "nfiles": 16, + "ndirs": 23, + "status": "ACTIVE" + }, + { + "name": "worker", + "has_cfg": true, + "model": "stealth/space-bunny-alpha", + "model_err": "", + "nfiles": 10, + "ndirs": 18, + "status": "ACTIVE" + } + ] +} diff --git a/wizard-work/sol/sol-profile-health-2026-10-24.md b/wizard-work/sol/sol-profile-health-2026-10-24.md new file mode 100644 index 0000000..8384ed5 --- /dev/null +++ b/wizard-work/sol/sol-profile-health-2026-10-24.md @@ -0,0 +1,55 @@ +# Sol profile health triage + +Date: 2026-10-24T05:09:48Z | Evidence: `ls /root/.hermes/profiles`; each `config.yaml` parsed for an explicit `default` model. + +## Summary + +| Metric | Count | +|---|---| +| Total top-level profile entries | 27 | +| ACTIVE (installed agent, config model present) | 26 | +| STALE (config model empty/error) | 0 | +| PLACEHOLDER (no config.yaml) | 1 | + +## Outcome + +- **PLACEHOLDER (1):** spark-snippet-wizard + +- **ACTIVE:** 26 profiles, all with an installed agent model. + +## Active profiles (sorted by name) + +| name | model | files | dirs | +|---|---|---|---| +| argus | meituan/longcat-2.5-preview:free | 16 | 24 | +| beam | reflection/beam-1.0-501b-a23b:free | 16 | 23 | +| buzzpilot | gpt-5.6-sol | 23 | 26 | +| courtney | deepseek-v4-pro | 12 | 21 | +| forge | poolside/laguna-s-2.1:free | 29 | 24 | +| home | deepseek-v4-pro | 10 | 19 | +| hou3 | stepfun/step-3.7-flash:free | 16 | 22 | +| inference-lab | gpt-5.6-sol | 17 | 21 | +| kendra | deepseek-v4-pro | 10 | 19 | +| ledger | upstage/solar-mini4:free | 19 | 24 | +| lilly | deepseek-v4-pro | 12 | 22 | +| merlin | stepfun/step-5-preview:free | 17 | 24 | +| nightprowl | meituan/longcat-2.0:free | 19 | 22 | +| null | meituan/longcat-2.5-preview:free | 19 | 24 | +| praetorian | nemotron-3.5-lightning-free | 31 | 27 | +| quill | stepfun/step-3.7-flash:free | 18 | 23 | +| scribe | meituan/longcat-2.0:free | 18 | 23 | +| sentinel | nvidia/nemotron-3.5-super-vl-120b-a12b | 16 | 23 | +| sherry | deepseek-v4-pro | 10 | 19 | +| sol | upstage/solar-mini4:free | 36 | 27 | +| spark | poolside/laguna-xs-2.1:free | 18 | 24 | +| sphinx | meituan/longcat-2.5-preview:free | 19 | 24 | +| timmy | gpt-5.6-sol | 21 | 25 | +| vincent | gpt-5.6-sol | 19 | 23 | +| volt | deepseek-flash | 16 | 23 | +| worker | stealth/space-bunny-alpha | 10 | 18 | + +## Placeholder profiles + +| name | files | dirs | reason | +|---|---|---|---| +| spark-snippet-wizard | 10 | 13 | no config.yaml (bare directory) |