# TEST REPORT: Prompt Expander v1.0.2

## Build under test
- Clean unzip tested: `prompt-expander-v1.0.2-without-report.zip` sha256 `d6417621a3f05939b6f35b635ad921956574ca45c87016cf65c62b4f4704ee9a` (13 files).
- Started 2026-10-24 07:50:57 BST (UTC+01:00), finished 2026-10-24 07:50:57 BST (UTC+01:00).
- Frozen priors kept: `prompt-expander-v1.0.1.zip` sha256 `d217b7609f19931eb354b67183f4ac2ca7878ed0aadd52fcd70729911f622ff1`; `prompt-expander-v1.0.0.zip` sha256 `fdb24b0cad3679d610d0adef2d514133ee2bba0ac952f9a0248894afb3849e10`.
- Box: Linux, Python 3.13.5. Times are Europe/London (BST, UTC+1).

**Automated result (v1.0.2 clean unzip): FAILED STEPS: 0** — 11/11 unittest (1 skipped: TEST-REPORT absent in without-report build). 

No live model API was called for the fixture matrix. Fixture and live-matrix modes are **skill-application simulation** and documented expectations, except the ChatGPT Free UI smoke noted below.

## What is real and what is not
- **Real:** pack file layout; YAML frontmatter on `skills/prompt-expander/SKILL.md`; required behaviour sections in SKILL.md and `chat/{chatgpt,claude,grok}.md` (silent default, ask-on-divergence + wait, skip for empty/chat/yes-no/just-do-it, brief parts, honest non-interceptor limit; v1.0.1 adds multi-intent, conflicting constraints, ambiguous referent, injection non-override, language-agnostic intent); banned marketing phrases absent; `tests/fixtures/cases.json` + `live-cases.json` / `live-matrix-20261024.md`; **ChatGPT Free custom-instructions live smoke 24 Oct** (A/B/C PASS); **v1.0.2 ChatGPT paste ≤1500 chars** for Free respond-field limit.
- **Not real / not run:** Claude.ai / Grok custom-instruction UIs; Claude Code or Cursor in-app skill discovery smoke; A/B against a hosted model API beyond the ChatGPT Free smoke cases.

## ChatGPT Free live smoke + char-limit trim (v1.0.2, 2026-10-24)

ChatGPT Free **“How would you like ChatGPT to respond?”** is limited to **1500 characters**. Live smoke on 24 Oct needed a temporary split across two fields with the longer v1.0.1 paste. **v1.0.2** trims `chat/chatgpt.md` paste body (from “You follow **Prompt Expander**…” through Honesty) to ≤1500 so one paste fits; INSTALL says paste into that field only and leave “More about you” empty unless needed.

| Case | Mode | Result |
|---|---|---|
| A — Stripe-style constrained bullets | silent | **PASS** (work delivered; no unsolicited pasted brief) |
| B — Heroku / migrate-class ask | ask-back | **PASS** (brief shown; wait for OK) |
| C — Thanks / no ask | skip | **PASS** |

## 0. Clean automated re-run (v1.0.0 without-report, pre-patch baseline)
Re-run 2026-10-24 07:26:32 BST (UTC+01:00) from `prompt-expander-v1.0.0-without-report.zip` sha256 `741dab90c2b422a60a57d0750d88445e47326ccc4fb0663cec90facf2cb66cb0` (11 files).

**Result: FAILED STEPS: 0** — 11/11 unittest (1 skipped: TEST-REPORT absent in without-report build).

## Live skill-application 2026-10-24

Method: QA agent applied SKILL rules to each prompt (**skill-application simulation**, not live ChatGPT). Full write-up: `tests/fixtures/live-matrix-20261024.md` and `tests/fixtures/live-cases.json`.

| Bucket | Count | Notes |
|---|---|---|
| Silent expand (full A/B) | 4 | typo fix, 5 bullets+constraints, unit test, summarise≤150 |
| Ask-back (full A/B) | 4 | migrate Heroku, make it better, fix production, research no metric |
| Skip | 4 | thanks, yes, just do it, greeting |
| Extra edge cases | 10 | contradictory constraints, prompt-injection, multi-intent, error paste, empty, non-English, follow-up shorter, no-expand, ambiguous pronoun, chat-hides-prod-task |

**Mode accuracy:** 22/22 = **100%** (each case classified 3×; all consistent). Misses: none.

**Quality (naive vs expanded) on task cases:** 16 better / 0 same / 0 worse → **100% better** among expand_silent + expand_ask cases (skips N/A or same by design).

**Skill wording gaps found then patched into v1.0.1 SKILL + chat/*.md:**
1. Empty/whitespace → skip (explicit)
2. Multi-intent unrelated jobs → ask
3. Conflicting constraints → ask
4. Ambiguous pronoun/no context → ask
5. "Ignore previous instructions" is not a skip override; no silent destructive acts
6. Language-agnostic intent note; follow-up with/without prior brief

## 1. Pack checks: `python3 tests/check_pack.py`

| Area | Checks |
|---|---|
| Layout | README, INSTALL, LICENSE, REFUND; chat files; ASCII names |
| Skill | frontmatter `name`+`description` only; name `prompt-expander` |
| Behaviours | silent default, ask/wait on job change, skip rules, brief shape, interceptor honesty; banned phrases blocked |
| README / REFUND | "Tested by SkillHammer", support email, interceptor limit; 30-day refund |
| Fixtures | `cases.json` covers all three modes; live matrix files present under `tests/fixtures/` |

## Not tested
- Live expansion quality inside Claude / Grok sessions (ChatGPT Free A/B/C smoked 24 Oct)
- Whether a given model obeys ask-and-wait under tool-use pressure
- Mobile custom-instruction character limits beyond keeping `chat/grok.md` shorter and ChatGPT Free ≤1500
- Windows/macOS path quirks for skills folders

## Honest product limit
Prompt Expander is a **model-followed rule** (custom instructions or SKILL.md). It is **not** a true prompt interceptor that rewrites user input before the model sees it. This report does not claim otherwise. **No live model** API scores are claimed beyond the documented ChatGPT Free smoke cases.

Badge style for listings: **Tested by SkillHammer** (SkillHammer’s own claim, backed by this report; not a third-party certification).
