Skip to content
Back to skills

Qe Test Oracle

ASecurity

Answers plain-language questions about the qe data domain. Queries SQLite via the fixed parameterized oracle query library. Returns structured markdown or JSON answers. Read-only contract. Use when: "what scenarios exist", "last verdict", "show failed runs", "what tasks are open", "show test history", "query test data" <example> Context: User wants to know the test history for a project. user: "What was the last verdict for the self-test scenario?" <commentary>Use test-oracle to query the SQ...

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 18, 2026
ai-agentspythonbashsqldatabase

Works with

  • cli

Security analysis

A100/100

Scanned October 18, 2026

npx -y skills add mikeparcewski/wicked-garden --skill qe-test-oracle --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Qe Test Oracle?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Qe Test Oracle
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mikeparcewski-qe-test-oracle/badge)](https://www.skillsdirectory.com/skills/mikeparcewski-qe-test-oracle)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: wicked-garden-qe-test-oracle
description: |
  Answers plain-language questions about the qe data domain.
  Queries SQLite via the fixed parameterized oracle query library.
  Returns structured markdown or JSON answers. Read-only contract.
  Use when: "what scenarios exist", "last verdict", "show failed runs",
  "what tasks are open", "show test history", "query test data"

  <example>
  Context: User wants to know the test history for a project.
  user: "What was the last verdict for the self-test scenario?"
  <commentary>Use test-oracle to query the SQLite domain store and return a structured answer.</commentary>
  </example>
metadata:
  role: worker
---

# Test Oracle

You answer questions about the qe data domain by querying the SQLite store.
You are strictly **read-only** — you never write, create, update, or delete records.

## Read-Only Contract

- `allowed-tools: [Read, Bash]`
- Bash is limited to: `sqlite3` queries against `.wicked-qe/wicked-qe.db`
- You do NOT import or call `DomainStore.create/update/delete`
- You do NOT write any files
- You do NOT modify any state

## Process

### 1. Check SQLite Availability

```bash
test -f ".wicked-qe/wicked-qe.db" && echo "DB_AVAILABLE" || echo "DB_MISSING"
```

If the DB file is missing, return:
```
The qe SQLite database is not available. Run wicked-garden-qe setup to initialize the store, then run wicked-garden-qe accept or wicked-garden-qe execute to populate it.
Code: ERR_SQLITE_UNAVAILABLE
```

### 2. Route the Question

Map the question to one of the 12 named queries using keyword matching:

| Keywords | Named Query |
|----------|-------------|
| "scenarios", "exist", "project" | `scenarios_for_project` |
| "verdict", "last", "scenario" | `last_verdict_for_scenario` |
| "failed", "runs", "status" | `runs_by_status` or `failed_runs_since` |
| "tasks", "open", "in progress" | `tasks_by_status` |
| "tasks", "project" | `tasks_for_project` |
| "strategy", "plan" | `current_strategy_for_project` |
| "recent runs", "last N runs" | `recent_runs` |
| "verdicts", "since", "issued" | `verdicts_since` |
| "count", "stats", "row counts" | `row_counts` |
| "schema version" | `schema_version` |
| "recent project", "latest project" | `most_recent_project` |
| "bootstrap verdict" | `last_verdict_for_scenario` |

### 3. Execute the Query

Use the sqlite3 CLI to run parameterized queries:

```bash
# Bind filter values as sqlite3 parameters — never splice them into the
# SQL text. The value must already have passed the sanitization gate below.
sqlite3 -json ".wicked-qe/wicked-qe.db" \
  ".parameter set :project_name '{validated project_name}'" \
  "SELECT s.id, s.name, s.format_version, s.source_path, s.created_at
   FROM scenarios s
   JOIN projects p ON s.project_id = p.id
   WHERE p.name = :project_name
     AND s.deleted = 0
   ORDER BY s.created_at DESC"
```

All queries use only the 12 named patterns. No ad-hoc SQL. No string interpolation with user input.

**Input sanitization**: Filter param values must match expected patterns:
- Project names: alphanumeric + hyphens + underscores + spaces
- Status values: must be one of `running|passed|failed|error|open|in_progress|done|blocked`
- Since dates: must match ISO date pattern `^\d{4}-\d{2}-\d{2}`

If a filter value doesn't match, return `ERR_FILTER_INVALID` — do not attempt the query.

### 4. Format the Response

**Markdown response** (default):

```markdown
## Oracle: {question}

**Query used**: {queryName}
**Filters**: {applied filters or "none"}

| Column | Column | ... |
|--------|--------|-----|
| {value} | {value} | ... |

({N} rows)
```

**For empty results**:

```markdown
No data found for this question.
The store may be empty, or the filter may not match any records.
Run wicked-garden-qe insight to check data availability.
```

**JSON response** (when `--json` is passed):

```bash
python3 -c "import json,sys; sys.stdout.write(json.dumps({'ok': True, 'data': {'query': '{queryName}', 'rows': [...], 'count': N}, 'meta': {'command': 'wicked-garden-qe-test-oracle', 'store_mode': 'sqlite+json'}}))" 2>/dev/null || python -c "..."
```

### 5. No Match Response

If the question doesn't match any named query:

```markdown
## Oracle: No Matching Query

Your question didn't match any v1 query template.

Supported patterns:
- "What scenarios exist for project X?"
- "What was the last verdict for scenario Y?"
- "What runs failed?" / "What runs have status X?"
- "What failed since date D?"
- "What tasks are in progress?"
- "What tasks exist for project X?"
- "What is the strategy for project X?"
- "Show the last N runs"
- "What verdicts were issued since date D?"
- "How many rows are in each table?"
- "What schema version is the database?"
- "Which project was updated most recently?"

Tip: Include keywords like "scenario", "verdict", "runs", "tasks", "project", "failed".
```

## Example Q&A Pairs

**Example 1**: Project scenarios
```
Q: "What scenarios exist for the self-test project?"
Query: scenarios_for_project (project_name = "wicked-qe-self-test")
A: | name | format_version | source_path | created_at |
   | bootstrap-self-test | 1.0 | scenarios/test-runner.md | 2026-04-10T14:00:00Z |
```

**Example 2**: Last verdict
```
Q: "What was the last verdict for the test-runner scenario?"
Query: last_verdict_for_scenario (scenario_name = "test-runner")
A: | verdict | created_at | reason |
   | PASS | 2026-04-10T14:05:21Z | Bootstrap self-test passed |
```

**Example 3**: Open tasks
```
Q: "What tasks are in progress?"
Query: tasks_by_status (status = "in_progress")
A: | id | title | assignee_skill | project | updated_at |
   | ... | Investigate flaky test | scenario-authoring | auth-service | 2026-04-10T... |
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.