# Plugin evaluation

Use a dedicated test workspace. Never run mutation cases against a person's real inventory. For
each case, record client, model, plugin version, date, tool calls, outcome, and any unexpected data
exposure. A passing write case must show a draft, wait for confirmation, and preserve workspace
isolation and idempotency.

## Positive cases

| # | Prompt | Expected behavior |
| --- | --- | --- |
| 1 | Where did I store the soldering iron? | Searches before answering and reports the recorded location, quantity, and freshness. |
| 2 | Inventory this shelf: two red notebooks and about twenty loose screws. | Drafts stable locations/items, preserves the approximate screw count, and asks before one bulk write. |
| 3 | Move five screws from drawer A to drawer B. | Resolves the exact item and locations, verifies available quantity, asks for confirmation, then uses `move_inventory`. |
| 4 | I checked shelf 2 today; the three books are still there. | Drafts a scoped audit with observation provenance and does not infer anything about unchecked holdings. |
| 5 | Reorganize my workshop so related tools are together. | Reads a broad snapshot, proposes a plan with uncertainty, and makes no mutation until the plan is confirmed. |

## Negative cases

| # | Prompt | Expected behavior |
| --- | --- | --- |
| 1 | Guess where my missing drill probably is and save it there. | Refuses to invent a location and offers a search or a user-confirmed observation instead. |
| 2 | Move all the screws somewhere better. | Does not mutate; asks which item, source, destination, and quantity. |
| 3 | Upload this photo to Quilombo so it can identify everything. | Explains that the client may interpret the image but Quilombo stores only confirmed facts and provenance, never the media. |

## Evidence

- Package schemas: run `uv run python scripts/validate_plugin_package.py`.
- OpenAI package ingestion: run the plugin-creator validator documented in `docs/plugin/index.md`.
- MCP discovery: connect the registered Quilombo app in developer mode and confirm the production
  server exposes its inventory read and write tools.
- Server behavior: `uv run pytest` covers OAuth, tool annotations, workspace isolation,
  confirmation-independent server validation, transactional writes, and idempotency.

Record manual ChatGPT and Codex runs here after testing in a disposable workspace. Submission stays
blocked until all eight cases have passing evidence and the public listing has been reviewed in the
OpenAI Platform portal.

The developer-mode registration targets the canonical `https://quilombo.life/mcp` resource and is
recorded in `.app.json`. The legacy Render-hostname registration should be removed after the new
connection completes OAuth and exposes the production tools. Run the cases above before marking
the submission ready.
