@planu/cli 5.3.22 → 5.3.23

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
@@ -1,3 +1,9 @@
1
+ ## [5.3.23] - 2026-08-13
2
+
3
+ ### Bug Fixes
4
+ - fix(spec-1520): exclude paths whose only mention negates the work from grounded modify targets
5
+
6
+
1
7
  ## [5.3.22] - 2026-08-13
2
8
 
3
9
  ### Bug Fixes
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-aarch64-apple-darwin",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-aarch64-apple-darwin",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -17,15 +17,15 @@
17
17
  "platform": "darwin",
18
18
  "arch": "arm64",
19
19
  "libc": null,
20
- "artifactSha256": "4730c8bca1ecd506f9332cfd7754a3b2705272b7cfead67ed8a4a857ea51af47",
20
+ "artifactSha256": "df04e55326ab8279dfddd1e0607a66b7b4fa6e0893f32c9c5adff2326a60a2a0",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-arm64.node.sbom.json",
24
- "sha256": "379172a509801b9bb9072e03b95da643218c75c02a8cc7e11719193f37f028aa"
24
+ "sha256": "be63f58e999d18e1ba92aea4ddbd6eeab4dcf8de3a574d30d78b0eb18f6dd654"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
28
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
29
29
  "sourceTreeDirty": false,
30
30
  "sourceDateEpoch": 1,
31
31
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -34,6 +34,6 @@
34
34
  "signature": {
35
35
  "algorithm": "Ed25519",
36
36
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
37
- "value": "a6pf9ANIEnE+aYR1QZVf9LJOna7hPvbCmKSUoAYas2JtKtY5HkBvE/9FyN7j3PaG7P8SGXgCPNbAhZ4umyq2Dg=="
37
+ "value": "jEbAh2q227j0tKF5GzCx49OKaaBSZwkjGFSgODdawYyMMzQJR/8bwBQl4eZaRMRalLv4O5VCrT87z6oIwf53AQ=="
38
38
  }
39
39
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "4730c8bca1ecd506f9332cfd7754a3b2705272b7cfead67ed8a4a857ea51af47"
14
+ "content": "df04e55326ab8279dfddd1e0607a66b7b4fa6e0893f32c9c5adff2326a60a2a0"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-x86_64-apple-darwin",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-x86_64-apple-darwin",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -17,15 +17,15 @@
17
17
  "platform": "darwin",
18
18
  "arch": "x64",
19
19
  "libc": null,
20
- "artifactSha256": "9204816afcda7990a7caa85991ced38335301a2db840a58d7c1017f72ad7fb44",
20
+ "artifactSha256": "3c8382e950e1dd36777d61fa7b60bc01d1af28fb33834bd94e48b499510a3d4e",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-x64.node.sbom.json",
24
- "sha256": "ba853b859c2a9a22ff223d48566f616d05ab8479b3656c8912dd8cbee8617f53"
24
+ "sha256": "1b319f2b236037e49c739cf5e240629987526680ce6f1784aca3067ab6144ac4"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
28
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
29
29
  "sourceTreeDirty": false,
30
30
  "sourceDateEpoch": 1,
31
31
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -34,6 +34,6 @@
34
34
  "signature": {
35
35
  "algorithm": "Ed25519",
36
36
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
37
- "value": "n8UTXIAzGoISDWY5vDfDxlQBqP5oso3K37jRE5+kTUnedRmCvVUwPlTedlxMKXI+JWaE/gyq5tOl5V8BNOtXBg=="
37
+ "value": "JpzKHUqqDdXB83C4dEwzlMntsYfBkkpt/oGrayfIT7v9UpUZ9T2+gIckQ0t9eLzhkfvjrScu/SxaN/+YuBSeAw=="
38
38
  }
39
39
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "9204816afcda7990a7caa85991ced38335301a2db840a58d7c1017f72ad7fb44"
14
+ "content": "3c8382e950e1dd36777d61fa7b60bc01d1af28fb33834bd94e48b499510a3d4e"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-aarch64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-aarch64-unknown-linux-gnu",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "linux",
17
17
  "arch": "arm64",
18
18
  "libc": "glibc",
