From f47e73044d4ef0d715d6030b8c58f4b7a12cbbc4 Mon Sep 17 00:00:00 2001 From: DEls Date: Mon, 12 Oct 2026 22:57:22 +0200 Subject: [PATCH] fix(openmaus): use supported portable requirements --- .../packages/dash-foreman-operator-1.0.0.openmaus.json | 9 ++------- openmaus/scripts/build_dash_foreman.py | 6 ++++-- openmaus/scripts/validate_openmaus.py | 9 +++++++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/openmaus/packages/dash-foreman-operator-1.0.0.openmaus.json b/openmaus/packages/dash-foreman-operator-1.0.0.openmaus.json index d5c7930..7359a93 100644 --- a/openmaus/packages/dash-foreman-operator-1.0.0.openmaus.json +++ b/openmaus/packages/dash-foreman-operator-1.0.0.openmaus.json @@ -18,13 +18,8 @@ ], "setupMinutes": 10, "requirements": { - "apps": [ - "MegaDash purchasing MCP connection" - ], - "capabilities": [ - "View scanned images and PDFs", - "Save local review reports" - ] + "apps": [], + "capabilities": [] }, "team": { "name": "Dash Foreman" diff --git a/openmaus/scripts/build_dash_foreman.py b/openmaus/scripts/build_dash_foreman.py index 1daf870..de89c79 100644 --- a/openmaus/scripts/build_dash_foreman.py +++ b/openmaus/scripts/build_dash_foreman.py @@ -42,8 +42,10 @@ def main(): ], 'setupMinutes': 10, 'requirements': { - 'apps': ['MegaDash purchasing MCP connection'], - 'capabilities': ['View scanned images and PDFs', 'Save local review reports'], + # Registry-specific requirement entries are not free-text labels. + # Manual MCP/image/report setup stays in the packaged skills. + 'apps': [], + 'capabilities': [], }, 'team': {'name': 'Dash Foreman'}, 'agents': [{ diff --git a/openmaus/scripts/validate_openmaus.py b/openmaus/scripts/validate_openmaus.py index 3a928e7..a972d00 100644 --- a/openmaus/scripts/validate_openmaus.py +++ b/openmaus/scripts/validate_openmaus.py @@ -21,6 +21,15 @@ def main(path): p = d.get("package", {}) for k in ["id","release","name","tagline","summary","category","author","license","outcomes","requirements","team","agents"]: if k not in p: errs.append(f"package.{k} missing") + # The supplied template/export examples establish empty requirement arrays. + # Nonempty registry requirements need the actual app schema, not free text. + requirements = p.get("requirements", {}) + if not isinstance(requirements, dict): + errs.append("package.requirements must be an object") + else: + for field in ("apps", "capabilities"): + if requirements.get(field) != []: + errs.append(f"package.requirements.{field}: this portable generator supports [] only; put manual setup in skills until registry requirements are verified") kebab = re.compile(r"^[a-z0-9]+(-[a-z0-9]+)*$") if not kebab.match(p.get("id","")): errs.append("package.id must be kebab-case") if not re.match(r"^\d+\.\d+\.\d+$", p.get("release","")): errs.append("release must be semver")