@planu/cli 5.3.1 → 5.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/dist/config/official-sdd-tools.d.ts +1 -1
  4. package/dist/config/official-sdd-tools.js +1 -0
  5. package/dist/config/registries/hosts/codex.json +2 -1
  6. package/dist/engine/handoff-packager.d.ts +3 -0
  7. package/dist/engine/handoff-packager.js +18 -3
  8. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
  9. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +4 -4
  10. package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
  11. package/dist/engine/planu-core.darwin-x64.node.sbom.json +4 -4
  12. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
  13. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +4 -4
  14. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
  15. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +4 -4
  16. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
  17. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +4 -4
  18. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
  19. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +4 -4
  20. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
  21. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +4 -4
  22. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
  23. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +4 -4
  24. package/dist/tools/package-handoff.d.ts +2 -1
  25. package/dist/tools/package-handoff.js +23 -4
  26. package/dist/tools/register-sdd-tools.js +2 -0
  27. package/dist/types/readiness.d.ts +1 -0
  28. package/package.json +9 -9
  29. package/planu-native.json +1 -1
  30. package/planu-plugin.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## [5.3.2] - 2026-08-06
2
+
3
+ ### Bug Fixes
4
+ - fix(tools): restore declared bump_spec_version runtime tool (SPEC-1254)
5
+ - fix(handoff): address SPEC-1255 debate review findings
6
+ - fix(handoff): allow test-only specs to produce unblocked handoffs (SPEC-1255)
7
+
8
+ ### Chores
9
+ - chore(planu): redact local paths from SPEC-1392 reproducer
10
+ - chore(planu): SPEC-1254 and SPEC-1255 done with debate-review evidence
11
+ - chore(planu): session checkpoint for debate-protocol batch
12
+ - chore(planu): approve SPEC-1254/1255/1271, file SPEC-1386..1391, add debate-review rule
13
+ - chore(planu): approve SPEC-1206 and SPEC-1250 with reviewer evidence, SPEC-1240 rework feedback
14
+
15
+
1
16
  ## [5.3.1] - 2026-08-05
2
17
 
3
18
  ### Bug Fixes
package/README.md CHANGED
@@ -21,7 +21,7 @@ Planu is a Spec Driven Development stack for AI coding agents: an MCP server and
21
21
  - **Local change detection** — observes project changes without requiring a hosted configuration service.
22
22
  - **Unified Spec Format** — Requirements and technical details in a single, context-efficient `spec.md`.
23
23
  - **Atomic Integrity** — Indestructible writes and **Freeze-on-done** immutability (P0).
24
- - **28 official MCP tools** for the public SDD surface, with advanced workflows kept in skills, CLI commands, and internal pipelines.
24
+ - **29 official MCP tools** for the public SDD surface, with advanced workflows kept in skills, CLI commands, and internal pipelines.
25
25
  - **Multi-agent compatible** — Optimized for Claude Code, Cursor, Windsurf, and Gemini CLI.
26
26
 
27
27
  ---
@@ -1,4 +1,4 @@
1
1
  /** Single editable authority for the official local SDD tool surface. */
2
- export declare const OFFICIAL_SDD_TOOL_NAMES: readonly ['planu_status', 'session_checkpoint', 'facilitate', 'init_project', 'clarify_requirements', 'create_spec', 'list_specs', 'challenge_spec', 'check_readiness', 'update_status', 'update_status_batch', 'package_handoff', 'validate', 'get_job', 'watch_job', 'cancel_job', 'restart_job', 'reconcile_spec', 'create_rule', 'create_skill', 'skill_search', 'configure_code_graph', 'code_graph_status', 'submit_feedback', 'triage_feedback', 'resolve_feedback', 'sync_feedback', 'feedback_status'];
2
+ export declare const OFFICIAL_SDD_TOOL_NAMES: readonly ['planu_status', 'session_checkpoint', 'facilitate', 'init_project', 'clarify_requirements', 'create_spec', 'list_specs', 'challenge_spec', 'check_readiness', 'update_status', 'update_status_batch', 'package_handoff', 'validate', 'get_job', 'watch_job', 'cancel_job', 'restart_job', 'reconcile_spec', 'create_rule', 'create_skill', 'skill_search', 'configure_code_graph', 'code_graph_status', 'submit_feedback', 'triage_feedback', 'resolve_feedback', 'sync_feedback', 'feedback_status', 'bump_spec_version'];
3
3
  export declare function readCanonicalToolNames(): string[];