19
- "artifactSha256": "acfa6ff4ed2e68598b779cd84eeac69900fd6911893d2ff26414a47304b2ccde",
19
+ "artifactSha256": "581c4631563fd02aad49300b604d8becb71b6eec6d515e8525724f5e8a76d3e7",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-gnu.node.sbom.json",
23
- "sha256": "cebfe96400b95cf97111e7f04e1992a9c7fbbd4071b44154d33ec10f1d3046ed"
23
+ "sha256": "d24b2ccaf35573cd5cb80fc16bd902aee49c23510d6517831164a38763a90608"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "Xyq0s76WcCzbKEu0nFqrYE0lzt5+UWllzUqcKnpFuXXSJhrvtEyTIW4N37ldPqEeZ4tTsfVAcWooxqpMT8aECA=="
36
+ "value": "raQa9KCXmVn19QcQHXWWqd4TUl2+Ma2FIqr0FK7SSQV6FCSfiDB+kTUsO0eaXrRRgg15hyQWik5LWS/MWku0Dg=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "acfa6ff4ed2e68598b779cd84eeac69900fd6911893d2ff26414a47304b2ccde"
14
+ "content": "581c4631563fd02aad49300b604d8becb71b6eec6d515e8525724f5e8a76d3e7"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-aarch64-unknown-linux-musl",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-aarch64-unknown-linux-musl",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "linux",
17
17
  "arch": "arm64",
18
18
  "libc": "musl",
19
- "artifactSha256": "b102c6bec361271c98c9940b50a37c2110fd0a4e7c8e96f7b12e904e1162e2a2",
19
+ "artifactSha256": "f7161362df7874b4560ff697df62d350bb24e7d53540cd5a6ee92e2fe7478f36",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-musl.node.sbom.json",
23
- "sha256": "6d912c7181d379ae613ffb00e2e70af7beade6da0890b892b801e31ed77074c7"
23
+ "sha256": "81da3a46f573b41a15d0407cd887c12c5cd6cbc8a8afe6a4c43159815c2361a0"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "rdhGtK396/2ZwQtLhz9D+o6VvucindJmLidQT3Yjy+A0dXp8IyT1MJm7g+KzVD6b+SfqWu6HgubuEgGfhyH9CQ=="
36
+ "value": "2trXRLuXKSXjQH7wa6wJ/w2TLkj1AaabBArFyWzO0Kg578fHTXbPtTirjOCKKX2kOu3YikOqYcGtRko0fqzWBA=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "b102c6bec361271c98c9940b50a37c2110fd0a4e7c8e96f7b12e904e1162e2a2"
14
+ "content": "f7161362df7874b4560ff697df62d350bb24e7d53540cd5a6ee92e2fe7478f36"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-x86_64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-x86_64-unknown-linux-gnu",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "linux",
17
17
  "arch": "x64",
18
18
  "libc": "glibc",
19
- "artifactSha256": "5d2c48ac0de6d60629345143648c78e291a4cba707756face2957f27afb7d36b",
19
+ "artifactSha256": "7dc81ad00268ae85e7f5421d33d0c83b3b1f51bc43290f3cb0d2b89bafd9c4e7",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-gnu.node.sbom.json",
23
- "sha256": "d6125400832c0bdee2823af553d4e6b717b15cba47133ca88aaf91e2183ef6e1"
23
+ "sha256": "80ffb59c763c08d107de1e6ddb1bd2ceb6d77d705d060af6ad154a7a5dd8a4cd"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "Cb1ueFKWd9mC0uzyo/kPIexFGBTxuVsJTk8knsTODmsR2ooH4rG/fqCqN2M1ZCO1kC7Zrpn5LwiifEcbUhUQBw=="
36
+ "value": "jvFw6dFcAM34ZZVPqtPZ5DjV/ZovZGrmKkTP4lIgJomxnlp4T7XTxacU57Q7rXPypfxyt94m/WkZvdCkonm+AA=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "5d2c48ac0de6d60629345143648c78e291a4cba707756face2957f27afb7d36b"
14
+ "content": "7dc81ad00268ae85e7f5421d33d0c83b3b1f51bc43290f3cb0d2b89bafd9c4e7"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-x86_64-unknown-linux-musl",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-x86_64-unknown-linux-musl",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "linux",
17
17
  "arch": "x64",
