bughunt
bughunt
Exercise the product through its real controller and input paths, capture the first broken invariant, minimize it, fix the root cause, and replay the corpus. A persona is an action policy; an oracle is an independently observed condition that must hold.
Scope and setup
- Read repository instructions, release/build recipes, existing QA plumbing, and root
.bughunt.md. Use templates/project.bughunt.md for a missing override; record chosen defaults before running. In a documentation-only run, record the chosen values in the report instead of writing the file. - Establish permitted edits and runs, build identity, supported platforms, isolated test storage/accounts, and concurrency constraints. A skill-only request ends with documentation validation: do not build, launch, or modify the reference app. An owner's postponed run remains postponed. Keep production data, purchases, publication, and other people's builds/devices outside the harness.
- Select the adapter: Godot, native iOS, or web. Extend existing project runners; do not add a testing framework merely to follow this skill. Use references/sources.md when choosing a technique or checking platform support.
- Select the app profile and read it before planning: game, crud-app (records, forms, accounts), ai-chat (model conversations, streaming), or media (record, play, camera). A product that mixes types loads every profile it ships, e.g. a game with accounts loads
gameandcrud-app; a product matching none takes the nearest and records the unmapped flows as coverage gaps. The profile renames personas, binds oracles to the product, adds cases and fixtures; the core files stay the single source for everything it leaves unsaid. - Identify every shipped phase/screen and boundary: fresh launch, navigation, save, quit, cold launch, resume, interruptions, terminal states, and migration/error paths already supported. Map each to an observable oracle and a reachable test fixture. An unreachable required boundary is a coverage gap. Where a profile or oracle names a documented contract (draft kept or discarded, conflict rule, what sign-out clears) and the product documents none, report
contract absentas a finding for the owner and assert the observable minimum: no silent data loss, no crash, a visible outcome.
Done: a recorded run matrix has concrete commands/artifacts, profile(s), fixture reset, seeds, personas, phase coverage, enabled oracles, platform layers, time/disk limits, and permitted side effects.
1. Prepare the shipped target
Build or reuse a provenance-checked artifact using the project's release recipe: exported Godot game, native simulator/device build, or production web bundle served locally. Record commit, dirty diff if present, artifact hash/build number, tool versions, launch flags, and settings. Editor/core tests support diagnosis; they do not prove exported input, rendering, lifecycle, or packaging behavior.
QA instrumentation must be off in normal launches. If probes require a separate QA artifact, record its exact difference from the shipped configuration and the parity checks still required. Keep assertions effective in release configurations; use explicit failure reporting rather than debug-only assertions.