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