18
18
  "libc": "musl",
19
- "artifactSha256": "43926c2400637b9670c3c869da140fedfa85dd786da4de04122c8f5022d3c5cc",
19
+ "artifactSha256": "4d54714a12ef1863a00369ac90da8d7ae3548818dc838d66dd856e00c073a298",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-musl.node.sbom.json",
23
- "sha256": "5db161ed910755ad5fe11ebc10d190f81fdf6b69779f21c048819f3be7bcb34e"
23
+ "sha256": "16140edf7ef98106200cd68aed27910378b7896412f10e110bb3128861e73f9b"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "0NDYIwRlP6yJ/LWIt3in/B9XD367mRJM0WRoX5H4eERYz4/jtuyKA9yPXUh0sYnnY3roOFctTkbd4eLtFmtqBQ=="
36
+ "value": "Uzzec4U5e20u2dFSwP11L+cTyMyUWQ/4QqA+VtTD8ZOqIC7nfuFHajyE15/jWiODhNv6N4DEqAafrJ7En8gdDg=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "43926c2400637b9670c3c869da140fedfa85dd786da4de04122c8f5022d3c5cc"
14
+ "content": "4d54714a12ef1863a00369ac90da8d7ae3548818dc838d66dd856e00c073a298"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-aarch64-pc-windows-msvc",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-aarch64-pc-windows-msvc",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "win32",
17
17
  "arch": "arm64",
18
18
  "libc": null,
19
- "artifactSha256": "2895b0fa8aad3dd46ad59f9b1e8a327dcbbaffe7357ea78830e232a292944920",
19
+ "artifactSha256": "f5e3c5aa3482f0f68f6c0306b83e46a957fa5a3d72adf0a42667e1a7c64557b4",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.win32-arm64-msvc.node.sbom.json",
23
- "sha256": "2e14b8772ac8aa9ec07793b8e1db4e72dd23541ed338a1fbe728884082fbe796"
23
+ "sha256": "4e64e359b4286ff8a5f46fe93dffa96d61c867ae041ad3f9a63257f97d73df32"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "r0Wa9w/3KI0OAHWMTjGqerm90i5pEtHM8VWAKrEb4oqqtxjUQaYhPhKubZfTE4YOdrvn+1RXdoVaU8jMScdSAA=="
36
+ "value": "qo/Huts1HZBt65FaVIFISGQEWQl4ltLwbUQwatHHIEFkdCV9IS7dZV/FeSGFFkGaELdEgjT0RBW6DnifQMvgBg=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "2895b0fa8aad3dd46ad59f9b1e8a327dcbbaffe7357ea78830e232a292944920"
14
+ "content": "f5e3c5aa3482f0f68f6c0306b83e46a957fa5a3d72adf0a42667e1a7c64557b4"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.22",
4
- "engineVersion": "5.3.22",
5
- "buildId": "1-5.3.22-x86_64-pc-windows-msvc",
3
+ "cliVersion": "5.3.23",
4
+ "engineVersion": "5.3.23",
5
+ "buildId": "1-5.3.23-x86_64-pc-windows-msvc",
6
6
  "protocolAbi": 1,
7
7
  "capabilityAbi": 2,
8
8
  "nodeApiAbi": 4,
@@ -16,15 +16,15 @@
16
16
  "platform": "win32",
17
17
  "arch": "x64",
18
18
  "libc": null,
19
- "artifactSha256": "832a639657313dad460661ba34672d01ac1fc5674a655362f7d936e48353c0e5",
19
+ "artifactSha256": "ff194a262e31bd30f9225c3980a9d2b52048c683ba55e9fca7263f41cb7ccdf5",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.win32-x64-msvc.node.sbom.json",
23
- "sha256": "2fac480bb810bb3201adc6a82859ace5aeb0b46e62da7cd257fb8089d1ade10f"
23
+ "sha256": "5453a2e1fe0092ec6a24a64b8950bdf1764a3e4a0c9241992d003c0b681401ea"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "faabf932259a10c5cabfeedf510c23d686b45e83",
27
+ "sourceCommit": "269abdfd76527c0cc945512d5d69ce483e38a97d",
28
28
  "sourceTreeDirty": false,
