@rankwrangler/cli 0.14.0 → 0.15.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/dist/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## v0.15.0 - 2026-11-01
6
+
7
+ ### Changed
8
+
9
+ - Breaking: a Product's `isMerchListing` is always `true` or `false`. The `unknown` search filter is
10
+ gone from the API, MCP, CLI (`--merch true|false|all`), and Explore.
11
+ - Merch detection reads the two stamps Merch on Demand puts on every listing, its template bullets
12
+ and its package dimensions and weight, and rejects any listing with a UPC, EAN, or GTIN. A variation
13
+ parent without either stamp takes its first variant's verdict.
14
+ - The latest classification wins, so a listing that stops looking like Merch is demoted.
15
+ `merch:reclassify` re-checks every active US Product and drops `--demote` and `--include-merch`.
16
+
17
+ ### Fixed
18
+
19
+ - Third-party apparel whose part numbers resembled Merch design codes is no longer flagged as Merch.
20
+
5
21
  ## v0.14.0 - 2026-10-29
6
22
 
7
23
  ### Changed
@@ -1,7 +1,7 @@
1
1
  import { requireMarketplaceId } from './cli-options.js';
2
2
  export const runProductSearch = async (args, client, config, options, fail) => {
3
3
  const term = args.join(' ').trim();
4
- const merch = choice(options.merch, ['true', 'false', 'unknown', 'all'], 'merch', fail);
4
+ const merch = choice(options.merch, ['true', 'false', 'all'], 'merch', fail);
5
5
  return await client.product.search.query({
6
6
  ...(term ? { term } : {}),
7
7
  marketplaceIds: [requireMarketplaceId(options, config)],
@@ -21,11 +21,7 @@ export const runProductSearch = async (args, client, config, options, fail) => {
21
21
  };
22
22
  }),
23
23
  includeOfficialBrands: options.includeOfficialBrands,
24
- isMerchListing: merch === undefined
25
- ? undefined
26
- : merch === 'unknown' || merch === 'all'
27
- ? merch
28
- : merch === 'true',
24
+ isMerchListing: merch === undefined || merch === 'all' ? merch : merch === 'true',
29
25
  amazonListingStatus: choice(options.listingStatus, ['active', 'deleted', 'all'], 'listingStatus', fail),
30
26
  salesRank: range(options.minBsr, options.maxBsr, 'Bsr', fail),
31
27
  price: range(options.minPrice, options.maxPrice, 'Price', fail),
package/dist/usage.js CHANGED
@@ -59,7 +59,7 @@ export const printUsage = (paths) => {
59
59
  ' --excludeWord <word> Repeat for excluded words',
60
60
  ' --categoryId <N> Repeat for category filters',
61
61
  ' --facet <facet=name> Repeat for facet filters',
62
- ' --merch <value> true,false,unknown,all (default: true)',
62
+ ' --merch <value> true,false,all (default: true)',
63
63
  ' --listingStatus <value> active,deleted,all (default: active)',
64
64
  ' --stage <value> Keyword search: graduated,trial,dropped,untracked,all (default: graduated)',
65
65
  ' --freshness <value> Keyword search: live,needsSync,syncing,all (default: all)',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rankwrangler/cli",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Official RankWrangler command line interface",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,7 +29,7 @@
29
29
  "provenance": true
30
30
  },
31
31
  "dependencies": {
32
- "@rankwrangler/http-client": "^0.14.0",
32
+ "@rankwrangler/http-client": "^0.15.0",
33
33
  "keytar": "7.9.0"
34
34
  },
35
35
  "devDependencies": {