@witchpot/gmc 0.5.0 → 0.8.0

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,76 @@
2
2
 
3
3
  All notable changes to the Game Market Copilot CLI will be recorded here.
4
4
 
5
+ ## 0.8.0 - 2026-09-14
6
+
7
+ For npm users this release lands together with 0.7.0's content, because
8
+ 0.7.0 was never published to the registry (npm goes 0.6.0 -> 0.8.0). It also
9
+ requires `@witchpot/gmc-core` 0.2.0, which ships to npm in the same release
10
+ cycle — publish core FIRST, or `gmc showcases history` fails at startup on a
11
+ missing export (see gmc-core's own 0.2.0 changelog entry).
12
+
13
+ - New `--ai-disclosure <disclosed|absent|unconfirmed>` filter on the games
14
+ search/count/aggregate commands (NAK-773), forwarded verbatim and
15
+ case-sensitively as the `aiDisclosure` query param, plus
16
+ `--group-by ai_disclosure` (which cross-tabs with `release_month`). `absent`
17
+ means no disclosure block was observed on the store page, never that a title
18
+ uses no generative AI; `unconfirmed` includes titles never checked.
19
+ - Bundled `gmc-analysis` skill bumped to 0.15.0 with an "AI disclosure state"
20
+ section covering those values and how to report them.
21
+
22
+ - New command `gmc lists resolve <id> --json` (NAK-525): computes (or reuses)
23
+ the materialized resolution a natural-language list definition needs before
24
+ its games can be read. `gmc lists games <id>` answers 409
25
+ RESOLUTION_REQUIRED until it has run. Costs 2 credits every call, including
26
+ on a reuse, and never changes membership.
27
+ - New command `gmc lists materialize <id> --confirm --json` (NAK-525): freezes
28
+ a filter list's current members, so it stops re-evaluating its definition.
29
+ Destructive-adjacent and undone only by discarding the frozen rows, so
30
+ `--confirm` is required and the call is refused without it before anything is
31
+ written or charged. Optional `--expected-revision <n>` is the compare-and-swap
32
+ covering the whole resolve-then-materialize window.
33
+ - `gmc lists games <id>` now forwards `--cursor`. It was previously accepted
34
+ and silently dropped, which walks a resolution-backed list by offset while
35
+ the caller believes it is following the cursor.
36
+ - `--help` documents the version 2 query envelope accepted by
37
+ `gmc lists create --kind filter --filter '<json>'`, including the rule that
38
+ `structured` decides membership and `total_kind` says whether the reported
39
+ total is an exact count.
40
+
41
+ ## 0.7.0 - 2026-08-06
42
+
43
+ - New command `gmc games more-like-this --source steam <externalId>
44
+ [--country <de|fr|gb|jp|kr|us>] --json` (NAK-459): the games Steam showed
45
+ in a title's store-page "More Like This" carousel, for one storefront
46
+ country. Omitting `--country` sends no country at all so the server
47
+ applies the shared `us` default; `--country` is validated locally against
48
+ the six collected storefronts before the request goes out.
49
+ - This release carries TWO skill versions' worth of content, because skill
50
+ 0.7.0 was never published: skill 0.7.0 (NAK-92 / NAK-240) added the
51
+ showcase fit + history workflows and their directory-link guardrails, and
52
+ skill 0.8.0 (NAK-459) adds the "Steam More Like This neighbours" section.
53
+ Its guardrails: carousel `position` is Steam's display order and never a
54
+ similarity score; `observed_empty` (collected, carousel empty) must be
55
+ told apart from `not_observed` (not collected yet), and neither reported
56
+ as "this game has no similar games"; a stale observation should be dated
57
+ rather than dropped; candidates with `resolved: false` stay in the set as
58
+ unresolved.
59
+ - Agents on the MCP surface get the equivalent `more_like_this` tool (19th
60
+ published tool); the CLI and MCP share one read model, so countries,
61
+ default, bounds, and availability semantics cannot drift between them.
62
+
63
+ ## 0.6.0 - 2026-07-17
64
+
65
+ - gmc-analysis skill v0.6.0: new "Product documentation (gmc-docs)"
66
+ section in SKILL.md pointing agents at docs.gamemarketcopilot.com for
67
+ product features, setup, plans/credits, API/CLI/MCP usage, and
68
+ methodology definitions, via the read-only Docs MCP or plain-HTTP
69
+ llms.txt / per-page .md fetch (no second MCP connection required);
70
+ answers drawing on docs must cite the canonical URL. The skill remains
71
+ the source of truth for statistical validity, claim safety, and chart
72
+ guidance. references/quota.md now points current plan limits at the
73
+ live pricing page.
74
+
5
75
  ## 0.5.0 - 2026-07-13
6
76
 
7
77
  - gmc-analysis skill v0.5.0 (NAK-190): new "Saved Game Lists" guidance in
package/README.md CHANGED
@@ -122,6 +122,9 @@ when using output in agent answers.
122
122
  - `gmc games success-report`
123
123
  - `gmc campaigns signals`
124
124
  - `gmc games topics`
125
+ - `gmc games language-topics`
126
+ - `gmc games review-history`
127
+ - `gmc games more-like-this`
125
128
  - `gmc games compare`
126
129
  - `gmc games benchmark`
127
130
  - `gmc reviews patterns`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@witchpot/gmc",
3
- "version": "0.5.0",
3
+ "version": "0.8.0",
4
4
  "private": false,
5
5
  "description": "Command line tools for Game Market Copilot market research.",
6
6
  "license": "UNLICENSED",
@@ -28,7 +28,7 @@
28
28
  "node": ">=20.9.0"
29
29
  },
