Files
2026-06-29 17:57:54 -04:00

3.7 KiB

Milestone 2 Verification and Challenge Report

Challenge Summary

Overall risk assessment: LOW

The additions of rootImage to the Menu model and columnImage / hoverImage to the MenuItem model are fully implemented and function correctly at all layers: DB, backend API, and MCP tool runtime. Data is stored and retrieved accurately, and validation rules reject invalid types on both the API and MCP boundaries.

We identified two minor issues during testing:

  1. API Robustness: Creating a duplicate menu returns 500 Failed to create menu instead of a friendly 409 Conflict.
  2. Schema Drift: The static schema definitions stored in the MCP app directory (e.g., upsert_menu.json) do not reflect the new fields, though the runtime schema returned by the running server is correct.

Challenges

[Medium] Challenge 1: Duplicate Menu Name triggers generic 500 Internal Server Error

  • Assumption challenged: The API should handle duplicate name entry gracefully and return a clear user/client feedback response (e.g., 409 Conflict).
  • Attack scenario: Sending a POST request to /api/menus with a name that already exists in the database.
  • Blast radius: The client receives a generic 500 Failed to create menu. This obscures DB constraints as server errors and makes client debugging harder.
  • Mitigation: Update the error handling in apps/backend/src/routes/menus.ts (POST /menus) to catch Prisma unique constraint failures (Error code P2002) and return a 409 Conflict status with a descriptive error message.

[Low] Challenge 2: Static MCP tool JSON files are outdated

  • Assumption challenged: The schema definition files on disk in the application directory /home/ti/.gemini/antigravity/mcp/homaroma_mcp/ should be in sync with the actual tool capabilities.
  • Attack scenario: An agent or developer reads /home/ti/.gemini/antigravity/mcp/homaroma_mcp/upsert_menu.json to discover input parameters and assumes rootImage, columnImage, and hoverImage are unsupported.
  • Blast radius: Documentation drift and developer confusion.
  • Mitigation: Regenerate or update the static schema files on disk to include the new fields.

Stress Test Results

Scenario Expected Behavior Actual Behavior Pass/Fail
API Menu Creation (Valid) Return 200 OK with stored rootImage, columnImage, hoverImage Successfully created menu & items, returned exact fields. PASS
API Menu Retrieval (Valid) GET /menus/:name retrieves correct image fields Correct fields returned. PASS
API Menu Update (Valid) PUT /menus/:name updates image fields correctly Correct fields updated and returned. PASS
API Type Validation Rejects invalid types for rootImage and columnImage/hoverImage Returned 422 Unprocessable Entity with specific schema validation mismatch messages. PASS
MCP List Tools tools/list returns schema including rootImage, columnImage, hoverImage Discovered fields are properly defined. PASS
MCP Upsert Menu (Valid) Creates menu with new fields via JSON-RPC stdin/stdout Returned success: true and the correct fields. PASS
MCP Upsert Menu (Invalid) Rejects invalid types with validation error Returned tool execution error specifying the validation issue. PASS

Unchallenged Areas

  • Theme Compliance: We verified database storage, APIs, and tool contracts. CSS/HTML visual rendering of these images in the SPA is not checked, as it is outside the scope of Milestone 2 (Backend & DB).
  • Other sections: Other CMS components/sections were not tested under this specific menu validation run.