qp-run
Automation stage of QP — executes the test cases from qp-plan against the live app through the session's adapter (Playwright MCP for web, computer-use MCP for…
Skill by chrono-meta
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/chrono-meta-qp-run
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/qp-run
What's inside
- Skill name
qp-run- Description
- Automation stage of QP — executes the test cases from qp-plan against the live app through the session's adapter (Playwright MCP for web, computer-use MCP for desktop), records one verdict per step with a closed status, an MTM branch, whether the step was closed by machine evidence or left to judgment, and masks emails/tokens/passwords out of the evidence before saving. Triggers on "run these test cases", "execute the QA plan against the site", "drive the app through the TCs", "TC 실행해줘", "플랜대로 돌려줘".
- License
- MIT
- Instructions
- 42 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (1)
- SKILL.md
SKILL.md (first lines)
# qp-run — Automation (execute → verdict → mask)
Input: `qp/plan/tcs.tsv` + the adapter/engine lines from `qp/plan/inventory.md`. Output dir: `qp/run/<YYYYMMDD-HHMM>/`.
## 0. MTM state — decide once, write it first
`#mtm:` is the first line of `verdicts.tsv`:
| value | when |
|---|---|
| `ACTIVE` | a plan document was given **and** you opened it (path recorded) |
| `UNAVAILABLE` | no plan document — expected values come from the inventory; the branch *differs from plan* is **unreachable** and the vocabulary collapses to AS_PLANNED / CODE_DIFFERS |
| `FAILED` | a plan document was given but could not be read — say so; do not fall back silently |
| `DISABLED` | the user turned it off (reason recorded) |
`UNAVAILABLE` and `FAILED` are different events; never merge them.
## 1. Precondition first — attribution, not blocking
Before step 1 of each TC, establish its `precondition`. Navigation you can do (`at:/about`) you do; state you cannot create (`logged-in`, `has-an-order`) you mark `UNMET_UNEXECUTABLE`. A step-1 failure under an unmet precondition is **`BLOCKED`**, not `FAIL` — you never reached the screen, so it is not a claim about the app. Only step 1 is re-attributed; later steps failed after arrival.
## 2. Execute each step, observe before and after
web: accessibility snapshot before → action → snapshot after. desktop: screenshot before/after. Save each observation as `<tc_id>_step<N>_{before,after}.{md,png}` and append its stable id from `bash plugins/fh-qp/scripts/qp_tools.sh screen-id <file>` (a content hash — Playwright MCP ref tokens change every navigation, so a raw file hash is NOT stable; measured 2026-09-05) to `evidence.tsv` (`tc_id<TAB>step<TAB>screen_hash`) — this file is what `qp-regress` reads.
## 3. Verdict row per step — `verdicts.tsv` (7 tab-separated fields)
```
tc_id status branch closure verb assertion expected_source
```
- `status` ∈ `PASS FAIL BLOCKED AMBIGUOUS` (AMBIGUOUS = could not map the step to one element: 0 candidates or a tie).
- `branch` ∈ `AS_PLANNED DIFFERS_FROM_PLAN CODE_DIFFERS NONE`. `DIFFERS_FROM_PLAN` only under `#mtm: ACTIVE` and only with `expected_source=PLAN_DOC`. `CODE_DIFFERS` needs `expected_source` `CODE` or `PLAN_DOC`. `NONE` only for BLOCKED/AMBIGUOUS.
- `closure` = `MACHINE` **only if** `assertion` names the check that closed it (`text-visible:About`, `url==…`, `element-count==3`). An empty assertion with `MACHINE` is invalid — that is the muscle-not-skeleton hole this field exists to close. Everything you decided by reading a screenshot is `JUDGMENT`.
- Validate before you finish: `bash plugins/fh-qp/scripts/qp_tools.sh mtm-check verdicts.tsv` must print `OK`; `run-verbs verdicts.tsv` must print `OK` (≥1 click/input actually executed).
## 4. Mask, then save — original 0
Every text artifact goes through `qp_tools.sh mask <in> <out>` and only `<out>` is kept; delete `<in>`. `RESIDUE` (rc 5) → do not keep the file; report which artifact. Typed secret values (from the profile's `*_env`) are read from the environment at type-time and never written. Screenshots that show a filled password field are kept only if the field is masked in the image (crop or overlay); otherwise drop the screenshot and say so.
## Done When
1. `verdicts.tsv` passes `mtm-check` and `run-verbs` · **[mandatory-pass]** — rc 0 both.
2. `evidence.tsv` has ≥1 row per executed TC · **[measured]**.
3. Masking: `grep -cE '@|Bearer|eyJ' <saved artifacts>` is 0 outside `__REDACTED_*__` markers · **[measured]** — the lane reproduces it on a known-dirty fixture.
4. Every BLOCKED verdict names its unmet precondition; every JUDGMENT closure says what was read · **[judged — pairing: `qp-regress` re-runs the same TCs and flags verdicts that flip without a DOM change; a second session reviews BLOCKED rows against the before-snapshots]**.
## Independently executable
Yes, given a `tcs.tsv` in the documented shape (hand-written is fine) and an adapter.From chrono-meta/forge-harness, MIT.
More from chrono-meta/forge-harness
- 0.651score
persona-cast
chrono-meta
One-line doorway that lets a field harness review an artifact (a screen, a spec, a PR, a page) through a pre-built cast of review-shaped personas — web-review…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
cross-ecosystem-synergy-detection
chrono-meta
Automatically discovers useful combinations (synergy pairs) across multiple installed plugins and skills, and presents them as a ranked table.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
video-ingest
chrono-meta
Ingests a video's content (YouTube and similar) for agent context, routing by capability, task need, and video length — a natively multimodal engine (Gemini…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
deliberation
chrono-meta
Multi-perspective synthesis structure — Innovator (propose) → Devil-Advocate (challenge) → Mediator (synthesize) 3-layer execution.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
return-path-gate
chrono-meta
Audits SKILL.md files in plugins/ for return-path gate compliance.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
verify-bidirectional
chrono-meta
A skill that immediately updates the baseline and reflects it in the next session when the user raises a counter-argument to an AI recommendation.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
pipeline-conductor
chrono-meta
Chains the four core FH verification pipelines (harvest-loop → steel-quench → phantom-quench → sim-conductor) into a single gated sweep.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
meta-prompt-builder
chrono-meta
Generates structured prompts to send to each agent in an agent dispatch plan.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
qp-plan
chrono-meta
Prepare stage of QP — builds a surface inventory of a web page or desktop app (routes, menus, forms, dialogs), checks it is MECE (no overlap, nothing missing…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
convergence-loop
chrono-meta
A universal gate-reinforcement meta-skill that replaces the "single-pass = done" pattern with a converging loop of up to N rounds.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
token-budget-gate
chrono-meta
Estimates token cost before a multi-step task and outputs a 4-tier Green/Yellow/Orange/Red gate verdict.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
contention-layer
chrono-meta
When two skills, agents, or independent research tracks produce conflicting verdicts on the same output, reads the conflict as a signal rather than an error…
SkillAFreshness: A★ 30Claude Code +9
Signals
- Stars
- 30
- Forks
- 1
- Open issues
- 2
- Last commit (this folder)
- Sep 5, 2026 (1 month ago)
- Last release
- Oct 24, 2026 (4 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/chrono-meta/forge-harness
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from chrono-meta
- 0.651score
persona-cast
chrono-meta
One-line doorway that lets a field harness review an artifact (a screen, a spec, a PR, a page) through a pre-built cast of review-shaped personas — web-review…
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
cross-ecosystem-synergy-detection
chrono-meta
Automatically discovers useful combinations (synergy pairs) across multiple installed plugins and skills, and presents them as a ranked table.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
meta-prompt-builder
chrono-meta
Generates structured prompts to send to each agent in an agent dispatch plan.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
verify-bidirectional
chrono-meta
A skill that immediately updates the baseline and reflects it in the next session when the user raises a counter-argument to an AI recommendation.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
return-path-gate
chrono-meta
Audits SKILL.md files in plugins/ for return-path gate compliance.
SkillAFreshness: A★ 30Claude Code +9 - 0.647score
video-ingest
chrono-meta
Ingests a video's content (YouTube and similar) for agent context, routing by capability, task need, and video length — a natively multimodal engine (Gemini…
SkillAFreshness: A★ 30Claude Code +9
Cite this page
qp-run skill. Agent Mart. https://agentmart.dev/skills/chrono-meta-qp-run (last updated 2026-10-24)