4
4
  //# sourceMappingURL=official-sdd-tools.d.ts.map
@@ -28,6 +28,7 @@ export const OFFICIAL_SDD_TOOL_NAMES = [
28
28
  'resolve_feedback',
29
29
  'sync_feedback',
30
30
  'feedback_status',
31
+ 'bump_spec_version',
31
32
  ];
32
33
  export function readCanonicalToolNames() {
33
34
  return [...OFFICIAL_SDD_TOOL_NAMES];
@@ -30,7 +30,8 @@
30
30
  "triage_feedback",
31
31
  "resolve_feedback",
32
32
  "sync_feedback",
33
- "feedback_status"
33
+ "feedback_status",
34
+ "bump_spec_version"
34
35
  ],
35
36
  "unsupportedTools": ["challenge_spec", "red_team"],
36
37
  "restrictedTools": {
@@ -16,6 +16,9 @@ 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 filtering — used to exclude conflicted
20
+ * paths from other categories even though they no longer appear in `toTest`. */
21
+ toTestDeclared: string[];
19
22
  blockers: string[];
20
23
  };
21
24
  export declare function packageHandoff(spec: Spec, knowledge: ProjectKnowledge): Promise<HandoffPackage>;
@@ -174,7 +174,14 @@ export function normalizeChangedFilePath(value) {
174
174
  export function extractCanonicalFileOwnership(content) {
175
175
  const filesSection = sectionContentAtLevel(content, 'Files', 2);
176
176
  if (filesSection === null) {
177
- return { present: false, toModify: [], toCreate: [], toTest: [], blockers: [] };
177
+ return {
178
+ present: false,
179
+ toModify: [],
180
+ toCreate: [],
181
+ toTest: [],
182
+ toTestDeclared: [],
183
+ blockers: [],
184
+ };
178
185
  }
179
186
  const blockers = [];
180
187
  const addBlocker = (blocker) => {
@@ -215,6 +222,7 @@ export function extractCanonicalFileOwnership(content) {
215
222
  toCreate: toCreate.filter((path) => !conflicts.includes(path)),
216
223
  toModify: toModify.filter((path) => !conflicts.includes(path)),
217
224
  toTest: toTest.filter((path) => !conflicts.includes(path)),
225
+ toTestDeclared: toTest,
218
226
  blockers,
219
227
  };
220
228
  }
@@ -541,7 +549,7 @@ export async function packageHandoff(spec, knowledge) {
541
549
  const canonicalFiles = extractCanonicalFileOwnership(rawSpecContent);
542
550
  const canonicalOwnership = extractStrictCanonicalOwnership(ownershipContent);
543
551
  const workPlanOwnership = extractFileLevelWorkPlanOwnership(ownershipContent);
544
- const testOwnedPaths = new Set(canonicalFiles.toTest);
552
+ const testOwnedPaths = new Set(canonicalFiles.toTestDeclared);
545
553
  const explicitOwnership = canonicalOwnership.present
546
554
  ? {
547
555
  ...canonicalOwnership,
@@ -574,7 +582,9 @@ export async function packageHandoff(spec, knowledge) {
574
582
  }
575
583
  const blockers = [
576
584
  ...(criteria.length === 0 ? ['Missing BDD acceptance criteria'] : []),
577
- ...(toModify.length + toCreate.length === 0 ? ['Missing file ownership / target files'] : []),
585
+ ...(toModify.length + toCreate.length + canonicalFiles.toTest.length === 0
586
+ ? ['Missing file ownership / target files']
587
+ : []),
578
588
  ...(operational.testPlan.length === 0 ? ['Missing test plan'] : []),
579
589
  ...(operational.risks.length === 0 ? ['Missing risk analysis'] : []),
580
590
  ...(operational.ownership.length === 0 ? ['Missing ownership'] : []),
@@ -594,6 +604,7 @@ export async function packageHandoff(spec, knowledge) {
594
604
  criteria,
595
605
  filesToModify: toModify,
596
606
  filesToCreate: toCreate,
607
+ filesToTest: canonicalFiles.toTest,
597
608
  ownership: operational.ownership,
598
609
  testPlan: operational.testPlan,
599
610
  risks: operational.risks,
@@ -626,6 +637,10 @@ function renderPersistedHandoff(pkg) {
626
637
  '## Files To Create',
627
638
  ...pkg.filesToCreate.map((filePath) => `- ${filePath}`),
628
639
  '',
640
+ '## Test Files',
641
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
642
+ ...(pkg.filesToTest ?? []).map((filePath) => `- ${filePath}`),
643
+ '',
629
644
  '## Ownership',
630
645
  ...pkg.ownership.map((item) => `- ${item}`),
631
646
  '',
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-aarch64-apple-darwin",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "9496b35ee4f02409d2ba5d5a32b07069f188bbe39b88ab0cc3a350fe476dce2a",
20
+ "artifactSha256": "d871c6912f7857fedb31608d895a4e80fbf550c18875d307cf068fa966412cb7",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-arm64.node.sbom.json",
24
- "sha256": "1e8ba252b6c59727c3572a4cc086f55900f1dfbe2f8b52ab01efbb566825bf27"
24
+ "sha256": "93613e9e650a12618265c467fd3007c96ad6c261dcf373ff321d70210c1fdf90"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
28
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "shwkLDoc3YH1TfCx9BXJ3sWZFkQnmUw5PF5ix0NUQIJ9zy79t1+97tCj+XxYMHr5/aEdAleDSI14AHARpTb+AQ=="
37
+ "value": "5A14AujfQn9F0F6V4dCbHhSlzyWfH43wAF+8tSzLXg0t7+yELQKNNH8XqNGSqL9qGHPVxSYeTu1nh/3qQECxBQ=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "9496b35ee4f02409d2ba5d5a32b07069f188bbe39b88ab0cc3a350fe476dce2a"
14
+ "content": "d871c6912f7857fedb31608d895a4e80fbf550c18875d307cf068fa966412cb7"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-x86_64-apple-darwin",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "8835b07d4b8a9d96c2c38d5ba7a0ee31f556a68bab2c49f3c397d813a0b467e9",
20
+ "artifactSha256": "2e160dbfb5616b778ea6bc1b85b6663ae9618c664824498e0089a3b82353923e",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-x64.node.sbom.json",
24
- "sha256": "cd3fde2fa5c346e6f6b4ee377eec73e63ac20ae85d6793769c33f49ce884e181"
24
+ "sha256": "b4aa09e9d3bc3d5f4d0d80953f4d32389aa40fafabcac6895ebd296c4a2f6873"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
28
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "BQIqLTSOP1v1gEBU6wBRH9d2G+81wpqFTtpxI1ObAfMEv22/HmXMhDieRK7ijSdhaJ0OwRE3qprfFqbYJ30pAg=="
37
+ "value": "xN3AVrLnDNmagcrLzUS+voWOuOHZhY4+i+nfep/66x39IdztoQEqh/jF1H/P5qxnIwGFuSztuCS3cG0pAsRqCw=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "8835b07d4b8a9d96c2c38d5ba7a0ee31f556a68bab2c49f3c397d813a0b467e9"
14
+ "content": "2e160dbfb5616b778ea6bc1b85b6663ae9618c664824498e0089a3b82353923e"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-aarch64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "aa7ba305602ab0cc30ed8859ae7b8aea49fc319161d583a84a39c43fc3080b2d",
19
+ "artifactSha256": "c688e223eaed377810f13b4fb59b95269c6ac386e9e22122012322aa20b4119f",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-gnu.node.sbom.json",
23
- "sha256": "70863618fef07e482c7e5b70b7ec0f2eb86aeabb3639b458364d99be726d02b3"
23
+ "sha256": "05e6cde28bdf46282c2024bec9491908e67cf0875a1043a879533fe26e2acf6c"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "kwHa3R8NyX8dZ2Bb2+5+fMVTipEy8C0oHJ0P0LadjVhd5KJaXqfLPIu6a+rUkq9v/j1AUievoDE/BhgN8ukzBA=="
36
+ "value": "evvZQIYp2VmYUaaLu8nK5yLjTSms9hMRYoF4zM3qsCHwLLKRThOR+KrFgZ9ySZk6WRWx9CE8F/c+pKFRi/7nBg=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "aa7ba305602ab0cc30ed8859ae7b8aea49fc319161d583a84a39c43fc3080b2d"
14
+ "content": "c688e223eaed377810f13b4fb59b95269c6ac386e9e22122012322aa20b4119f"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-aarch64-unknown-linux-musl",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "d767b6ef1ec48f8bd745e02d39a53ef0efa052a15c3370ba65d3365e817cf454",
19
+ "artifactSha256": "ffe6b8382aded44408171166a385d31d25fa6a95919c14ec73ca5197351da8ac",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-musl.node.sbom.json",
23
- "sha256": "cf84110894384279fa1712a7b582767dd1dbebc72c1f4d3b53937d45109edc19"
23
+ "sha256": "6612f0831ad90d8d69aa88bbc53658d5dc55d5ff3e337e4253cb8943c7471aa5"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "0jHhH3Ng3cOPbyiCfBZqdMVbp7i3tP7JnViKwaJqEF65k1M4NTootCYDahfaxcOPQbdyywqgoGBn9D/c8x6dAA=="
36
+ "value": "3AhxDy080JazcjbYv9SH3w6tpj4iKKLlhI95pAy1/VQ8c9iDEDLmTfFaQv4R1FXjEAUSqZ/hYZEAQ0A3XpQPCA=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "d767b6ef1ec48f8bd745e02d39a53ef0efa052a15c3370ba65d3365e817cf454"
14
+ "content": "ffe6b8382aded44408171166a385d31d25fa6a95919c14ec73ca5197351da8ac"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-x86_64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "121e0cde6094d4812a1003f5e8d271c73180f87253d242c0ef2a3ce020114fb2",
19
+ "artifactSha256": "c1aeb15763bf3ee0b2d37ac694340fe65cfc106f95f6813c2e188c099c826013",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-gnu.node.sbom.json",
23
- "sha256": "2fe67e0205c5a0893ab618f92cbe53b862b286018e30ebd93a4bb35570d9e53f"
23
+ "sha256": "cd651b3c7af8a03fb3725d6342ee679dfef8272b65bc28e9f523dbfb88fa0ed8"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "PANQkfk6g7pqHmExCM2voq4U2WCuJX1cbaWm8K4T/QCPNzWE4TmGoG5vQN4k80VCIyjTFz5IA5Ope+XmNhnZCA=="
36
+ "value": "T9ypzN3DZ+ks4rQIjeuMKqxHHxGc7Qm/ep9zyVEsU6BvzVjOaiZijDkJXsiaNS8AqfrZkmnr6I/HtWNCqiqjCw=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "121e0cde6094d4812a1003f5e8d271c73180f87253d242c0ef2a3ce020114fb2"
14
+ "content": "c1aeb15763bf3ee0b2d37ac694340fe65cfc106f95f6813c2e188c099c826013"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-x86_64-unknown-linux-musl",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "8bca20fd7b4458f07f9993babe7ae9417bbce0f8dadac3cd6e723bfe5162e405",
19
+ "artifactSha256": "d44f03ecaed34427ca6ed682ce695f432d25eac3366fc5e779cfa78fe39d504b",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-musl.node.sbom.json",
23
- "sha256": "d6638d7152102d2ba32851fd2df269e4e2a2a2ddc5fc788f4602c0dd22c0ae42"
23
+ "sha256": "86d8219cdb5f5205d458cfa205ef619f68997f7a414f04a3a30f53704650b488"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "vZ9UA5RzHSuz+/P18RorLLyH92erubxrJwq4nW766XwepyzlM0m8ol3QYfyrvYvHy4oP9ptee40YvsmexCQcBg=="
36
+ "value": "O6Ay8rgviCK8bLJJbkQAsX9msRJoCxB2jkgpY6+v+7oyVohsZ3hKly1kFnQ35WRbibF4l2TBchxZI7IlKbAgCg=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "8bca20fd7b4458f07f9993babe7ae9417bbce0f8dadac3cd6e723bfe5162e405"
14
+ "content": "d44f03ecaed34427ca6ed682ce695f432d25eac3366fc5e779cfa78fe39d504b"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-aarch64-pc-windows-msvc",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "dbc7bc2092e9280e9cbd9c18d472acc57b171fb51b34ac403d36858e460a5558",
19
+ "artifactSha256": "9a10e393e1b0aad7856de5973ea8efb018513bcb4e2c47ddb013be9bda7e3bda",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.win32-arm64-msvc.node.sbom.json",
23
- "sha256": "ac0dfa26e7466da91c35ffff0b44eddfe0e871fb4ba4e2527d74b7e6e4ad2166"
23
+ "sha256": "38f38493f6013f50daff7808dcbbab81133b141bce61cba430e7a07fe9a89fc2"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "dXDAyNUV0maapcjOspyRQByaq39viQeMYq7iypA8UC9cUqcvOa33hojUp056RIkG+9dtu4wTFGO1GzF2oPDNCQ=="
36
+ "value": "ktHCgTSn2Br8NhGf6Pjz5fCP38a9sGluOqs617pwRXymMiUBu2GNjvyp7mLqk2gY/L8KAbzvF6FHoqEVDzb9AA=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "dbc7bc2092e9280e9cbd9c18d472acc57b171fb51b34ac403d36858e460a5558"
14
+ "content": "9a10e393e1b0aad7856de5973ea8efb018513bcb4e2c47ddb013be9bda7e3bda"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
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.1",
4
- "engineVersion": "5.3.1",
5
- "buildId": "1-5.3.1-x86_64-pc-windows-msvc",
3
+ "cliVersion": "5.3.2",
4
+ "engineVersion": "5.3.2",
5
+ "buildId": "1-5.3.2-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": "5d65e9be51ed1f1a391064fbf8892d3ac570c774854b36487d430ee7e7b0b5c8",
19
+ "artifactSha256": "4a41383ea29c9dd64a668143e206b4af1859ba6f35b79fdeb7ea8f812113811c",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.win32-x64-msvc.node.sbom.json",
23
- "sha256": "6563cbe0310464b49325b14f1e7e17a94e476496dd9bd1f522dafabac5da5d18"
23
+ "sha256": "f96dbf4fd6d9cab1aa9b90057325829de42e018dfa2bf4220c78c9bbfab0f9c5"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "cff22e20c8f95a4081485b852254fa5fbe1532ef",
27
+ "sourceCommit": "30226657c1e66411b6ff233c2ea82e47573d533a",
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": "z2Hd9RD31bHF9HmmWsymR4XVqxLPiNSrdCvtWBUXEEBlKdk8rEde8ZPd3BEJCeEsdX0akECDyN7LenOYuFirAQ=="
36
+ "value": "vZ49hewESnK5idVecQPyBFUD+GPcbfa0ihzAKkxuqBSsyVEWNFGaGU4c/rzvXD6D3SKnApFEM3vZ9D2uCfSjDA=="
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.1",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.2",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.1",
10
+ "version": "5.3.2",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "5d65e9be51ed1f1a391064fbf8892d3ac570c774854b36487d430ee7e7b0b5c8"
14
+ "content": "4a41383ea29c9dd64a668143e206b4af1859ba6f35b79fdeb7ea8f812113811c"
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.1",
1109
+ "ref": "pkg:cargo/planu-core@5.3.2",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",
@@ -1,3 +1,4 @@
1
- import type { ToolResult, PackageHandoffInput } from '../types/index.js';
1
+ import type { ToolResult, PackageHandoffInput, HandoffPackage } from '../types/index.js';
2
+ export declare function formatHandoff(pkg: HandoffPackage): string;
2
3
  export declare function handlePackageHandoff(args: PackageHandoffInput): Promise<ToolResult>;
3
4
  //# sourceMappingURL=package-handoff.d.ts.map
@@ -8,7 +8,7 @@ import { appendTransitionEvent } from '../storage/transition-log.js';
8
8
  import { formatProjectGraphContext, queryProjectGraphSlice, } from '../engine/project-graph/index.js';
9
9
  import { analyzeMinimalImplementation, loadMinimalImplementationPolicy, } from '../engine/minimality/index.js';
10
10
  // ── Formatting helpers ───────────────────────────────────────────────────────
11
- function formatHandoff(pkg) {
11
+ export function formatHandoff(pkg) {
12
12
  const lines = [];
13
13
  lines.push(`# Implementation Handoff Package — ${pkg.specId}`);
14
14
  lines.push('');
@@ -59,6 +59,19 @@ function formatHandoff(pkg) {
59
59
  lines.push('_(None identified)_');
60
60
  }
61
61
  lines.push('');
62
+ lines.push('## Test Files');
63
+ lines.push('');
64
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
65
+ const filesToTest = pkg.filesToTest ?? [];
66
+ if (filesToTest.length > 0) {
67
+ for (const f of filesToTest) {
68
+ lines.push(`- ${f}`);
69
+ }
70
+ }
71
+ else {
72
+ lines.push('_(None identified)_');
73
+ }
74
+ lines.push('');
62
75
  lines.push('## Ownership');
63
76
  lines.push('');
64
77
  if (pkg.ownership.length > 0) {
@@ -152,7 +165,9 @@ function buildHandoffSummaryText(args) {
152
165
  if (args.pkg.contextHash) {
153
166
  lines.push(`Context Hash: ${args.pkg.contextHash}`);
154
167
  }
155
- lines.push(`Counts: ${String(args.pkg.criteria.length)} criteria, ${String(args.pkg.filesToModify.length)} files to modify, ${String(args.pkg.filesToCreate.length)} files to create, ${String(args.pkg.testPlan.length)} tests, ${String(args.pkg.risks.length)} risks.`);
168
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
169
+ const filesToTestCount = (args.pkg.filesToTest ?? []).length;
170
+ lines.push(`Counts: ${String(args.pkg.criteria.length)} criteria, ${String(args.pkg.filesToModify.length)} files to modify, ${String(args.pkg.filesToCreate.length)} files to create, ${String(filesToTestCount)} files to test, ${String(args.pkg.testPlan.length)} tests, ${String(args.pkg.risks.length)} risks.`);
156
171
  if (args.topBlockers.length > 0) {
157
172
  lines.push(`Top blockers: ${args.topBlockers.join('; ')}`);
158
173
  }
@@ -238,7 +253,8 @@ async function buildHandoffTokenWasteReport(pkg, knowledge, spec) {
238
253
  const context = analyzeContextPreflight({
239
254
  action: 'package_handoff',
240
255
  policy,
241
- candidates: [...pkg.filesToModify, ...pkg.filesToCreate].map((path) => ({
256
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
257
+ candidates: [...pkg.filesToModify, ...pkg.filesToCreate, ...(pkg.filesToTest ?? [])].map((path) => ({
242
258
  path,
243
259
  reason: 'Referenced by handoff package.',
244
260
  })),
@@ -297,7 +313,8 @@ async function buildMinimalImplementationReport(pkg, knowledge, spec, handoffTex
297
313
  specId: spec.id,
298
314
  specRisk: spec.risk,
299
315
  handoffText,
300
- files: [...pkg.filesToModify, ...pkg.filesToCreate].map((path) => ({ path, content: path })),
316
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
317
+ files: [...pkg.filesToModify, ...pkg.filesToCreate, ...(pkg.filesToTest ?? [])].map((path) => ({ path, content: path })),
301
318
  evidence,
302
319
  });
303
320
  }
@@ -421,6 +438,8 @@ export async function handlePackageHandoff(args) {
421
438
  criteria: pkgWithScore.criteria.length,
422
439
  filesToModify: pkgWithScore.filesToModify.length,
423
440
  filesToCreate: pkgWithScore.filesToCreate.length,
441
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- compat guard: callers may construct a HandoffPackage object predating this field
442
+ filesToTest: (pkgWithScore.filesToTest ?? []).length,
424
443
  ownership: pkgWithScore.ownership.length,
425
444
  testPlan: pkgWithScore.testPlan.length,
426
445
  risks: pkgWithScore.risks.length,
@@ -11,6 +11,7 @@ import { safe } from './safe-handler.js';
11
11
  import { handleCreateRule } from './create-rule.js';
12
12
  import { handleCreateSkill } from './create-skill.js';
13
13
  import { handleReconcileUniversalRules } from './reconcile-universal-rules.js';
14
+ import { registerBumpSpecVersionTool } from './bump-spec-version.js';
14
15
  import { registerPrompts } from '../prompts/index.js';
15
16
  import { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
16
17
  export { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
@@ -110,6 +111,7 @@ export function registerSddTools(server) {
110
111
  registerOnly(server, OFFICIAL_SDD_TOOL_SET, registerQualityComplianceGroupTools);
111
112
  registerOnly(server, OFFICIAL_SDD_TOOL_SET, registerInfraGroupTools);
112
113
  registerOnly(server, OFFICIAL_SDD_TOOL_SET, registerUniversalRulesTools);
114
+ registerOnly(server, OFFICIAL_SDD_TOOL_SET, registerBumpSpecVersionTool);
113
115
  registerPrompts(server);
114
116
  }
115
117
  //# sourceMappingURL=register-sdd-tools.js.map
@@ -32,6 +32,7 @@ export interface HandoffPackage {
32
32
  criteria: string[];
33
33
  filesToModify: string[];
34
34
  filesToCreate: string[];
35
+ filesToTest: string[];
35
36
  ownership: string[];
36
37
  testPlan: string[];
37
38
  risks: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.3.1",
3
+ "version": "5.3.2",
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.1",
39
- "@planu/core-darwin-x64": "5.3.1",
40
- "@planu/core-linux-arm64-gnu": "5.3.1",
41
- "@planu/core-linux-arm64-musl": "5.3.1",
42
- "@planu/core-linux-x64-gnu": "5.3.1",
43
- "@planu/core-linux-x64-musl": "5.3.1",
44
- "@planu/core-win32-arm64-msvc": "5.3.1",
45
- "@planu/core-win32-x64-msvc": "5.3.1"
38
+ "@planu/core-darwin-arm64": "5.3.2",
39
+ "@planu/core-darwin-x64": "5.3.2",
40
+ "@planu/core-linux-arm64-gnu": "5.3.2",
41
+ "@planu/core-linux-arm64-musl": "5.3.2",
42
+ "@planu/core-linux-x64-gnu": "5.3.2",
43
+ "@planu/core-linux-x64-musl": "5.3.2",
44
+ "@planu/core-win32-arm64-msvc": "5.3.2",
45
+ "@planu/core-win32-x64-msvc": "5.3.2"
46
46
  },
47
47
  "engines": {
48
48
  "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.1",
4
+ "version": "5.3.2",
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.1",
5
+ "version": "5.3.2",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",
@@ -35,7 +35,8 @@
35
35
  "triage_feedback",
36
36
  "resolve_feedback",
37
37
  "sync_feedback",
38
- "feedback_status"
38
+ "feedback_status",
39
+ "bump_spec_version"
39
40
  ],
40
41
  "resources": ["planu://specs/list", "planu://specs/{id}", "planu://project/status", "planu://roadmap"],
41
42
  "prompts": ["create-spec-from-idea", "review-spec-readiness", "generate-implementation-plan"],