shadowjoin 0.3.1 → 0.3.2

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/README.md CHANGED
@@ -17,11 +17,11 @@ npx shadowjoin scan \
17
17
  --right crm_export.csv --right-key account_name
18
18
  ```
19
19
 
20
- [![shadowjoin measuring a country-name join: 205 of 249 matched exactly, which looks fine, while five real matches were being dropped including Vietnam, spelled Viet Nam by the UN](assets/brag.gif)](https://github.com/harsh-chandak/shadowjoin/blob/main/assets/brag.mp4)
20
+ [![shadowjoin measuring a country-name join: 205 of 249 matched exactly, which looks fine, while five real matches were being dropped including Vietnam, spelled Viet Nam by the UN](assets/brag.gif)](https://github.com/harsh-chandak/shadowjoin/blob/main/assets/brag.gif)
21
21
 
22
22
  <sub>Fourteen seconds, no sound. Every figure in it is verbatim CLI output from
23
23
  the committed example below — [higher-resolution
24
- version](https://github.com/harsh-chandak/shadowjoin/blob/main/assets/brag.mp4).</sub>
24
+ version](https://github.com/harsh-chandak/shadowjoin/blob/main/assets/brag.gif).</sub>
25
25
 
26
26
  The progress output above is real: shadowjoin shows what it is doing while it
27
27
  works. All of it is suppressed automatically when stdout is not a terminal, so
package/dist/mcp.js CHANGED
@@ -41,7 +41,12 @@ async function loadSdk() {
41
41
  process.exit(1);
42
42
  }
43
43
  }
44
- const CONFIG_PATH = resolve(process.env.SHADOWJOIN_CONFIG ?? "shadowjoin.config.json");
44
+ // `||`, not `??`: the Claude Code plugin maps this to a user setting, and an
45
+ // unset setting arrives as an empty string rather than as undefined. `??`
46
+ // let "" through, and resolve("") is the working DIRECTORY — so the default
47
+ // install read a directory as its config and told the user to create a file
48
+ // at a path that was already a folder.
49
+ const CONFIG_PATH = resolve(process.env.SHADOWJOIN_CONFIG?.trim() || "shadowjoin.config.json");
45
50
  async function loadConfig() {
46
51
  try {
47
52
  const parsed = JSON.parse(await readFile(CONFIG_PATH, "utf8"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shadowjoin",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Measure the matches your exact join is silently dropping. Runs a shadow matcher alongside your real join key and reports a verified floor on lost matches, plus the normalization rule that would recover each one.",
5
5
  "keywords": [
6
6
  "entity-resolution",
@@ -45,7 +45,7 @@
45
45
  "scripts": {
46
46
  "build": "tsc",
47
47
  "test": "node --test test/*.test.js",
48
- "prepublishOnly": "npm run build"
48
+ "prepublishOnly": "node scripts/prepublish-guard.mjs && npm run build && npm test"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@modelcontextprotocol/sdk": ">=1",