29
29
  "sourceDateEpoch": 1,
30
30
  "rustToolchain": "rustc 1.95.0 (59807616e 2026-04-14)",
@@ -33,6 +33,6 @@
33
33
  "signature": {
34
34
  "algorithm": "Ed25519",
35
35
  "keyId": "e2ee765cb5ad9fbdc433ece332bce26d746d5e350b3acde0721a4c8c6337ff7b",
36
- "value": "MudkeMsYJwviSCoe775V8V4/N8d1dgRiQNRBlaGGrozpQb/cavJjNWpL8CoQEVsjX9n1CwjOeTVPu45gDzqqDQ=="
36
+ "value": "PUxswH5ZDjX5DdMMdF1I8emOHdaeug54P2D87YYqnWrOMbVPJ+PzXHTDrJA+J1CjbI1tpGNajl5raINMwHbaBA=="
37
37
  }
38
38
  }
@@ -4,14 +4,14 @@
4
4
  "version": 1,
5
5
  "metadata": {
6
6
  "component": {
7
- "bom-ref": "pkg:cargo/planu-core@5.3.22",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.23",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.22",
10
+ "version": "5.3.23",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "832a639657313dad460661ba34672d01ac1fc5674a655362f7d936e48353c0e5"
14
+ "content": "ff194a262e31bd30f9225c3980a9d2b52048c683ba55e9fca7263f41cb7ccdf5"
15
15
  }
16
16
  ]
17
17
  }
@@ -1106,7 +1106,7 @@
1106
1106
  "dependsOn": []
1107
1107
  },
1108
1108
  {
1109
- "ref": "pkg:cargo/planu-core@5.3.22",
1109
+ "ref": "pkg:cargo/planu-core@5.3.23",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,5 +1,26 @@
1
1
  import type { CreateSpecInput, ToolResult } from '../types/index.js';
2
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { type LeanFileEntry } from '../engine/spec-format/lean-technical-generator.js';
4
+ import { type AutopilotAnalysis } from './create-spec/autopilot-analyzer.js';
5
+ import type { TechnicalReferenceGroundingRecord } from '../types/spec-grounding.js';
6
+ export declare function groundTechnicalFiles(input: {
7
+ files: {
8
+ create: LeanFileEntry[];
9
+ modify: LeanFileEntry[];
10
+ test: LeanFileEntry[];
11
+ };
12
+ projectPath: string;
13
+ userInput: string;
14
+ autopilot: AutopilotAnalysis;
15
+ }): Promise<{
16
+ files: {
17
+ create: LeanFileEntry[];
18
+ modify: LeanFileEntry[];
19
+ test: LeanFileEntry[];
20
+ };
21
+ records: TechnicalReferenceGroundingRecord[];
22
+ advisoryFiles: LeanFileEntry[];
23
+ }>;
3
24
  export declare function resolveGroundedVerificationCommands(projectPath: string, testPaths: string[]): Promise<string[]>;
4
25
  export declare function handleCreateSpec(inputParams: CreateSpecInput, server?: McpServer): Promise<ToolResult>;
5
26
  //# sourceMappingURL=create-spec.d.ts.map
@@ -102,7 +102,7 @@ async function resolveTechnicalFiles(input) {
102
102
  }
103
103
  return { create: [], modify: [], test: [] };
104
104
  }
