@qaping/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/qaping CHANGED
@@ -183,12 +183,21 @@ function cmdPublishBuild(argv) {
183
183
  .main(argv.slice(1), { brandCommand: "qaping publish-build", nextStepToolName: "qaping_playtest" });
184
184
  }
185
185
 
186
+ function cmdPublish(argv) {
187
+ // WEB games: their "build" is a static directory, hosted (not zipped) — the
188
+ // kit's hosted-draft publisher, brand-seamed like publish-build above. The
189
+ // printed URL files as `url` on qaping_playtest with NO platform field.
190
+ return require(path.join(resolveKitDir(), "harness", "publish.js"))
191
+ .main(argv.slice(1), { brandCommand: "qaping publish" });
192
+ }
193
+
186
194
  const HELP = `qaping — automatic QA for your game: real human playtesters, driven by your coding agent
187
195
 
188
196
  usage:
189
197
  qaping setup [claude-code|cursor|codex] [--force]
190
198
  qaping remove [--client <c>] remove qaping's MCP entries, skill and rule
191
199
  qaping publish-build <game.zip> --platform windows|macos
200
+ qaping publish <built-dir> host a WEB game's built output (prints the URL to file with)
192
201
  qaping wait <ping_id> [--timeout <seconds>]
193
202
  qaping whoami
194
203
  qaping version
@@ -202,6 +211,7 @@ function route(cmd) {
202
211
  if (cmd === "remove" || cmd === "uninstall") return "remove";
203
212
  if (cmd === "wait" || cmd === "whoami") return "vendor";
204
213
  if (cmd === "publish-build") return "publish-build";
214
+ if (cmd === "publish") return "publish";
205
215
  return "unknown";
206
216
  }
207
217
 
@@ -217,6 +227,7 @@ function main() {
217
227
  // vendored default (the stock mount's wait) is not on /api/mcp/qaping.
218
228
  case "vendor": return process.exit(spawnVendor(argv[0] === "wait" ? [...argv, "--wait-tool", "qaping_wait"] : argv));
219
229
  case "publish-build": return void cmdPublishBuild(argv);
230
+ case "publish": return void cmdPublish(argv);
220
231
  default:
221
232
  console.error(HELP);
222
233
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qaping/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "qaping: automatic QA for your game. Your coding agent authors and maintains the QA plan, ships each patch's build to real human playtesters, and reports what broke.",
5
5
  "keywords": [
6
6
  "qaping",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: qaping
3
- description: Run automatic QA for a game repo through qaping — real human playtesters play the developer's builds on their own hardware, and the agent runs the whole loop. Use when the user says "set up QA for my game", "run QA on this patch", "did this patch break anything", "playtest my game" or "playtest this build", or asks for regression checks, patch verification, or human playtesting of a game. Covers both halves of the product - authoring and maintaining QA-PLAN.md in the game repo, and the per-patch run (read the diff, build, publish-build, file qaping_playtest rounds, report on the PR, file issues, promote settled checks into repo code tests). Do not use for web apps, websites, or UI review of anything that is not a game build — the qaping tools test game builds only.
3
+ description: Run automatic QA for a game repo through qaping — real human playtesters play the developer's builds on their own hardware, and the agent runs the whole loop. Use when the user says "set up QA for my game", "run QA on this patch", "did this patch break anything", "playtest my game" or "playtest this build", or asks for regression checks, patch verification, or human playtesting of a game. Covers both halves of the product - authoring and maintaining QA-PLAN.md in the game repo, and the per-patch run (read the diff, build, publish-build, file qaping_playtest rounds, report on the PR, file issues, promote settled checks into repo code tests). Browser-playable web GAMES count as games (they file as web rounds — url only, no platform). Do not use for web apps, websites, or UI review of anything that is not a game — the qaping tools test games only.
4
4
  ---
5
5
 
6
6
  # qaping — the QA loop for a game repo
@@ -38,9 +38,20 @@ the build.
38
38
  2. Ask the dev ONCE for their build command (the one command that produces a
39
39
  shippable build) and which platforms they ship; record both in the plan's
40
40
  frontmatter so every future run can build without asking again.
41
- 3. Author `QA-PLAN.md` at the repo root, format per `docs/QA-PLAN-FORMAT.md`
42
- (shipped with this package read it first). Order checks critical-path
43
- first, then game-specific ones:
41
+ 3. Author `QA-PLAN.md` at the repo root in EXACTLY this format (self-contained
42
+ here do not go looking for other docs). Plan frontmatter (YAML at the very
43
+ top): `game`, `build_command` (the ONE shippable-build command), `platforms:
44
+ [windows|macos|ios|web]` (`web` = a browser-playable game — its "build" is a
45
+ static directory, not a zip), optional `input` (hardware; default
46
+ keyboard+mouse, or touch for a mobile-web game).
47
+ Then one `##` section per check — the heading is the check's short name —
48
+ opening with a fenced yaml block of exactly `id` (stable slug, never
49
+ renamed), `rung: human | code`, `origin` ("authored" or the round id that
50
+ last changed it), `last_verified` (date or build tag), followed by the steps
51
+ as numbered prose a playtester who has never seen the game can follow (they
52
+ become the round's instructions verbatim). A `rung: code` check keeps its
53
+ prose and adds one `test:` line naming the repo test that asserts it. Order
54
+ checks critical-path first, then game-specific ones:
44
55
  1. the game boots to the main menu
45
56
  2. a previous-version save loads
46
57
  3. the first 15 minutes play clean on the declared input hardware
@@ -62,12 +73,19 @@ the build.
62
73
  1. **Select.** Read the diff (or PR). Pick the checks it can plausibly affect,
63
74
  plus the always-run criticals (the critical-path block above). Tell the user
64
75
  which checks run and why.
65
- 2. **Build** via the recorded build command; zip the result.
66
- 3. **Ship:** `qaping publish-build <game.zip> --platform windows|macos` →
67
- prints a `/b/<slug>` URL (temporary hosting; filing a playtest extends the
68
- build through the round; each publish mints a NEW URL). A store-delivered
69
- game files with its Steam store page, TestFlight public link, or App Store
70
- page as `url` instead.
76
+ 2. **Build** via the recorded build command; zip the result (native) or keep
77
+ the built static directory (web).
78
+ 3. **Ship**, by delivery: NATIVE uploads `qaping publish-build <game.zip>
79
+ --platform windows|macos` prints a `/b/<slug>` URL (temporary hosting;
80
+ filing a playtest extends the build through the round; each publish mints a
81
+ NEW URL). Store-delivered games file with their Steam store page, TestFlight
82
+ public link, or App Store page as `url`. WEB games — host the built output
83
+ at a public URL: the dev's own hosting if they have it, else
84
+ `qaping publish <built-dir>` prints a hosted URL. Localhost never works —
85
+ players open the link on their own devices.
86
+ When filing a WEB game: send `url` + `est_minutes` and OMIT `platform`
87
+ entirely (platform values are for native builds; a web round is claimed by
88
+ players in their own browser, phones included).
71
89
  4. **File** ONE `qaping_playtest` per batch of human checks a single session
72
90
  can cover, `est_minutes` an honest sum of the steps — the service accepts
73
91
  5–30 minutes (10 is the standard session; outside that range the filing is