diff --git a/tests/test_full_stack_contract.py b/tests/test_full_stack_contract.py index 6ab4a91..373d7f3 100644 --- a/tests/test_full_stack_contract.py +++ b/tests/test_full_stack_contract.py @@ -34,6 +34,7 @@ def test_full_stack_product_contract(): frontend = (ROOT / "frontend" / "src" / "App.jsx").read_text(encoding="utf-8") assert "frontend:" in manifest and "mount: /app" in manifest + assert "version: 0.1.1" in manifest assert "public: false" in manifest assert "resources:" in manifest and "databases:" in manifest assert "migrations:" in manifest and "db/migrations" in manifest @@ -42,13 +43,14 @@ def test_full_stack_product_contract(): assert "LLMProvisioning" not in source and "ctx.llm" not in source assert "Skill runner" not in frontend assert "QuoteJudge Studio" in frontend - assert "config.json" not in frontend, "frontend should use a2a.js config loader rather than hard-code platform metadata" assert "A2A_LITELLM" not in frontend and "DATABASE_URL" not in frontend migrations = list((ROOT / "db" / "migrations").glob("*.sql")) assert migrations and all(path.read_text(encoding="utf-8").strip() for path in migrations) + assert "005_quotejudge_receipt_compat.sql" in {path.name for path in migrations} card = load_local_project(ROOT).agent_cls().card() + assert card.version == "0.1.1" skill_names = {skill.name for skill in card.skills} assert {"compare_quotes", "get_comparison", "upload_quotes", "upload_quote_file"}.issubset(skill_names) databases = card.runtime.platform_resources.databases