@planu/cli 5.3.21 → 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 +19 -0
- package/dist/config/runtime-policy.json +3 -3
- package/dist/engine/framework-detector.js +4 -2
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +4 -4
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +4 -4
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +4 -4
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +4 -4
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +4 -4
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +4 -4
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +4 -4
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +4 -4
- package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -1
- package/dist/tools/create-spec.d.ts +21 -0
- package/dist/tools/create-spec.js +92 -2
- package/package.json +14 -13
- package/planu-native.json +1 -1
- package/planu-plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
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
|
+
|
|
7
|
+
## [5.3.22] - 2026-08-13
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
- fix(spec-1523): bind isolated rebuild sidecar provenance to the build-source commit
|
|
11
|
+
- fix(spec-1521): pin native provenance across the lockfile-integrity amend
|
|
12
|
+
- fix(spec-1519): bound acknowledgement latency at a tail ceiling, not a bare SLO constant
|
|
13
|
+
- fix(spec-1518): scope PLANU_RELEASE_MODE out of the source-quality phase
|
|
14
|
+
- fix(spec-1518): scope release-build env out of the source-quality phase
|
|
15
|
+
- fix(deps): drop vulnerable extract-zip by forcing puppeteer-core 25
|
|
16
|
+
- fix(spec-1506,spec-1507): align release invariant and lint budget with shipped behaviour
|
|
17
|
+
- fix(spec-1506,spec-1507): correct native lockfile integrity and uncache every gate
|
|
18
|
+
|
|
19
|
+
|
|
1
20
|
## [5.3.21] - 2026-08-12
|
|
2
21
|
|
|
3
22
|
### Bug Fixes
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"maximumOutputBufferBytes": 67108864
|
|
15
15
|
},
|
|
16
16
|
"lintValidation": {
|
|
17
|
-
"defaultTimeoutMs":
|
|
17
|
+
"defaultTimeoutMs": 420000,
|
|
18
18
|
"minimumTimeoutMs": 1000,
|
|
19
19
|
"maximumTimeoutMs": 1800000
|
|
20
20
|
},
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"validation": {
|
|
30
30
|
"defaultDeadlineMs": 1800000,
|
|
31
|
-
"durableLintTimeoutMs":
|
|
32
|
-
"perGateTimeoutMs":
|
|
31
|
+
"durableLintTimeoutMs": 420000,
|
|
32
|
+
"perGateTimeoutMs": 450000,
|
|
33
33
|
"complianceCommandTimeoutMs": 900000,
|
|
34
34
|
"noProgressTimeoutMs": 960000,
|
|
35
35
|
"submissionLockWaitMs": 180,
|
|
@@ -221,6 +221,7 @@ export async function detectTestCommand(projectPath, packageManager) {
|
|
|
221
221
|
}
|
|
222
222
|
return null;
|
|
223
223
|
}
|
|
224
|
+
const LINT_SCRIPT_PREFERENCE = ['lint:gate', 'lint:ci', 'lint'];
|
|
224
225
|
/**
|
|
225
226
|
* Detect lint command from project config files.
|
|
226
227
|
*/
|
|
@@ -228,8 +229,9 @@ export async function detectLintCommand(projectPath, packageManager) {
|
|
|
228
229
|
const pkgJson = await readJsonFile(join(projectPath, 'package.json'));
|
|
229
230
|
if (pkgJson) {
|
|
230
231
|
const scripts = pkgJson.scripts;
|
|
231
|
-
|
|
232
|
-
|
|
232
|
+
const scriptName = LINT_SCRIPT_PREFERENCE.find((name) => typeof scripts?.[name] === 'string' && scripts[name] !== '');
|
|
233
|
+
if (scriptName) {
|
|
234
|
+
return `${pmRunner(packageManager)} run ${scriptName}`;
|
|
233
235
|
}
|
|
234
236
|
}
|
|
235
237
|
if (await hasAnyFile(projectPath, ['.eslintrc*', 'eslint.config.*'])) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"cliVersion": "5.3.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
20
|
+
"artifactSha256": "df04e55326ab8279dfddd1e0607a66b7b4fa6e0893f32c9c5adff2326a60a2a0",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-arm64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "be63f58e999d18e1ba92aea4ddbd6eeab4dcf8de3a574d30d78b0eb18f6dd654"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
20
|
+
"artifactSha256": "3c8382e950e1dd36777d61fa7b60bc01d1af28fb33834bd94e48b499510a3d4e",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-x64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "1b319f2b236037e49c739cf5e240629987526680ce6f1784aca3067ab6144ac4"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "d24b2ccaf35573cd5cb80fc16bd902aee49c23510d6517831164a38763a90608"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "81da3a46f573b41a15d0407cd887c12c5cd6cbc8a8afe6a4c43159815c2361a0"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "80ffb59c763c08d107de1e6ddb1bd2ceb6d77d705d060af6ad154a7a5dd8a4cd"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "16140edf7ef98106200cd68aed27910378b7896412f10e110bb3128861e73f9b"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "4e64e359b4286ff8a5f46fe93dffa96d61c867ae041ad3f9a63257f97d73df32"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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.
|
|
4
|
-
"engineVersion": "5.3.
|
|
5
|
-
"buildId": "1-5.3.
|
|
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": "
|
|
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": "
|
|
23
|
+
"sha256": "5453a2e1fe0092ec6a24a64b8950bdf1764a3e4a0c9241992d003c0b681401ea"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
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": "
|
|
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.
|
|
7
|
+
"bom-ref": "pkg:cargo/planu-core@5.3.23",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.23",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
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.
|
|
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",
|
|
@@ -8,7 +8,7 @@ Auto-generated by \`init_project\`. Do not edit manually.
|
|
|
8
8
|
When implementation changes are complete and validated, always address release explicitly with a local-first flow:
|
|
9
9
|
|
|
10
10
|
- canonical local gate: \`pnpm check:preflight\`
|
|
11
|
-
- source-quality evidence binds the exact release commit, so a pre-bump run can never produce a receipt the release will accept; the full source-quality plan runs
|
|
11
|
+
- source-quality evidence binds the exact release commit, so a pre-bump run can never produce a receipt the release will accept; the full source-quality plan runs inside the release, against the bump commit, and reruns whenever a later step rewrites that commit (for example the native-lockfile-integrity amend), since the prior receipt no longer binds the new sha
|
|
12
12
|
- canonical local release command: \`pnpm release:local\`
|
|
13
13
|
- publish externally only when the user has explicitly requested shipping/publishing
|
|
14
14
|
- use \`main\` as the default release branch; treat \`develop\` as optional gitflow compatibility only when the repository actively uses it
|
|
@@ -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
|
|
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.
|
|
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.
|
|
40
|
-
"@planu/core-darwin-x64": "5.3.
|
|
41
|
-
"@planu/core-linux-arm64-gnu": "5.3.
|
|
42
|
-
"@planu/core-linux-arm64-musl": "5.3.
|
|
43
|
-
"@planu/core-linux-x64-gnu": "5.3.
|
|
44
|
-
"@planu/core-linux-x64-musl": "5.3.
|
|
45
|
-
"@planu/core-win32-arm64-msvc": "5.3.
|
|
46
|
-
"@planu/core-win32-x64-msvc": "5.3.
|
|
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"
|
|
@@ -68,7 +68,8 @@
|
|
|
68
68
|
"start": "node dist/index.js",
|
|
69
69
|
"postpublish": "pnpm build",
|
|
70
70
|
"clean": "rm -rf dist",
|
|
71
|
-
"lint": "eslint src/ tests/ --max-warnings 0",
|
|
71
|
+
"lint": "eslint src/ tests/ --max-warnings 0 --cache --cache-strategy content --cache-location node_modules/.cache/eslint/",
|
|
72
|
+
"lint:gate": "eslint src/ tests/ --max-warnings 0",
|
|
72
73
|
"lint:fix": "eslint src/ tests/ --fix --max-warnings 0",
|
|
73
74
|
"format": "prettier --write 'src/**/*.ts' 'tests/**/*.test.ts'",
|
|
74
75
|
"format:check": "prettier --check 'src/**/*.ts' 'tests/**/*.test.ts'",
|
|
@@ -87,10 +88,10 @@
|
|
|
87
88
|
"native:project-graph:e2e": "PLANU_NATIVE_E2E=1 vitest run tests/integration/native-project-graph-e2e.test.ts",
|
|
88
89
|
"native:project-graph:benchmark": "node scripts/benchmark-native-performance.mjs --operation project_graph_query --samples 30 --warmups 5 --project-path . --spec-id SPEC-1119 --json",
|
|
89
90
|
"benchmark:execution-kernel": "pnpm build && node scripts/benchmark-execution-kernel.mjs",
|
|
90
|
-
"check": "pnpm typecheck && pnpm lint && pnpm format:check && pnpm check:destructive-ops && pnpm check:release-authorities && pnpm check:commercial-surfaces && pnpm check:tool-registration && pnpm check:public-privacy && pnpm check:website-proof && pnpm check:donation-assets && pnpm check:website-public-assets",
|
|
91
|
+
"check": "pnpm typecheck && pnpm lint:gate && pnpm format:check && pnpm check:destructive-ops && pnpm check:release-authorities && pnpm check:commercial-surfaces && pnpm check:tool-registration && pnpm check:public-privacy && pnpm check:website-proof && pnpm check:donation-assets && pnpm check:website-public-assets",
|
|
91
92
|
"check:destructive-ops": "bash scripts/check-no-automatic-destructive-ops.sh",
|
|
92
93
|
"check:strict": "pnpm check && pnpm generate:host-tool-registry -- --check && pnpm check:native-version-parity && pnpm check:environment-schema && pnpm audit:hardcodes && pnpm audit:deadcode && pnpm audit:circular && pnpm audit:types && pnpm audit:security && pnpm audit:i18n",
|
|
93
|
-
"check:preflight": "pnpm typecheck && pnpm lint && pnpm format:check && node scripts/check-public-privacy.mjs && node scripts/check-preflight.mjs",
|
|
94
|
+
"check:preflight": "pnpm typecheck && pnpm lint:gate && pnpm format:check && node scripts/check-public-privacy.mjs && node scripts/check-preflight.mjs",
|
|
94
95
|
"check:reliability": "node scripts/check-reliability-policies.mjs",
|
|
95
96
|
"check:environment-schema": "node scripts/check-environment-schema.mjs",
|
|
96
97
|
"test:contracts": "vitest run tests/contracts tests/integration/package-consumer-hono.test.ts",
|
|
@@ -120,7 +121,7 @@
|
|
|
120
121
|
"prepublishOnly": "bash scripts/prepublish-guard.sh",
|
|
121
122
|
"prepack": "pnpm build:ts && pnpm package:size",
|
|
122
123
|
"test:debug": "vitest run --inspect-brk --single-thread",
|
|
123
|
-
"validate": "pnpm build && pnpm typecheck && pnpm verify:typescript-migration && pnpm lint && pnpm format:check && pnpm test:release-gate",
|
|
124
|
+
"validate": "pnpm build && pnpm typecheck && pnpm verify:typescript-migration && pnpm lint:gate && pnpm format:check && pnpm test:release-gate",
|
|
124
125
|
"docker:build": "docker build -t planu .",
|
|
125
126
|
"docker:run": "docker compose up",
|
|
126
127
|
"publish:blog": "node scripts/publish-blog.mjs",
|
package/planu-native.json
CHANGED
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.
|
|
5
|
+
"version": "5.3.23",
|
|
6
6
|
"icon": "assets/plugin/icon.svg",
|
|
7
7
|
"command": ["npx", "@planu/cli@latest"],
|
|
8
8
|
"packageName": "@planu/cli",
|