@witchpot/gmc 0.1.7 → 0.1.8

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/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to the Game Market Copilot CLI will be recorded here.
4
4
 
5
+ ## 0.1.8 - 2026-06-12
6
+
7
+ - Updated the bundled `gmc-analysis` skill to v0.2.0 with the learnings from
8
+ the first price-band field test: camelCase-query to kebab-case-flag
9
+ mapping note, zero-review rating artifact pitfall, discounted snapshot
10
+ price pitfall, price-question routing to explicit-bucket aggregates, and
11
+ the evidence-pack quota location exception.
12
+
5
13
  ## 0.1.7 - 2026-06-12
6
14
 
7
15
  - Bundled the `gmc-analysis` Agent Skill (v0.1.0): analysis recipes, pivot
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@witchpot/gmc",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "description": "Command line tools for Game Market Copilot market research.",
6
6
  "license": "UNLICENSED",
@@ -1,5 +1,20 @@
1
1
  # gmc-analysis skill changelog
2
2
 
3
+ ## 0.2.0 - 2026-06-12
4
+
5
+ - Folded in the five learnings from the first field test (2025 city
6
+ builders, price-band vs rating/review analysis; 7/7 rubric pass):
7
+ - setup: documented the camelCase-query -> kebab-case-flag mapping and
8
+ that per-command `--help` is currently generic;
9
+ - new pitfall P5: zero-review games aggregate as rating 0 — pair rating
10
+ metrics with `--reviews-min`, derive per-bucket hit rates from counts;
11
+ - new pitfall P6: snapshot prices include active discounts — check the
12
+ `discount` field before price-band conclusions;
13
+ - recipe R4: price/distribution questions route to aggregate with
14
+ explicit buckets first; `cohort pricing` is page-bounded texture only;
15
+ - quota: composed evidence packs carry quota under
16
+ `meta.upstreamRequests[].entitlements`, not at the top level.
17
+
3
18
  ## 0.1.0 - 2026-06-12
4
19
 
5
20
  - Initial release, seeded from the 2026-06-12 field test (roguelike cohort
@@ -7,7 +7,7 @@ description: >-
7
7
  about Steam games, reviews, creators, showcases, or campaigns that gmc can
8
8
  answer.
9
9
  metadata:
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  ---
12
12
 
13
13
  # GMC Analysis
@@ -26,8 +26,11 @@ gmc auth status --json # anonymous => redacted previews + tiny quota
26
26
  gmc schema --json # the authoritative command/endpoint reference
27
27
  ```
28
28
 
29
- Never guess flags: `gmc schema --json` and `gmc <command> --help` are the
30
- source of truth for commands and parameters. Always pass `--json`.
29
+ Never guess flags: `gmc schema --json` is the source of truth for commands
30
+ and parameters. Endpoint query params are camelCase and the matching CLI
31
+ flag is the kebab-case equivalent (`priceMin` -> `--price-min`,
32
+ `reviewsGt` -> `--reviews-gt`). Per-command `--help` currently prints one
33
+ generic usage list, so trust the schema. Always pass `--json`.
31
34
 
32
35
  ## Core workflow for cohort questions
33
36
 
@@ -42,7 +42,29 @@ the quota is tiny, which can read as "the API has no data".
42
42
  **Rule**: run `gmc auth status --json` first; if `authMode` is `anonymous`,
43
43
  say so in your answer and scope expectations to public preview data.
44
44
 
45
- ## P5. Don't paginate by brute force
45
+ ## P5. Zero-review games carry rating 0 in aggregates (2026-06)
46
+
47
+ Unconditional `avg_rating` / `median_rating` in low-traction segments (cheap
48
+ or free price buckets) is crushed by zero-review games aggregating as
49
+ rating 0 (observed: a free bucket with avg_rating 11.1). This misreads as
50
+ "cheap games are hated" when it actually means "most cheap games have no
51
+ reviews".
52
+
53
+ **Pivot**: pair rating metrics with `--reviews-min` (e.g. 10). For "share of
54
+ well-rated games per bucket", run `--metric count` twice over the same
55
+ bucket spec — once unconditional, once with `--reviews-min 10
56
+ --rating-min 80` — and divide.
57
+
58
+ ## P6. Snapshot prices include active discounts (2026-06)
59
+
60
+ `price` is the current store price, not the launch/list price; a discounted
61
+ title lands in a lower price bucket (observed: a $34.99 list price counted
62
+ as $23.44 at -33%). Game rows carry a `discount` field.
63
+
64
+ **Rule**: when price-band conclusions matter, check `discount` on the
65
+ exemplar rows and caveat bucket assignments, especially during sale seasons.
66
+
67
+ ## P7. Don't paginate by brute force
46
68
 
47
69
  List endpoints cap at `limit=100`. For "how many" questions use
48
70
  `gmc games count`; for distributions use `gmc games aggregate` — both are
@@ -9,7 +9,10 @@ indicative — the response metadata is the source of truth.
9
9
 
10
10
  1. **Read before you spend.** Every bearer response carries
11
11
  `meta.entitlements.quota` = `{ used, limit }`. Check it at the start of a
12
- session and after each fan-out.
12
+ session and after each fan-out. Exception: CLI-composed evidence packs
13
+ (`cohort ...`, `reviews patterns`, `games benchmark`, ...) expose quota
14
+ per upstream call instead — read the last entry of
15
+ `meta.upstreamRequests[].entitlements.quota`.
13
16
  2. **Estimate fan-out cost first.** A cohort sweep costs roughly
14
17
  `search pages + (1 per game per section call)`. A 114-game cohort with one
15
18
  analysis call each ~= 120 requests. Compare against remaining quota and
@@ -80,6 +80,19 @@ gmc games aggregate --source steam --metric count --group-by coverage <filters>
80
80
  `data.basis = server_aggregate` means market-wide for the filter set (within
81
81
  GMC source coverage) — unlike evidence packs, these are not page-bounded.
82
82
 
83
+ **Price/distribution questions belong here, not in `cohort pricing`.** Run
84
+ the aggregate with explicit buckets first (e.g.
85
+ `--bucket price:0,5,10,15,20,25,30,40,60`); `gmc cohort pricing` is
86
+ returned-page (top ~20) texture, useful only as a supplement and must be
87
+ labeled as page-bounded evidence.
88
+
89
+ Per-bucket "hit rate" pattern (one request per condition): pair the same
90
+ bucket spec with shared filters — `--reviews-min 500 --metric count` gives
91
+ reach per price band; `--reviews-min 10 --rating-min 80 --metric count`
92
+ gives the well-rated share. Divide by the unconditional bucket counts.
93
+ Never read unconditional rating aggregates in low-traction buckets
94
+ (pitfall P5).
95
+
83
96
  ## Output contract for every analysis
84
97
 
85
98
  Always include in your final answer: the cohort definition and size, how many
package/src/constants.js CHANGED
@@ -8,7 +8,7 @@ export const EXIT_API = 4;
8
8
 
9
9
  export const CLI_PACKAGE_NAME = "@witchpot/gmc";
10
10
  export const CLI_BETA_PACKAGE_NAME = "@witchpot/gmc";
11
- export const CLI_VERSION = "0.1.7";
11
+ export const CLI_VERSION = "0.1.8";
12
12
 
13
13
  export const DEFAULT_API_BASE_URL = "https://gamemarketcopilot.com";
14
14
  export const DEFAULT_CONFIG_PATH = path.join(homedir(), ".config", "gmc", "config.json");