105
- async function groundTechnicalFiles(input) {
105
+ export async function groundTechnicalFiles(input) {
106
106
  const userInput = input.userInput.toLowerCase();
107
107
  const autopilotPaths = new Set([
108
108
  ...input.autopilot.suggestedFiles.modify.map((file) => file.path),
@@ -118,7 +118,7 @@ async function groundTechnicalFiles(input) {
118
118
  const advisoryFiles = [];
119
119
  for (const section of ['create', 'modify', 'test']) {
120
120
  for (const file of input.files[section]) {
121
- const pathInUserInput = userInput.includes(file.path.toLowerCase());
121
+ const pathInUserInput = pathSurvivesNegativeClauseCheck(userInput, file.path.toLowerCase());
122
122
  const exists = await pathExists(pathJoin(input.projectPath, file.path));
123
123
  const fromAutopilot = autopilotPaths.has(file.path);
124
124
  const derivedTest = section === 'test' && isDerivedFromGroundedSource(file.path, grounded.modify);
@@ -146,6 +146,96 @@ async function groundTechnicalFiles(input) {
146
146
  }
147
147
  return { files: grounded, records, advisoryFiles };
148
148
  }
149
+ const NEGATIVE_WORK_CLAUSE_RE = /\b(?:remains? unchanged|is not touched|not touched|must not (?:change|be changed|be modified|touch|be touched)|unchanged|out of scope)\b/;
150
+ const CLAUSE_DELIMITERS = ['\n', '. ', '; ', ', and ', ', but '];
151
+ const SENTENCE_DELIMITERS = ['\n', '. '];
152
+ const BACK_REFERENCE_SUBJECT_RE = /^(?:and\s+|but\s+)?(?:it|they|this|that|these|those)\s+(?:must|remains?|stays?|is|are|was|were|should|shall|will|cannot|can|does|do)\b/;
153
+ const PATH_LIKE_TOKEN_RE = /\S+\/\S*\.\w+/;
154
+ const CLAUSE_SPLIT_RE = new RegExp(CLAUSE_DELIMITERS.map((delimiter) => delimiter.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'), 'g');
155
+ function computeDelimitedBounds(text, matchIndex, matchLength, delimiters) {
156
+ const startCandidates = delimiters.map((delimiter) => {
157
+ const index = text.lastIndexOf(delimiter, matchIndex);
158
+ return index === -1 ? -1 : index + delimiter.length;
159
+ });
160
+ const start = Math.max(0, ...startCandidates);
161
+ const searchAfter = matchIndex + matchLength;
162
+ const endCandidates = delimiters
163
+ .map((delimiter) => text.indexOf(delimiter, searchAfter))
164
+ .filter((value) => value !== -1);
165
+ const end = endCandidates.length > 0 ? Math.min(...endCandidates) : text.length;
166
+ return [start, end];
167
+ }
168
+ function findClauseBounds(text, matchIndex, matchLength) {
169
+ return computeDelimitedBounds(text, matchIndex, matchLength, CLAUSE_DELIMITERS);
170
+ }
171
+ function findSentenceBounds(text, matchIndex, matchLength) {
172
+ return computeDelimitedBounds(text, matchIndex, matchLength, SENTENCE_DELIMITERS);
173
+ }
174
+ function splitClausesWithOffsets(sentence, sentenceStart) {
175
+ const clauses = [];
176
+ let cursor = 0;
177
+ CLAUSE_SPLIT_RE.lastIndex = 0;
178
+ let delimiterMatch = CLAUSE_SPLIT_RE.exec(sentence);
179
+ while (delimiterMatch !== null) {
180
+ clauses.push([sentence.slice(cursor, delimiterMatch.index), sentenceStart + cursor]);
181
+ cursor = delimiterMatch.index + delimiterMatch[0].length;
182
+ delimiterMatch = CLAUSE_SPLIT_RE.exec(sentence);
183
+ }
184
+ clauses.push([sentence.slice(cursor), sentenceStart + cursor]);
185
+ return clauses;
186
+ }
187
+ function sentenceHasBackReferencedNegation(userInput, matchIndex, matchLength) {
188
+ const [sentenceStart, sentenceEnd] = findSentenceBounds(userInput, matchIndex, matchLength);
189
+ const sentence = userInput.slice(sentenceStart, sentenceEnd);
190
+ const clauses = splitClausesWithOffsets(sentence, sentenceStart);
191
+ const matchEnd = matchIndex + matchLength;
192
+ const currentClauseIndex = clauses.findIndex(([clauseText, clauseStart]) => matchIndex >= clauseStart && matchEnd <= clauseStart + clauseText.length);
193
+ if (currentClauseIndex === -1) {
194
+ return false;
195
+ }
196
+ const currentClauseEntry = clauses[currentClauseIndex];
197
+ if (currentClauseEntry === undefined) {
198
+ return false;
199
+ }
200
+ const [currentClauseText, currentClauseStart] = currentClauseEntry;
201
+ const currentClauseTail = currentClauseText.slice(matchEnd - currentClauseStart);
202
+ if (PATH_LIKE_TOKEN_RE.test(currentClauseTail)) {
203
+ return false;
204
+ }
205
+ for (let index = currentClauseIndex + 1; index < clauses.length; index += 1) {
206
+ const clauseEntry = clauses[index];
207
+ if (clauseEntry === undefined) {
208
+ continue;
209
+ }
210
+ const [clauseText] = clauseEntry;
211
+ if (PATH_LIKE_TOKEN_RE.test(clauseText)) {
212
+ return false;
213
+ }
214
+ const trimmedClause = clauseText.replace(/^\s+/, '');
215
+ if (BACK_REFERENCE_SUBJECT_RE.test(trimmedClause) &&
216
+ NEGATIVE_WORK_CLAUSE_RE.test(trimmedClause)) {
217
+ return true;
218
+ }
219
+ }
220
+ return false;
221
+ }
222
+ function pathSurvivesNegativeClauseCheck(userInput, lowerPath) {
223
+ let searchFrom = 0;
224
+ for (;;) {
225
+ const matchIndex = userInput.indexOf(lowerPath, searchFrom);
226
+ if (matchIndex === -1) {
227
+ return false;
228
+ }
229
+ const [clauseStart, clauseEnd] = findClauseBounds(userInput, matchIndex, lowerPath.length);
230
+ const clause = userInput.slice(clauseStart, clauseEnd);
231
+ const ownClauseNegated = NEGATIVE_WORK_CLAUSE_RE.test(clause);
232
+ const backReferencedNegation = sentenceHasBackReferencedNegation(userInput, matchIndex, lowerPath.length);
233
+ if (!ownClauseNegated && !backReferencedNegation) {
234
+ return true;
235
+ }
236
+ searchFrom = matchIndex + lowerPath.length;
237
+ }
238
+ }
149
239
  function isDerivedFromGroundedSource(testPath, modifyFiles) {
150
240
  return modifyFiles.some((file) => {
151
241
  const withoutSrc = file.path.startsWith('src/') ? file.path.slice(4) : file.path;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.3.22",
3
+ "version": "5.3.23",
4
4
  "description": "Planu — MCP Server for Spec Driven Development with native Rust acceleration for hot paths. Cross-platform (Linux/macOS/Windows, x64/arm64, glibc/musl).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -36,14 +36,14 @@
36
36
  "packageName": "@planu/core"
37
37
  },
38
38
  "optionalDependencies": {
39
- "@planu/core-darwin-arm64": "5.3.22",
40
- "@planu/core-darwin-x64": "5.3.22",
41
- "@planu/core-linux-arm64-gnu": "5.3.22",
42
- "@planu/core-linux-arm64-musl": "5.3.22",
43
- "@planu/core-linux-x64-gnu": "5.3.22",
44
- "@planu/core-linux-x64-musl": "5.3.22",
45
- "@planu/core-win32-arm64-msvc": "5.3.22",
46
- "@planu/core-win32-x64-msvc": "5.3.22"
39
+ "@planu/core-darwin-arm64": "5.3.23",
40
+ "@planu/core-darwin-x64": "5.3.23",
41
+ "@planu/core-linux-arm64-gnu": "5.3.23",
42
+ "@planu/core-linux-arm64-musl": "5.3.23",
43
+ "@planu/core-linux-x64-gnu": "5.3.23",
44
+ "@planu/core-linux-x64-musl": "5.3.23",
45
+ "@planu/core-win32-arm64-msvc": "5.3.23",
46
+ "@planu/core-win32-x64-msvc": "5.3.23"
47
47
  },
48
48
  "engines": {
49
49
  "node": ">=24.0.0"
package/planu-native.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dev.planu.native",
3
3
  "displayName": "Planu Native Lightweight Surface",
4
- "version": "5.3.22",
4
+ "version": "5.3.23",
5
5
  "packageName": "@planu/cli",
6
6
  "modes": {
7
7
  "lightweight": {
package/planu-plugin.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dev.planu.cli",
3
3
  "displayName": "Planu — Spec Driven Development",
4
4
  "description": "Manage software specs, estimations, and autonomous SDD workflows. Language-agnostic MCP server for Claude Code.",
5
- "version": "5.3.22",
5
+ "version": "5.3.23",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",