30
30
  "dependencies": {
31
- "@witchpot/gmc-core": "^0.1.0"
31
+ "@witchpot/gmc-core": "^0.2.0"
32
32
  },
33
33
  "files": [
34
34
  "bin",
@@ -1,5 +1,195 @@
1
1
  # gmc-analysis skill changelog
2
2
 
3
+ ## 0.15.0 - 2026-09-14
4
+
5
+ - New "AI disclosure state" section in SKILL.md (NAK-773): the tri-state
6
+ Steam store AI-disclosure read, how to filter on it
7
+ (`--ai-disclosure` / `filter.ai_disclosure`), group by it
8
+ (`--group-by ai_disclosure`, cross-tabs with `release_month`), and read one
9
+ title's state from `detail.aiDisclosure`.
10
+ - Adds the interpretation guardrails as honesty rules: `absent` is an
11
+ observation that no disclosure block was found, never proof a title uses no
12
+ generative AI; `unconfirmed` means not yet successfully observed (it includes
13
+ titles never checked) and must be reported as its own bucket rather than
14
+ folded into `absent`; `observedAt` is the read date, not the release date;
15
+ `aiDisclosure: null` means the read model was unreachable, not "not
16
+ disclosed".
17
+ - Records that `cohort_review_categories` and `compare_as_of` refuse the filter
18
+ outright, so disclosure cohorts are sized with `market_aggregate`.
19
+
20
+ ## 0.14.0 - 2026-08-20
21
+
22
+ - New "Query-backed lists (structured plus natural language)" section in
23
+ SKILL.md (NAK-525): documents the version 2 query envelope, the rule that
24
+ `structured` decides membership while `semanticQuery` only orders results
25
+ inside it under the default `rank` mode, and the `total_kind` vocabulary
26
+ (`exact` / `approximate` / `at_least` / `lexical_only` / `clipped`) with the
27
+ honesty rule that anything but `exact` must be reported as approximate.
28
+ - Adds the two new tools to the Game List inventory: `resolve_game_list`
29
+ (non-destructive, answers `RESOLUTION_REQUIRED`, 2 credits every call
30
+ including a reuse) and `materialize_game_list` (freezes membership, requires
31
+ `confirm: true`, 2 credits, never speculative). CLI equivalents:
32
+ `gmc lists resolve <id>` and `gmc lists materialize <id> --confirm`.
33
+ - New sharp edge: `market_aggregate` / `cohort_review_categories` /
34
+ `cohort_evidence` reject a `semanticQuery` list with
35
+ `SEMANTIC_LIST_UNSUPPORTED_FOR_TOOL`, uniformly across `semanticMode`; a
36
+ structured-only v2 envelope behaves exactly like a flat filter.
37
+ - Records `membership`, `definition_revision` and `last_resolved_at` on the
38
+ list read tools, and what a frozen (`snapshot`) list does.
39
+ - Warns that `sort` and `as_of` are refused (not ignored) when reading a
40
+ `semanticQuery` list or a frozen one.
41
+ - Documents the resolve conflict outcomes (`CONFLICT` /
42
+ `definition_revision_mismatch`, `NOT_FOUND`, `SNAPSHOT_IS_FROZEN`) for a list
43
+ edited, deleted or frozen while a resolve is running.
44
+
45
+ ## 0.13.0 - 2026-08-20
46
+
47
+ - New "Per-family collection status" section in SKILL.md (NAK-596): documents
48
+ the new MCP-only `game_collection_status` tool — no CLI command yet, same
49
+ deferred posture as `game_language_support` (NAK-571) — agent-surface
50
+ parity for `GET /api/v1/games/:appid/collection-status` (NAK-444).
51
+ - Adds the interpretation guardrails as honesty rules: `unknown` differs from
52
+ `not_collected` in kind, not degree, and must never be restated as
53
+ uncollected; `available: false` and the `collection_status_unavailable`
54
+ warning token are coupled one-for-one; `requestable` states only whether
55
+ requesting analysis routes demand to that family today (only `research`
56
+ is), never a statement about any other family's schedule; the tool is
57
+ read-only and never enqueues collection work; an unknown appid charges the
58
+ weight-1 credit before returning `NOT_FOUND`.
59
+ - MCP-only mapping updated: per-family collection status ->
60
+ `game_collection_status`.
61
+
62
+ ## 0.12.0 - 2026-08-12
63
+
64
+ - Adds "Which review count you are looking at" (NAK-531): Steam returns two
65
+ review totals depending on `purchase_type`, and they can differ by orders
66
+ of magnitude. `purchase_type=all` is GMC's headline current total and is
67
+ served by `game_profile` as `detail.reviewCounts`; every plain `reviews`
68
+ field elsewhere stays the narrower `purchase_type=steam` family.
69
+ - Records the honesty rules that go with it: name the family and the
70
+ observation date with any count; `allAvailable: false` means not collected
71
+ rather than zero; compare the families only through
72
+ `steamAtAllObservation`, because the top-level `steam` observation can be
73
+ newer than `all`; derive a positive rate inside one family; never splice
74
+ the families into one series, so a steam history's last point being
75
+ smaller than the all-family headline is not a decline; and neither family
76
+ is sales.
77
+
78
+ ## 0.11.0 - 2026-08-10
79
+
80
+ - MCP-only mapping extended with the publisher/developer surface (NAK-383):
81
+ `entity_resolve` (raw Steam publisher/developer string -> stable
82
+ `entityId`) and `entity_profile` (that entity's portfolio, composition,
83
+ release cadence and audience footprint). There is no CLI equivalent yet,
84
+ so the entry states the resolve-then-profile order explicitly rather than
85
+ mapping from a command.
86
+ - Adds the interpretation guardrails as honesty rules: resolve before
87
+ profiling because a game record credits names and one entity commonly has
88
+ several raw spellings, so a name-keyed lookup omits the titles credited to
89
+ the siblings; `resolved: null` means that exact case-sensitive,
90
+ whitespace-significant string is unknown to the master tables and never
91
+ that the entity has no titles; `aggregatesAvailability: not_collected`
92
+ means the aggregates have not been computed yet, so the block is absent
93
+ rather than zero, and never that the studio has published nothing (the
94
+ live `pagination.total` is still the real title count); a null
95
+ `totalFollowers` is not collected rather than zero, and follower counts
96
+ can never be summed across platforms.
97
+
98
+ ## 0.10.0 - 2026-08-09
99
+
100
+ - New "Review-count history and the events around it" section in SKILL.md
101
+ (NAK-428): documents `gmc games review-history` (MCP:
102
+ `game_review_history`), and states that it has no flags because the
103
+ endpoint has no query parameters — the full daily series is always
104
+ returned and the agent windows it.
105
+ - Adds the interpretation guardrails as honesty rules: scale by date and
106
+ never by array index because collection has real gaps; the series is
107
+ published-run-only and contamination-filtered at a 2% tolerance, so
108
+ differences are safe to report but the last point can lag the headline
109
+ review count; an empty series is no collected history, not a review count
110
+ of zero; empty `data.events` / `data.discountWindows` are collection
111
+ states, never "no announcements" or "never discounted"; announcements are
112
+ official-feed only and capped at the most recent 1000 items; a discount
113
+ window is an observed >=20%-threshold state, not an exact Steam sale
114
+ period, whose `endDate` is the first below-threshold observation and is
115
+ not part of the window (with gaps in the observations, the actual last
116
+ discounted day cannot be inferred from it) and whose `discountPercent` is
117
+ the opening observation; events support temporal comparison only, never
118
+ causal attribution.
119
+ - MCP-only mapping updated: review-count history with its
120
+ lifecycle/announcement/discount context -> `game_review_history`.
121
+
122
+ ## 0.9.0 - 2026-08-08
123
+
124
+ - New "Review topics by review language" section in SKILL.md (NAK-455):
125
+ documents `gmc games language-topics` (MCP: `game_language_topics`), its
126
+ two flags (`--min-reviews` 10-200, `--include-insufficient`), and the
127
+ fact that this is the whole parameter surface because it is the API's.
128
+ - Adds the interpretation guardrails as honesty rules: read
129
+ `data.evidenceState` first and never report `insufficient_evidence` or
130
+ `not_analyzed` as zero; the population is the analyzed subset (about
131
+ 2,500 titles), not the Steam catalog; review language is never a country,
132
+ region, market, or culture; observed `counts`/`rates` and sample-expanded
133
+ `estimates` stay separate; name which of the four denominators a
134
+ percentage is over; date every claim with `data.snapshot`; `coverage`
135
+ survives the `reviews.topicLanguages.full` plan lock.
136
+ - MCP-only mapping updated: review topics by review language ->
137
+ `game_language_topics`.
138
+
139
+ ## 0.8.0 - 2026-08-06
140
+
141
+ - New "Steam \"More Like This\" neighbours" section in SKILL.md (NAK-459):
142
+ documents `gmc games more-like-this` (MCP: `more_like_this`), the six
143
+ collected storefront countries with the `us` default, and its use as a
144
+ cohort seed that feeds `coverage_check` and the cohort workflows.
145
+ - Adds the interpretation guardrails as honesty rules: `position` is
146
+ Steam's display order and never a similarity score or ranking;
147
+ `observed_empty` (carousel collected and empty) must be told apart from
148
+ `not_observed` (not collected yet), and neither may be reported as "this
149
+ game has no similar games"; `stale: true` means date the claim rather
150
+ than drop it or present it as current; candidates with
151
+ `resolved: false` stay in the set as unresolved rather than being
152
+ silently dropped.
153
+ - MCP-only mapping updated: single-title drill-down now also lists Steam
154
+ store-page neighbours -> `more_like_this`.
155
+
156
+ ## 0.7.0 - 2026-07-20
157
+
158
+ - New "Showcase workflows (fit + history)" section in SKILL.md (NAK-92 /
159
+ NAK-240): documents `gmc showcases history` (MCP: `showcase_history`)
160
+ alongside `showcases fit`, and the chain "similar games -> which
161
+ showcases did they attend -> next edition deadline" via the appearance
162
+ rows' `directory.next_edition`. Adds the interpretation guardrails as
163
+ honesty rules: missing `directory` = "not linked", never "never
164
+ participated"; a steam_event source-unavailable warning means
165
+ research-source-only history, never zero participations; absent
166
+ next-edition data means "window unknown", and the submission-close date
167
+ must be checked against today before recommending a submission. Documents
168
+ the transport casing split (CLI camelCase `nextEdition.submissionCloses`
169
+ vs MCP snake_case `next_edition.submission_closes`) and that plan-limited
170
+ responses redact directory links (indeterminate, not "unlinked" —
171
+ check warnings first).
172
+ - MCP-only mapping updated: showcases now map to both `showcase_fit`
173
+ (submission candidates) and `showcase_history` (participation history).
174
+
175
+ ## 0.6.0 - 2026-07-17
176
+
177
+ - New "Product documentation (gmc-docs)" section in SKILL.md:
178
+ points at the public docs site (`https://docs.gamemarketcopilot.com`) for
179
+ product features, setup, plans/credits, API/CLI/MCP usage,
180
+ troubleshooting, and methodology definitions; documents the read-only
181
+ Docs MCP (`search_docs`/`get_page`/`list_pages`/`get_navigation`, no
182
+ auth) for clients that support a second MCP connection, and `llms.txt` /
183
+ per-page `.md` fetch over plain HTTP as the no-second-MCP-required
184
+ fallback; requires citing the canonical docs URL when an answer draws on
185
+ it. Keeps the distinction crisp: `gmc-docs` is product documentation, not
186
+ market evidence; this skill remains the source of truth for statistical
187
+ validity, claim safety, and chart guidance, and the docs never override
188
+ it.
189
+ - `references/quota.md`: one-line pointer to the published plan/credit page
190
+ (`https://docs.gamemarketcopilot.com/plans.md`) alongside the existing
191
+ "treat as indicative" caveat.
192
+
3
193
  ## 0.5.0 - 2026-07-13
4
194
 
5
195
  - New "Saved Game Lists" section in SKILL.md, plus recipe R5 in