From observo-qa-toolkit
Verifies a set of designed test scenarios against actual source code before they are pushed to Observo (or any other test management platform). Checks endpoint paths, error message strings, validation rules, and field names against handler code, proto files, and validators. Gracefully degrades when source code is not accessible (e.g., when invoked by a QA team without repo access) — in that case, returns the scenarios unchanged and clearly flags that verification was skipped. Use when you have a draft set of scenarios derived from a PRD / requirements doc and want to ground them in the actual implementation before recording them anywhere. Triggered by phrases like "verify test cases against code", "ground these scenarios in implementation", "check error messages match the code", "code-verify these tests", or invoked from observo-test-cases as an optional pre-create step.
How this skill is triggered — by the user, by Claude, or both
Slash command
/observo-qa-toolkit:observo-code-verifierThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Ground PRD-derived test scenarios in the actual implementation, so error message strings, endpoint paths, validation rules, and field names match what the code really does. Optional, **non-blocking**: if there's no code access, the skill returns scenarios unchanged with a clear flag.
Ground PRD-derived test scenarios in the actual implementation, so error message strings, endpoint paths, validation rules, and field names match what the code really does. Optional, non-blocking: if there's no code access, the skill returns scenarios unchanged with a clear flag.
observo-test-cases between Design and Create, or stand-alone.The invoker should provide, in plain text:
./docs/requirements/auth.md.If nothing of the above is in the scenarios, there's nothing to verify — return early and say so.
Try sources of code in this order; stop at the first that works:
Bash: ls -d server web-portal worker mcp 2>/dev/null | head (or ls package.json go.mod Cargo.toml pyproject.toml 2>/dev/null). If any common project marker is present, the repo is local — use Read / Grep / Bash for the rest.mcp__*github*, mcp__*gitlab*, mcp__*git*, mcp__*filesystem*, mcp__*sourcegraph*, or similar is registered in this session, use it. Resolve the repo to inspect from context (the source doc usually lives in a repo path the user is already working with).verification: skipped (no code access) on each. Add one summary line: "Code verification skipped — install/connect a repo MCP or run from the project root for grounded verification."Set a variable code_source = "filesystem" | "mcp:<server-name>" | "none" to surface in the summary.
code_source != "none")For each scenario, attempt to verify each claim it makes. Use grep / search — never read whole files unless necessary. The patterns below assume a typical repo; adapt to whatever's actually there.
For Go/proto repos: grep -nE 'path:\\s*"<path>"|"<method>:\\s*\\"<path>\\""' server/proto/*.proto and grep -rn '<path>' server/api/ server/handlers/ 2>/dev/null.
For Node/Express/Fastify: grep -rnE 'app\\.(get|post|put|patch|delete)\\(\\s*"<path>"' src/ routes/ 2>/dev/null.
For Python/FastAPI/Flask: grep -rnE '@(app|router)\\.(get|post|put|patch|delete)\\(\\s*"<path>"' .
Confirm each scenario's endpoint path exists. If not found, mark the scenario verification: endpoint-mismatch with the closest-matching real path as a suggestion.
For each error string the scenario asserts (e.g. "email not found"):
grep -rnEi '"<error-string>"' server/ src/ services/ handlers/ 2>/dev/null | head -20
If found verbatim → verification: ok. If found in a different wording → verification: string-drift with both versions side by side and a suggestion to update the scenario. If not found at all → verification: error-string-missing, suggest the most likely actual string from nearby handler code.
Look in val/, validators/, validation/, or near the relevant handler:
grep -rnE 'min(\\.|=|\\()|max(\\.|=|\\()|regex|MinLen|MaxLen|Length|range' val/ validators/ 2>/dev/null
Compare the numeric thresholds / regex to the scenario's claim. Mark accordingly.
For claims like "session has user-agent and IP fields", grep proto / schema:
grep -rnE '(user_agent|ip|email|account_id)' server/proto/*.proto server/db/ 2>/dev/null
For claims like "background job send_verify_email is queued":
grep -rn 'send_verify_email\\|configure_account\\|send_forgot_password_email' worker/ server/ 2>/dev/null
If the task name in code differs (e.g. SendVerifyEmail in Go), normalize and mark accordingly.
For each scenario, emit a structured entry:
- name: "Login — unknown email returns 'email not found'"
verification:
code_source: filesystem
status: ok | string-drift | endpoint-mismatch | missing | skipped
notes: short reason
suggested_corrections:
- field: error_message
was: "email not found"
now: "user with this email not found"
evidence: server/api/login.go:42
scenario: <original payload, unchanged unless explicitly corrected>
Critical: never silently mutate scenarios. Mark drifts; the human (or the invoking skill) decides whether to apply suggestions.
Aggregate counts at the top of the response:
verification_summary:
code_source: filesystem
total: 49
ok: 38
string_drift: 7
endpoint_mismatch: 2
missing: 2
skipped: 0
If code_source == "none", all entries are skipped and the summary states it once at top — no per-entry noise.
Short, actionable:
server/ (filesystem). 38 ok, 7 string-drift, 2 endpoint-mismatch, 2 missing."was / now / evidence paths — sorted by risk (endpoint-mismatch > string-drift > missing).skipped. Always return scenarios.suggested_corrections.evidence must be a real file:line that you actually saw in grep output. If you can't find evidence, mark status: missing and stop — don't guess.status: missing with a short reason instead of stalling.npx claudepluginhub observo-ai/claude-plugins --plugin observo-qa-toolkitSearches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.