@planu/cli 5.3.12 → 5.3.14
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 +36 -0
- package/dist/engine/evidence-index/index-builder.js +28 -3
- package/dist/engine/handoff-packager.d.ts +2 -2
- package/dist/engine/handoff-packager.js +5 -4
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +8 -8
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +8 -8
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +8 -8
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +8 -8
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +8 -8
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +8 -8
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +8 -8
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +8 -8
- package/dist/engine/spec-quality/generic-output-gate.js +18 -2
- package/dist/engine/validation/validation-source-policy.js +1 -0
- package/dist/tools/create-spec.js +16 -4
- package/dist/tools/update-status/evidence-gate.js +6 -2
- package/dist/types/spec-quality.d.ts +3 -0
- package/package.json +9 -9
- package/planu-native.json +1 -1
- package/planu-plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
## [5.3.14] - 2026-08-10
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
- fix(spec-1481): bound trapped fixture life per implementation-review arbitration
|
|
5
|
+
- fix(spec-1481): harden stdio abort test vs load and de-vacuize pid asserts
|
|
6
|
+
- fix(spec-1466): apply implementation-review arbitration fixes
|
|
7
|
+
- fix(spec-1467): require positive integer pid in waitForPid per review arbitration
|
|
8
|
+
- fix(spec-1466): legalize test-evidence overlap in ownership gate and handoff agreement
|
|
9
|
+
- fix(spec-1467): harden timing-sensitive receipt and process-runner tests
|
|
10
|
+
|
|
11
|
+
### Chores
|
|
12
|
+
- chore(specs): file SPEC-1484 durable heartbeat flaky test dogfood bug
|
|
13
|
+
- chore(specs): file SPEC-1483 stale native artifacts after release abort
|
|
14
|
+
- chore(specs): record SPEC-1481 done transition and file SPEC-1482 lint-gate bug
|
|
15
|
+
- chore(specs): file SPEC-1481 flaky stdio lifecycle test under full-suite load
|
|
16
|
+
- chore(specs): record done transitions for SPEC-1466/1467 and file SPEC-1480 debt spec
|
|
17
|
+
- chore(specs): record implementing transitions for SPEC-1466/1467 with handoff evidence
|
|
18
|
+
- chore(specs): approve SPEC-1466/1467 after round 2; file SPEC-1479
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## [5.3.13] - 2026-08-10
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
- fix(spec-1468): word-boundary guard on evidence marker truncation
|
|
25
|
+
- fix(lifecycle): evidence-only rebind + planu digest exclusion (SPEC-1468)
|
|
26
|
+
- fix(spec-1469): close path-echo exemption bypass found in implementation review
|
|
27
|
+
- fix(spec-quality): path-token guard in restatement check + actionable gate rejection (SPEC-1469)
|
|
28
|
+
|
|
29
|
+
### Chores
|
|
30
|
+
- chore(spec-1468): record done transition lifecycle state
|
|
31
|
+
- chore(spec-1469): record done transition lifecycle state
|
|
32
|
+
- chore(planu): capture auto-generated session context
|
|
33
|
+
- chore(specs): move SPEC-1468/1469 to implementing
|
|
34
|
+
- chore(specs): approve SPEC-1468/1469 after round-2 dual review + arbitration
|
|
35
|
+
|
|
36
|
+
|
|
1
37
|
## [5.3.12] - 2026-08-10
|
|
2
38
|
|
|
3
39
|
### Bug Fixes
|
|
@@ -4,13 +4,38 @@ import { createCriterionIdentity, criterionIdentitiesMatch } from '../criterion-
|
|
|
4
4
|
export function criterionKey(criterion) {
|
|
5
5
|
return createCriterionIdentity(criterion).stableKey;
|
|
6
6
|
}
|
|
7
|
+
const EVIDENCE_MARKER = /\b(?:FILES|FUNCTIONS|TEST):/;
|
|
8
|
+
function truncateAtEvidenceMarker(value) {
|
|
9
|
+
const markerIndex = value.search(EVIDENCE_MARKER);
|
|
10
|
+
return markerIndex === -1 ? value : value.slice(0, markerIndex);
|
|
11
|
+
}
|
|
7
12
|
export async function buildSpecEvidenceIndex(args) {
|
|
8
13
|
const diagnostics = [...args.artifacts.invalidArtifacts];
|
|
9
14
|
const matrixRows = args.artifacts.traceabilityMatrix?.rows ?? [];
|
|
10
15
|
const contractValidations = args.artifacts.contractValidations;
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
const criterionEntries = args.criteria.map((criterion, index) => ({
|
|
17
|
+
criterion,
|
|
18
|
+
identity: createCriterionIdentity(criterion, { index }),
|
|
19
|
+
truncatedIdentity: createCriterionIdentity(truncateAtEvidenceMarker(criterion), { index }),
|
|
20
|
+
}));
|
|
21
|
+
const rowCriterionIndexes = matrixRows.map((row, rowIndex) => {
|
|
22
|
+
const rowIdentity = createCriterionIdentity(row.acceptanceCriterion, { index: rowIndex });
|
|
23
|
+
const exactMatches = criterionEntries
|
|
24
|
+
.map((entry, criterionIndex) => criterionIdentitiesMatch(rowIdentity, entry.identity) ? criterionIndex : -1)
|
|
25
|
+
.filter((criterionIndex) => criterionIndex !== -1);
|
|
26
|
+
if (exactMatches.length > 0) {
|
|
27
|
+
return exactMatches;
|
|
28
|
+
}
|
|
29
|
+
const truncatedRowIdentity = createCriterionIdentity(truncateAtEvidenceMarker(row.acceptanceCriterion), { index: rowIndex });
|
|
30
|
+
const truncatedMatches = criterionEntries
|
|
31
|
+
.map((entry, criterionIndex) => criterionIdentitiesMatch(truncatedRowIdentity, entry.truncatedIdentity)
|
|
32
|
+
? criterionIndex
|
|
33
|
+
: -1)
|
|
34
|
+
.filter((criterionIndex) => criterionIndex !== -1);
|
|
35
|
+
return truncatedMatches.length === 1 ? truncatedMatches : [];
|
|
36
|
+
});
|
|
37
|
+
const entries = await Promise.all(criterionEntries.map(async ({ criterion, identity }, criterionIndex) => {
|
|
38
|
+
const rows = matrixRows.filter((_, rowIndex) => (rowCriterionIndexes[rowIndex] ?? []).includes(criterionIndex));
|
|
14
39
|
const evidence = await collectEvidence({
|
|
15
40
|
rows,
|
|
16
41
|
contractValidations,
|
|
@@ -16,8 +16,8 @@ export declare function extractCanonicalFileOwnership(content: string): {
|
|
|
16
16
|
toModify: string[];
|
|
17
17
|
toCreate: string[];
|
|
18
18
|
toTest: string[];
|
|
19
|
-
/** Test paths as declared, before conflict
|
|
20
|
-
*
|
|
19
|
+
/** Test paths as declared, before conflict stripping — feeds the package-level
|
|
20
|
+
* test filter and the ownership-agreement exclusion. */
|
|
21
21
|
toTestDeclared: string[];
|
|
22
22
|
blockers: string[];
|
|
23
23
|
};
|
|
@@ -213,7 +213,7 @@ export function extractCanonicalFileOwnership(content) {
|
|
|
213
213
|
const toCreate = parseSection('Create');
|
|
214
214
|
const toModify = parseSection('Modify');
|
|
215
215
|
const toTest = parseSection('Test');
|
|
216
|
-
const conflicts =
|
|
216
|
+
const conflicts = toCreate.filter((path) => toModify.includes(path));
|
|
217
217
|
for (const path of conflicts) {
|
|
218
218
|
addBlocker(`CONFLICTING_FILE_OWNERSHIP: ${path}`);
|
|
219
219
|
}
|
|
@@ -411,10 +411,11 @@ function extractFileLevelWorkPlanOwnership(content) {
|
|
|
411
411
|
blockers: [...new Set(state.blockers)].sort(),
|
|
412
412
|
};
|
|
413
413
|
}
|
|
414
|
-
function validateOwnershipAgreement(canonical, workPlan) {
|
|
414
|
+
function validateOwnershipAgreement(canonical, workPlan, testDeclaredPaths) {
|
|
415
415
|
if (!canonical.present || !workPlan.present) {
|
|
416
416
|
return [];
|
|
417
417
|
}
|
|
418
|
+
const testDeclared = new Set(testDeclaredPaths);
|
|
418
419
|
const classification = (ownership, path) => ownership.toCreate.includes(path)
|
|
419
420
|
? 'Create'
|
|
420
421
|
: ownership.toModify.includes(path)
|
|
@@ -425,7 +426,7 @@ function validateOwnershipAgreement(canonical, workPlan) {
|
|
|
425
426
|
...canonical.toModify,
|
|
426
427
|
...workPlan.toCreate,
|
|
427
428
|
...workPlan.toModify,
|
|
428
|
-
]);
|
|
429
|
+
].filter((path) => !testDeclared.has(path)));
|
|
429
430
|
return [...paths].sort().flatMap((path) => {
|
|
430
431
|
const canonicalClass = classification(canonical, path);
|
|
431
432
|
const workPlanClass = classification(workPlan, path);
|
|
@@ -598,7 +599,7 @@ export async function packageHandoff(spec, knowledge) {
|
|
|
598
599
|
...canonicalFiles.blockers,
|
|
599
600
|
...canonicalOwnership.blockers,
|
|
600
601
|
...workPlanOwnership.blockers,
|
|
601
|
-
...validateOwnershipAgreement(canonicalOwnership, workPlanOwnership),
|
|
602
|
+
...validateOwnershipAgreement(canonicalOwnership, workPlanOwnership, canonicalFiles.toTestDeclared),
|
|
602
603
|
...(!['draft', 'review', 'approved', 'implementing', 'done', 'discarded'].includes(spec.status)
|
|
603
604
|
? [`UNSUPPORTED_LIFECYCLE_STATUS: ${spec.status}`]
|
|
604
605
|
: []),
|
|
@@ -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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "4c174c7bc2bf7e440d3295feb2d8039ae905dc1c588007ae50bb74b0c6b7fd26",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-arm64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "e00b7cad12d3665a3ffa98b91f795bd81d23128775a5574b801bf70c8adc7afb"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
28
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "rOWsQsW8oC6kfbEGi+9Ez3Z3MUyXiyyBakI+adPC6o5DECM+mdC++CQ04n0lMuTidLK+PGXq1ZjkkRA45iKfDg=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "4c174c7bc2bf7e440d3295feb2d8039ae905dc1c588007ae50bb74b0c6b7fd26"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "585436bd096f716d38077ee00628f80f10b2b7a53eebc064c71a348c691a120c",
|
|
21
21
|
"sbom": {
|
|
22
22
|
"format": "CycloneDX-1.5",
|
|
23
23
|
"path": "planu-core.darwin-x64.node.sbom.json",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "fdd221a66ce155cf8571f478400c90e78b0fd644f4872d75688fb406c1d3ea7e"
|
|
25
25
|
},
|
|
26
26
|
"provenance": {
|
|
27
27
|
"builder": "scripts/build-rust-local.sh",
|
|
28
|
-
"sourceCommit": "
|
|
28
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "Fily8bX8ubTUGRXVQypr+6847eqkD+bGCPQQNXTMhaG+vj3IK3SNrPGfR7uRNT74D0K1inVGIV3umQbQ6IMvCw=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "585436bd096f716d38077ee00628f80f10b2b7a53eebc064c71a348c691a120c"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "a8a29c8478e18fa30f1db2c123fa8a9f3df6021ee41371415b0b58c058102477",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.linux-arm64-gnu.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "d11c991b3337d7a437cc66106a2f8d3b4b119f6b088c3509e7b8c754f4eddd0f"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "N0GemRSWE3adFqXfPJQ8W/oU9aAgejnHCza7s3SBXjU8sFS/ntUtZ3q8MGFP+lN/QDqHnhHIyM/XSqM7KzejDw=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "a8a29c8478e18fa30f1db2c123fa8a9f3df6021ee41371415b0b58c058102477"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "bd0f6ff601ab21a2052364567465ba319d847a5b67f061bb5107360a88c03971",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.linux-arm64-musl.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "8fbe609d1e94a3650544e02908b35b6ebdf93eac6dcd1ddf7983add76da5b57e"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "dUqTPahkHmCiAEmSaMEnq3zUKFiVBV+ZuMZTP4c8AryvORF2OoCGUglSVf+Ol9Ww8H4CIyByxkftL01Awk8rAw=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "bd0f6ff601ab21a2052364567465ba319d847a5b67f061bb5107360a88c03971"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "ab11f8980f5b174b9c2d5b6806daa3d356a12e841b2eaf668c106a3c45cd816e",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.linux-x64-gnu.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "24889fae3a9cff6f55b7cd1d60b6ea1ccb7fa9a8e53f3e2609e1aab97d6fa88b"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "Scj9Wqin6lntJ7TVv9I4nGUPwfYEIkvDW957suo9QXU3oLZIdwo+gWy+8r0jfMvNzqkbJrXuaUseiGzMnV31Aw=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "ab11f8980f5b174b9c2d5b6806daa3d356a12e841b2eaf668c106a3c45cd816e"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "c23996625c6b938358150cf4179453e12e2e0fd13e8eea0e84f5fcc85c55e150",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.linux-x64-musl.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "6dc9f80ab3206c95cc8a9f3eff39bf21f21e8fbb30e0cf31c4dbcd26e095c675"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "813Dm95ogKfJ0gWnnob2MqAjFqrZiGqBFsOKm9fbJB1y3MWxQn1ntV1t/eONh0I1r6qA/LJFarprcALWHEMbAA=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "c23996625c6b938358150cf4179453e12e2e0fd13e8eea0e84f5fcc85c55e150"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "0668394e6f892080771e2f878c2f75d7692f7d2db03c543bdda4fd2fbbf27bd4",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.win32-arm64-msvc.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "8bd0170c6b52aed934ad9d080190e2d63cf012bd6d6f132449e599e1770c60fa"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "Pse3AY39p2tC7McGWVjvSCG/TOprOtT1W9dvf0XwP/ZWVEd4fVCQUwrTyoXKGAwXCOp4vQjViiE+CvHuSkQ2Dw=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "0668394e6f892080771e2f878c2f75d7692f7d2db03c543bdda4fd2fbbf27bd4"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
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.14",
|
|
4
|
+
"engineVersion": "5.3.14",
|
|
5
|
+
"buildId": "1-5.3.14-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": "60f4555904763ce92bb3193d78ce261c98334ff4630466214ba8ab1c257a2482",
|
|
20
20
|
"sbom": {
|
|
21
21
|
"format": "CycloneDX-1.5",
|
|
22
22
|
"path": "planu-core.win32-x64-msvc.node.sbom.json",
|
|
23
|
-
"sha256": "
|
|
23
|
+
"sha256": "4754b2b3a274f43a3ee5d1bcece2ae4c8a02373bf9ba646291dce44574304df5"
|
|
24
24
|
},
|
|
25
25
|
"provenance": {
|
|
26
26
|
"builder": "scripts/build-rust-local.sh",
|
|
27
|
-
"sourceCommit": "
|
|
27
|
+
"sourceCommit": "a847a7442e7735a9f4f2a9878eccbd52fc54509b",
|
|
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": "KLoEL/AX7y2xHycyQKsFA2zksyqZ8uDBBixdAqVnSTf5Oa/aEUsOS7CbH2dt3vpY034HSgbZO319iN+ws/taBA=="
|
|
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.14",
|
|
8
8
|
"type": "library",
|
|
9
9
|
"name": "planu-core",
|
|
10
|
-
"version": "5.3.
|
|
10
|
+
"version": "5.3.14",
|
|
11
11
|
"hashes": [
|
|
12
12
|
{
|
|
13
13
|
"alg": "SHA-256",
|
|
14
|
-
"content": "
|
|
14
|
+
"content": "60f4555904763ce92bb3193d78ce261c98334ff4630466214ba8ab1c257a2482"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"type": "library",
|
|
73
|
-
"bom-ref": "pkg:cargo/bstr@1.13.
|
|
73
|
+
"bom-ref": "pkg:cargo/bstr@1.13.1",
|
|
74
74
|
"name": "bstr",
|
|
75
|
-
"version": "1.13.
|
|
75
|
+
"version": "1.13.1",
|
|
76
76
|
"externalReferences": [
|
|
77
77
|
{
|
|
78
78
|
"type": "distribution",
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
]
|
|
972
972
|
},
|
|
973
973
|
{
|
|
974
|
-
"ref": "pkg:cargo/bstr@1.13.
|
|
974
|
+
"ref": "pkg:cargo/bstr@1.13.1",
|
|
975
975
|
"dependsOn": [
|
|
976
976
|
"pkg:cargo/memchr@2.8.3",
|
|
977
977
|
"pkg:cargo/serde_core@1.0.228"
|
|
@@ -1049,7 +1049,7 @@
|
|
|
1049
1049
|
"ref": "pkg:cargo/globset@0.4.20",
|
|
1050
1050
|
"dependsOn": [
|
|
1051
1051
|
"pkg:cargo/aho-corasick@1.1.5",
|
|
1052
|
-
"pkg:cargo/bstr@1.13.
|
|
1052
|
+
"pkg:cargo/bstr@1.13.1",
|
|
1053
1053
|
"pkg:cargo/log@0.4.33",
|
|
1054
1054
|
"pkg:cargo/regex-automata@0.4.18",
|
|
1055
1055
|
"pkg:cargo/regex-syntax@0.8.11"
|
|
@@ -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.14",
|
|
1110
1110
|
"dependsOn": [
|
|
1111
1111
|
"pkg:cargo/core-foundation@0.10.1",
|
|
1112
1112
|
"pkg:cargo/hmac@0.12.1",
|
|
@@ -119,10 +119,13 @@ function checkInterpolatedSections(content, criteria) {
|
|
|
119
119
|
}
|
|
120
120
|
const start = heading.index + heading[0].length;
|
|
121
121
|
const end = headingMatches[i + 1]?.index ?? content.length;
|
|
122
|
-
const
|
|
122
|
+
const bulletLines = content
|
|
123
123
|
.slice(start, end)
|
|
124
124
|
.split('\n')
|
|
125
|
-
.map((line) =>
|
|
125
|
+
.map((line) => line.trim())
|
|
126
|
+
.filter((line) => BULLET_LINE_RE.test(line));
|
|
127
|
+
const bullets = bulletLines
|
|
128
|
+
.map((line) => BULLET_LINE_RE.exec(line)?.[1])
|
|
126
129
|
.filter((line) => Boolean(line));
|
|
127
130
|
if (isFileListSection(bullets)) {
|
|
128
131
|
continue;
|
|
@@ -132,6 +135,7 @@ function checkInterpolatedSections(content, criteria) {
|
|
|
132
135
|
kind: STRUCTURAL_INTERPOLATION_KIND,
|
|
133
136
|
phrase: heading[1],
|
|
134
137
|
reason: `subsection "${heading[1]}" restates each criterion into the same template with no new information`,
|
|
138
|
+
evidence: bulletLines[0],
|
|
135
139
|
});
|
|
136
140
|
}
|
|
137
141
|
}
|
|
@@ -192,10 +196,22 @@ function restatesCriterion(variable, criteria) {
|
|
|
192
196
|
if (normalizedCriterion.length < CRITERION_RESTATEMENT_MIN_LENGTH) {
|
|
193
197
|
return false;
|
|
194
198
|
}
|
|
199
|
+
if (isCriterionPathTokenEcho(normalizedVariable, criterion)) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
195
202
|
return (normalizedVariable.includes(normalizedCriterion) ||
|
|
196
203
|
normalizedCriterion.includes(normalizedVariable));
|
|
197
204
|
});
|
|
198
205
|
}
|
|
206
|
+
function isCriterionPathTokenEcho(normalizedVariable, criterion) {
|
|
207
|
+
return criterionPathTokens(criterion).some((token) => normalizeForRestatementMatch(token).includes(normalizedVariable));
|
|
208
|
+
}
|
|
209
|
+
function criterionPathTokens(criterion) {
|
|
210
|
+
return criterion
|
|
211
|
+
.split(/\s+/)
|
|
212
|
+
.map((word) => word.replace(/^[`'"]+|[`'".,;:]+$/g, ''))
|
|
213
|
+
.filter((word) => PATH_TOKEN_RE.test(word));
|
|
214
|
+
}
|
|
199
215
|
function normalizeForRestatementMatch(value) {
|
|
200
216
|
return value
|
|
201
217
|
.replace(/[`*_"]/g, '')
|
|
@@ -927,6 +927,21 @@ function applyEnglishOnlyGate(gate) {
|
|
|
927
927
|
function quotePosixShellArgument(value) {
|
|
928
928
|
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
929
929
|
}
|
|
930
|
+
/**
|
|
931
|
+
* SPEC-1469: the quality gate finding alone (`phrase` + `reason`) forced callers into
|
|
932
|
+
* trial-and-error rewording because it dropped the offending rendered line and the rule
|
|
933
|
+
* needed to pass. Quoting `evidence` verbatim and naming the generator-owned FILES:/TEST:
|
|
934
|
+
* marker exemption gives a what-failed + what-to-do-next message on the first read.
|
|
935
|
+
*/
|
|
936
|
+
function formatGenericOutputIssue(issue) {
|
|
937
|
+
const base = `${issue.phrase}: ${issue.reason}`;
|
|
938
|
+
if (!issue.evidence) {
|
|
939
|
+
return base;
|
|
940
|
+
}
|
|
941
|
+
return (`${base}. Offending row: "${issue.evidence}". ` +
|
|
942
|
+
"A row that only echoes a criterion's own mandatory FILES:/TEST: marker path is generator-owned " +
|
|
943
|
+
"and already exempt; rewrite the row's remaining content so it adds information beyond the fixed template.");
|
|
944
|
+
}
|
|
930
945
|
function earlyPreparation(result, clarificationProjectId) {
|
|
931
946
|
return {
|
|
932
947
|
kind: 'early',
|
|
@@ -1144,10 +1159,7 @@ async function prepareCreateSpecCandidate(initialParams, server) {
|
|
|
1144
1159
|
{
|
|
1145
1160
|
type: 'text',
|
|
1146
1161
|
text: 'Spec quality gate blocked generic output before persistence. ' +
|
|
1147
|
-
genericOutputGate.issues
|
|
1148
|
-
.slice(0, 3)
|
|
1149
|
-
.map((issue) => `${issue.phrase}: ${issue.reason}`)
|
|
1150
|
-
.join('; '),
|
|
1162
|
+
genericOutputGate.issues.slice(0, 3).map(formatGenericOutputIssue).join('; '),
|
|
1151
1163
|
},
|
|
1152
1164
|
],
|
|
1153
1165
|
isError: true,
|
|
@@ -67,6 +67,7 @@ import { reportClassifiedDegradation } from '../../errors/classified-degradation
|
|
|
67
67
|
import { captureValidationFreshnessLease } from '../../engine/validation/validation-freshness.js';
|
|
68
68
|
import { computeDurableValidationBindings, toValidationReceiptBindings, } from '../../engine/validation/durable-validation.js';
|
|
69
69
|
import { checkReconciliationFreshness } from '../../engine/evidence-gates/reconciliation-freshness.js';
|
|
70
|
+
import { doneReceiptBindingsDifferOnlyInEvidence } from './done-receipt-verifier.js';
|
|
70
71
|
import { extractCanonicalFileOwnership } from '../../engine/handoff-packager.js';
|
|
71
72
|
import { generateTaskPlanSkeleton, writeEvidenceSkeleton, } from '../../engine/evidence-gates/evidence-skeletons.js';
|
|
72
73
|
import { extractSection } from '../../engine/spec-format/markdown-sections.js';
|
|
@@ -285,8 +286,11 @@ async function currentBindingsAreFresh(identity, currentBindings) {
|
|
|
285
286
|
projectPath: identity.projectPath,
|
|
286
287
|
specPath,
|
|
287
288
|
});
|
|
288
|
-
|
|
289
|
-
|
|
289
|
+
const observedBindings = toValidationReceiptBindings(observed.bindings, observed.artifactDigests);
|
|
290
|
+
if (JSON.stringify(observedBindings) === JSON.stringify(currentBindings)) {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
return doneReceiptBindingsDifferOnlyInEvidence(observedBindings, currentBindings);
|
|
290
294
|
}
|
|
291
295
|
catch (error) {
|
|
292
296
|
reportClassifiedDegradation('VALIDATION_RECEIPT_RECOMPUTE_FAILED', error);
|
|
@@ -45,6 +45,9 @@ export interface GenericSpecOutputIssue {
|
|
|
45
45
|
kind: GenericSpecOutputIssueKind;
|
|
46
46
|
phrase: string;
|
|
47
47
|
reason: string;
|
|
48
|
+
/** SPEC-1469: the first offending bullet verbatim, so the tool boundary can quote the exact
|
|
49
|
+
* rendered line instead of forcing the caller to guess which row collided. */
|
|
50
|
+
evidence?: string;
|
|
48
51
|
}
|
|
49
52
|
export interface GenericSpecOutputGateResult {
|
|
50
53
|
passed: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planu/cli",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.14",
|
|
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",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"packageName": "@planu/core"
|
|
36
36
|
},
|
|
37
37
|
"optionalDependencies": {
|
|
38
|
-
"@planu/core-darwin-arm64": "5.3.
|
|
39
|
-
"@planu/core-darwin-x64": "5.3.
|
|
40
|
-
"@planu/core-linux-arm64-gnu": "5.3.
|
|
41
|
-
"@planu/core-linux-arm64-musl": "5.3.
|
|
42
|
-
"@planu/core-linux-x64-gnu": "5.3.
|
|
43
|
-
"@planu/core-linux-x64-musl": "5.3.
|
|
44
|
-
"@planu/core-win32-arm64-msvc": "5.3.
|
|
45
|
-
"@planu/core-win32-x64-msvc": "5.3.
|
|
38
|
+
"@planu/core-darwin-arm64": "5.3.14",
|
|
39
|
+
"@planu/core-darwin-x64": "5.3.14",
|
|
40
|
+
"@planu/core-linux-arm64-gnu": "5.3.14",
|
|
41
|
+
"@planu/core-linux-arm64-musl": "5.3.14",
|
|
42
|
+
"@planu/core-linux-x64-gnu": "5.3.14",
|
|
43
|
+
"@planu/core-linux-x64-musl": "5.3.14",
|
|
44
|
+
"@planu/core-win32-arm64-msvc": "5.3.14",
|
|
45
|
+
"@planu/core-win32-x64-msvc": "5.3.14"
|
|
46
46
|
},
|
|
47
47
|
"engines": {
|
|
48
48
|
"node": ">=24.0.0"
|
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.14",
|
|
6
6
|
"icon": "assets/plugin/icon.svg",
|
|
7
7
|
"command": ["npx", "@planu/cli@latest"],
|
|
8
8
|
"packageName": "@planu/cli",
|