@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 +8 -0
- package/package.json +1 -1
- package/skill/gmc-analysis/CHANGELOG.md +15 -0
- package/skill/gmc-analysis/SKILL.md +6 -3
- package/skill/gmc-analysis/references/pitfalls.md +23 -1
- package/skill/gmc-analysis/references/quota.md +4 -1
- package/skill/gmc-analysis/references/recipes.md +13 -0
- package/src/constants.js +1 -1
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,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.
|
|
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`
|
|
30
|
-
|
|
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.
|
|
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.
|
|
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");
|