@planu/cli 5.3.5 → 5.3.6

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 (49) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/engine/hooks/handlers/on-impl-change.d.ts +17 -4
  3. package/dist/engine/hooks/handlers/on-impl-change.js +43 -44
  4. package/dist/engine/living-spec-analyzer.d.ts +5 -2
  5. package/dist/engine/living-spec-analyzer.js +5 -2
  6. package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
  7. package/dist/engine/planu-core.darwin-arm64.node.sbom.json +4 -4
  8. package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
  9. package/dist/engine/planu-core.darwin-x64.node.sbom.json +4 -4
  10. package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
  11. package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +4 -4
  12. package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
  13. package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +4 -4
  14. package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
  15. package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +4 -4
  16. package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
  17. package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +4 -4
  18. package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
  19. package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +4 -4
  20. package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
  21. package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +4 -4
  22. package/dist/engine/scope-boundaries/contradiction-checker.js +20 -13
  23. package/dist/engine/spec-format/acceptance-criteria.js +5 -2
  24. package/dist/engine/spec-migrator/filesystem-import.js +113 -73
  25. package/dist/engine/spec-migrator/frontmatter-parser.js +15 -13
  26. package/dist/tools/auto-reconcile.js +1 -1
  27. package/dist/tools/challenge-spec/challenge-report.js +1 -1
  28. package/dist/tools/init-project/portable-index-reconciler.js +2 -1
  29. package/dist/tools/reconcile-spec.js +3 -1
  30. package/dist/tools/safe-handler.js +0 -2
  31. package/dist/tools/start-hooks/engine.d.ts +2 -3
  32. package/dist/tools/start-hooks/engine.js +50 -33
  33. package/dist/tools/start-hooks.d.ts +1 -1
  34. package/dist/tools/start-hooks.js +1 -2
  35. package/dist/tools/tool-registry/group-infra.js +36 -0
  36. package/dist/tools/update-status/transition-guard.js +17 -4
  37. package/dist/types/file-hooks.d.ts +4 -6
  38. package/dist/types/index.d.ts +0 -1
  39. package/dist/types/index.js +0 -1
  40. package/dist/types/mcp.d.ts +0 -19
  41. package/dist/types/spec/core.d.ts +5 -0
  42. package/dist/types/spec/inputs.d.ts +16 -0
  43. package/package.json +9 -9
  44. package/planu-native.json +1 -1
  45. package/planu-plugin.json +1 -1
  46. package/dist/engine/hooks/agent-hook-migrator.d.ts +0 -9
  47. package/dist/engine/hooks/agent-hook-migrator.js +0 -140
  48. package/dist/types/hook-status-update.d.ts +0 -10
  49. package/dist/types/hook-status-update.js +0 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,35 @@
1
+ ## [5.3.6] - 2026-08-07
2
+
3
+ ### Bug Fixes
4
+ - fix(spec-1404): make filesystem hook watcher observation-only
5
+ - fix(spec-1427): recognize exposed/exposes as affirmative scope drift
6
+ - fix(spec-1427): stop scope-contradiction check from flagging boundary-preserving criteria
7
+ - fix(spec-1415): arbitrate independent Codex review, harden fence and marker matching
8
+ - fix(spec-1415): heal 35 truncated spec.md bodies with a one-shot script
9
+ - fix(spec-migrator): preserve actionable estimation during portable spec import
10
+ - fix(spec-1429): cover the two untested acceptance criteria and correct stale claims
11
+ - fix(tests): match CLAUDE.md's current canonical release gate commands
12
+ - fix(spec-format): stop discarding BDD criteria mixed with checklist bullets
13
+ - fix(challenge-spec): count the challenge gate requirement against distinct scenario names
14
+
15
+ ### Refactoring
16
+ - refactor(spec-migrator): extract importSpecEntry to satisfy max-lines-per-function
17
+
18
+ ### Chores
19
+ - chore(planu): redact absolute home path from public spec reproducers
20
+ - chore(planu): sync session state after SPEC-1403/1404 closure
21
+ - chore(spec-1404): mark done after independent implementation review
22
+ - chore(planu): move SPEC-1449/1450 to review with challenge resolution evidence
23
+ - chore(planu): file SPEC-1449/1450 dogfood bugs, sync session state
24
+ - chore(spec-1427): mark spec done and drop duplicate test ownership entry
25
+ - chore(spec-1415): reconcile Files scope for done gate, file SPEC-1447 dogfood bug
26
+ - chore(planu): approve SPEC-1415 after challenge/grounding gate fixes
27
+ - chore(planu): sync SDD lifecycle state for SPEC-1404/1415/1427, file SPEC-1445/1446
28
+ - chore(planu): mark SPEC-1429 and SPEC-1431 done, file SPEC-1443/1444
29
+ - chore(planu): sync session-context checkpoint
30
+ - chore(planu): close 8 verified-stale backlog specs
31
+
32
+
1
33
  ## [5.3.5] - 2026-08-06
2
34
 
3
35
  ### Bug Fixes
@@ -13,6 +13,18 @@ export declare function recordAnalysisTimestamp(specId: string, nowMs?: number,
13
13
  * Clear all rate limit timestamps (for testing).
14
14
  */
15
15
  export declare function clearRateLimitTimestamps(): void;
16
+ /**
17
+ * Get the cached result from the last on-impl-change analysis.
18
+ * If projectPath is omitted, returns the most recently set result across all projects.
19
+ */
20
+ export declare function getLastImplChangeResult(projectPath?: string): ImplChangeAnalysisResult | null;
21
+ /**
22
+ * Reset the on-impl-change diagnostic cache.
23
+ * If projectPath is provided, clears only that project's cache.
24
+ * If omitted, clears all projects.
25
+ * Useful for testing.
26
+ */
27
+ export declare function resetImplChangeCache(projectPath?: string): void;
16
28
  /**
17
29
  * Returns true for src/**\/*.ts files, excluding test files.
18
30
  * Test files are identified by the .test.ts or .spec.ts suffix.
@@ -26,9 +38,10 @@ export declare function findRelatedSpecs(filePath: string, specs: MinimalAnalyza
26
38
  /**
27
39
  * Handle an implementation file change event.
28
40
  * Fire-and-forget — all errors are caught internally.
29
- * When specs array and analyzeSpec function are provided, analyzes related specs.
30
- * When autoMarkDone is true (default), specs reaching 100% are automatically
31
- * transitioned to 'done' status via the spec store.
41
+ * When specs array and analyzeSpec function are provided, analyzes related specs
42
+ * and records the result as a diagnostic (see getLastImplChangeResult). It never
43
+ * transitions spec lifecycle status or writes spec.md — that requires an explicit
44
+ * reconcile_spec / update_status call by the user (SPEC-1404).
32
45
  */
33
- export declare function handleOnImplChange(event: WatcherEvent, projectPath: string, specs?: MinimalAnalyzableSpec[], analyzeSpec?: AnalyzeSpecFn, autoMarkDone?: boolean): Promise<ImplChangeAnalysisResult | undefined>;
46
+ export declare function handleOnImplChange(event: WatcherEvent, projectPath: string, specs?: MinimalAnalyzableSpec[], analyzeSpec?: AnalyzeSpecFn): Promise<ImplChangeAnalysisResult | undefined>;
34
47
  //# sourceMappingURL=on-impl-change.d.ts.map
@@ -1,8 +1,7 @@
1
1
  // engine/hooks/handlers/on-impl-change.ts — on-impl-change hook handler (SPEC-137)
2
2
  // Triggered when source implementation files (src/**/*.ts) change.
3
- // Analyzes related specs, updates completion percentage, auto-reconciles if all criteria met.
4
- import { hashProjectPath } from '../../../storage/base-store.js';
5
- const UPDATE_STATUS_MODULE = '../../../tools/update-status/index.js';
3
+ // Analyzes related specs and reports completion percentage as a diagnostic
4
+ // it never mutates spec lifecycle state (SPEC-1404).
6
5
  // ---------------------------------------------------------------------------
7
6
  // Rate limiter (per spec, 5 min cooldown)
8
7
  // ---------------------------------------------------------------------------
@@ -40,6 +39,38 @@ export function clearRateLimitTimestamps() {
40
39
  lastAnalysisTimestamps.clear();
41
40
  }
42
41
  // ---------------------------------------------------------------------------
42
+ // Diagnostic cache (per-project, mirrors on-push-check.ts's cache pattern)
43
+ // ---------------------------------------------------------------------------
44
+ const lastImplChangeResultMap = new Map();
45
+ /**
46
+ * Get the cached result from the last on-impl-change analysis.
47
+ * If projectPath is omitted, returns the most recently set result across all projects.
48
+ */
49
+ export function getLastImplChangeResult(projectPath) {
50
+ if (projectPath !== undefined) {
51
+ return lastImplChangeResultMap.get(projectPath) ?? null;
52
+ }
53
+ let last = null;
54
+ for (const v of lastImplChangeResultMap.values()) {
55
+ last = v;
56
+ }
57
+ return last;
58
+ }
59
+ /**
60
+ * Reset the on-impl-change diagnostic cache.
61
+ * If projectPath is provided, clears only that project's cache.
62
+ * If omitted, clears all projects.
63
+ * Useful for testing.
64
+ */
65
+ export function resetImplChangeCache(projectPath) {
66
+ if (projectPath !== undefined) {
67
+ lastImplChangeResultMap.delete(projectPath);
68
+ }
69
+ else {
70
+ lastImplChangeResultMap.clear();
71
+ }
72
+ }
73
+ // ---------------------------------------------------------------------------
43
74
  // Pattern matching
44
75
  // ---------------------------------------------------------------------------
45
76
  /**
@@ -98,11 +129,12 @@ export function findRelatedSpecs(filePath, specs) {
98
129
  /**
99
130
  * Handle an implementation file change event.
100
131
  * Fire-and-forget — all errors are caught internally.
101
- * When specs array and analyzeSpec function are provided, analyzes related specs.
102
- * When autoMarkDone is true (default), specs reaching 100% are automatically
103
- * transitioned to 'done' status via the spec store.
132
+ * When specs array and analyzeSpec function are provided, analyzes related specs
133
+ * and records the result as a diagnostic (see getLastImplChangeResult). It never
134
+ * transitions spec lifecycle status or writes spec.md — that requires an explicit
135
+ * reconcile_spec / update_status call by the user (SPEC-1404).
104
136
  */
105
- export async function handleOnImplChange(event, projectPath, specs, analyzeSpec, autoMarkDone = true) {
137
+ export async function handleOnImplChange(event, projectPath, specs, analyzeSpec) {
106
138
  try {
107
139
  if (!isSourceFile(event.path)) {
108
140
  return;
@@ -133,53 +165,20 @@ export async function handleOnImplChange(event, projectPath, specs, analyzeSpec,
133
165
  });
134
166
  if (result.completionPct === 100) {
135
167
  autoReconciled = true;
136
- console.warn(`[hooks] Auto-reconcile triggered for ${spec.id} (100% completion)`);
137
- if (autoMarkDone) {
138
- await markSpecDone(spec.id, projectPath);
139
- }
168
+ console.warn(`[hooks] Spec ${spec.id} reached 100% completion (diagnostic only)`);
140
169
  }
141
170
  }
142
- return {
171
+ const analysisResult = {
143
172
  changedFile: event.path,
144
173
  specsAnalyzed: results,
145
174
  autoReconciled,
146
175
  };
176
+ lastImplChangeResultMap.set(projectPath, analysisResult);
177
+ return analysisResult;
147
178
  }
148
179
  catch (err) {
149
180
  console.warn(`[hooks] on-impl-change error for ${event.path}:`, err);
150
181
  return undefined;
151
182
  }
152
183
  }
153
- // ---------------------------------------------------------------------------
154
- // Auto-done helper
155
- // ---------------------------------------------------------------------------
156
- /**
157
- * Mark a spec as 'done' in the spec store.
158
- * Errors are logged but not re-thrown so the hook pipeline continues.
159
- */
160
- async function markSpecDone(specId, projectPath) {
161
- try {
162
- const projectId = hashProjectPath(projectPath);
163
- // SPEC-720: Route through handleUpdateStatus so all gates (DoD/validate/QA) run.
164
- const updateStatusModule = (await import(UPDATE_STATUS_MODULE));
165
- const result = await updateStatusModule.handleUpdateStatus({
166
- specId,
167
- status: 'done',
168
- projectId,
169
- projectPath,
170
- trigger: 'fs-hook',
171
- actor: 'system',
172
- });
173
- if (result.isError) {
174
- const reason = result.content[0]?.type === 'text' ? result.content[0].text : 'gate blocked';
175
- console.warn(`[hooks] Auto-done blocked for ${specId} (gates): ${reason}`);
176
- }
177
- else {
178
- console.warn(`[hooks] Auto-done: spec ${specId} marked as 'done' via update_status gates`);
179
- }
180
- }
181
- catch (err) {
182
- console.warn(`[hooks] Auto-done failed for ${specId}:`, err);
183
- }
184
- }
185
184
  //# sourceMappingURL=on-impl-change.js.map
@@ -1,7 +1,10 @@
1
- import type { Spec, LivingSpecReport } from '../types/index.js';
1
+ import type { Spec, LivingSpecReport, AnalyzeLivingSpecOptions } from '../types/index.js';
2
2
  /**
3
3
  * Analyze a spec's acceptance criteria against the codebase.
4
4
  * Returns a per-criterion assessment and overall completion percentage.
5
+ * Does not write ## Progress into spec.md unless options.writeProgress is true —
6
+ * callers that document a Progress write (reconcile_spec, auto-reconcile) opt in
7
+ * explicitly (SPEC-1404).
5
8
  */
6
- export declare function analyzeLivingSpec(spec: Spec, projectPath: string): Promise<LivingSpecReport>;
9
+ export declare function analyzeLivingSpec(spec: Spec, projectPath: string, options?: AnalyzeLivingSpecOptions): Promise<LivingSpecReport>;
7
10
  //# sourceMappingURL=living-spec-analyzer.d.ts.map
@@ -12,8 +12,11 @@ const MAX_FILES_TO_SCAN = 80;
12
12
  /**
13
13
  * Analyze a spec's acceptance criteria against the codebase.
14
14
  * Returns a per-criterion assessment and overall completion percentage.
15
+ * Does not write ## Progress into spec.md unless options.writeProgress is true —
16
+ * callers that document a Progress write (reconcile_spec, auto-reconcile) opt in
17
+ * explicitly (SPEC-1404).
15
18
  */
16
- export async function analyzeLivingSpec(spec, projectPath) {
19
+ export async function analyzeLivingSpec(spec, projectPath, options = {}) {
17
20
  const criteria = await extractCriteria(spec);
18
21
  const assessments = [];
19
22
  // Pre-load file index for the project (cached for all criteria)
@@ -30,7 +33,7 @@ export async function analyzeLivingSpec(spec, projectPath) {
30
33
  // SPEC-1010 PR-C: Write living spec analysis into the unified spec.md
31
34
  // ## Progress section instead of a standalone progress.md file.
32
35
  let progressUpdated = false;
33
- if (spec.specPath) {
36
+ if (options.writeProgress === true && spec.specPath) {
34
37
  progressUpdated = await updateProgressInSpec(spec.specPath, assessments, completionPercent);
35
38
  }
36
39
  else if (spec.progressPath) {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "cliVersion": "5.3.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-aarch64-apple-darwin",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "27b347bd91597ca547e26cf2eb25f4e7d7d7ec83ed405511bf8b80a52075b6a5",
20
+ "artifactSha256": "c319951a5aff69954e19a04ccc2165fbbe7e334ca1ec42defd9bc81543748bd7",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-arm64.node.sbom.json",
24
- "sha256": "cdacedfbf96f09a8815ea3b5b293d4d688d0a1216d5ac8e309c3031703144b76"
24
+ "sha256": "5c09e19e2aed6fc51ffdbc569f291fbadf84d6fe76e9f889df7a0e8b2896b154"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
28
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "V5w31e1ARajB+tq5/Zuqn/I6AS9upApk4U+3MQudZRJNXMsp+LynzSTuHb8Eg9G6AiXJxt88ZRtqJbAo2b0DAg=="
37
+ "value": "eyypjiaqLdyOHXK4eND7lnJCagGpBRp5htIhZvkik7iU/KYdTS0Vfl0Wsl4XKo/sfoiY2gHaqf624PZABAK0DQ=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "27b347bd91597ca547e26cf2eb25f4e7d7d7ec83ed405511bf8b80a52075b6a5"
14
+ "content": "c319951a5aff69954e19a04ccc2165fbbe7e334ca1ec42defd9bc81543748bd7"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
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.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-x86_64-apple-darwin",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "7993a3dc2ff7947eb227812e88b329e870fd0e8b7b3ad152796bef8d77387745",
20
+ "artifactSha256": "3e9868d3264b3df31e81a6f16ed50b11e5438a7336b9f131b5d333d6e1704e97",
21
21
  "sbom": {
22
22
  "format": "CycloneDX-1.5",
23
23
  "path": "planu-core.darwin-x64.node.sbom.json",
24
- "sha256": "cc3be430ad14a4bb6f233e60c7fccb055079b3f3aa0208c6e6f8eca9ee47e7a3"
24
+ "sha256": "e2508d46acae3efb316207d0c15be64fc875207d0fc780f2530cc72f7db2652c"
25
25
  },
26
26
  "provenance": {
27
27
  "builder": "scripts/build-rust-local.sh",
28
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
28
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "lL4RDYXTj5JyMi4aPH4Dq9r7u45cD/onxAOOGeQJglIrLryYfLTgvUw0bCxLIExD4LghbskIpbMO5RoxilsTCA=="
37
+ "value": "cGf49U9+LuqEiQc9Ro+8XJHMfOm9AE6/tftEmeMVZIPUohMd+MpprFCMdAZu41VMhiu/MZb91+5phEaBIbmlCw=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "7993a3dc2ff7947eb227812e88b329e870fd0e8b7b3ad152796bef8d77387745"
14
+ "content": "3e9868d3264b3df31e81a6f16ed50b11e5438a7336b9f131b5d333d6e1704e97"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
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.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-aarch64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "58667d7bf48d685e0a68845bf986ab76d7669909994649fed71b76b5e19c0fd9",
19
+ "artifactSha256": "a057f9f806c472c60949ec962a7872ffed5d858e6e231d7864de285a2ae87ffe",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-gnu.node.sbom.json",
23
- "sha256": "e167309ef0c22da6bbb804b6e59c64a2777aba539a718cd9225f2a5ffe16253f"
23
+ "sha256": "8722f7dead83c0a64bbb596258edfa5e098f7289652a7317c4fc130a44b5debb"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
27
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "jPABgCINF4cuTxCuWa2h5suwGdPzU0lXP7oL45TvpMv8A1YP/Q5Lt4w/DIqRYYjlWzsqk228wu0O5f5V+S+kDw=="
36
+ "value": "rokl1fIAhfFkN+cVkmHqWJKL9V5rwP5iCJ2nFZ+n8+N3NwhIbxX6v/ZNjYXYH2sOwIx6aRFFd3EN1pBApwU/AQ=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "58667d7bf48d685e0a68845bf986ab76d7669909994649fed71b76b5e19c0fd9"
14
+ "content": "a057f9f806c472c60949ec962a7872ffed5d858e6e231d7864de285a2ae87ffe"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
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.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-aarch64-unknown-linux-musl",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "948e76211c8b7a4770c9f79e172184baf13fa7208a06cc149b6cd168ef5c1cf6",
19
+ "artifactSha256": "2ea8f19e0cc3365dd23cbe0e7fbf7767a5b5fa0f58e6a044d0f6fd0b39949d24",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-arm64-musl.node.sbom.json",
23
- "sha256": "fe1febc4c73090f46d5513ac83d98fa5fcc69b50b82aea2a9eb9bfc9943d9f58"
23
+ "sha256": "868d8d54cef201e1454ccf935e8fe7946e8543530803140d7b97c5886c4e4237"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
27
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "W8DaJ4zBO7CgzNQ8Ygt3Fsq76sLt2AZgzRzfZLN2cxvOEsTK/aS+KgM/JpSfKbuv45c7wBgM5jUvLSPIh/qTAw=="
36
+ "value": "tSU/uWkXwhZZ+29DcUXHWI9KYfGspNLieVr4sZzD0ds0qwTeYDSxioNMNRdCeNaieCT1nKNNM1jf+ftF2wU4DQ=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "948e76211c8b7a4770c9f79e172184baf13fa7208a06cc149b6cd168ef5c1cf6"
14
+ "content": "2ea8f19e0cc3365dd23cbe0e7fbf7767a5b5fa0f58e6a044d0f6fd0b39949d24"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
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.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-x86_64-unknown-linux-gnu",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "c1df1defdec7ecf99a65391798bb1452a0677193fc49778ebb621adf8f984da7",
19
+ "artifactSha256": "6353c0738f92143dbb24b5cc2312f76ad613c35a81c7f868f4a9bed4942cecd1",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-gnu.node.sbom.json",
23
- "sha256": "1fa7db3a02d7cd799a500eb378a41dacde4eb5f694916b49ad651658c24f3a9d"
23
+ "sha256": "608d97eda6a7982dde93f50d1d704d5753abb383835dc8795d7912d645158046"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
27
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "vtEQHO2zRWFl2vbnBxSjwxwT+VTgwuPDVxcYAoQaIBFNt3JSOeh/NwXfEmn43xQ66vvRW1wsu5mj5nIvz7B5DQ=="
36
+ "value": "dRBPmA3Yh3EfsVYIBGbjaECPAL9z/HerkHRzn5f7p30F97UEF2shfvVofKV01SNYcGB/hqa54ofvKq6GbZYWBg=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "c1df1defdec7ecf99a65391798bb1452a0677193fc49778ebb621adf8f984da7"
14
+ "content": "6353c0738f92143dbb24b5cc2312f76ad613c35a81c7f868f4a9bed4942cecd1"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
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.5",
4
- "engineVersion": "5.3.5",
5
- "buildId": "1-5.3.5-x86_64-unknown-linux-musl",
3
+ "cliVersion": "5.3.6",
4
+ "engineVersion": "5.3.6",
5
+ "buildId": "1-5.3.6-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": "0116080409d8d34a70bcd11545d83ef0055475bac5338e1390eb2694296f64e1",
19
+ "artifactSha256": "fc1ffffc7aa8178117d75efb21a21cbf47789de550aaa09010c6acbd22a3fa3f",
20
20
  "sbom": {
21
21
  "format": "CycloneDX-1.5",
22
22
  "path": "planu-core.linux-x64-musl.node.sbom.json",
23
- "sha256": "26de786cbe886f27871dba4af38506dbbefd7823503a3af1ec91e506b10efd41"
23
+ "sha256": "016bcd4176cb0c11f7fa2890b13bd882afcaea12cb92a3316586f421a379ab9b"
24
24
  },
25
25
  "provenance": {
26
26
  "builder": "scripts/build-rust-local.sh",
27
- "sourceCommit": "1ebfd1609a251513993d8635170963f6dab1420e",
27
+ "sourceCommit": "2dae5f5028632004802bad4c143eb86d8abba774",
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": "UVlIbDnlrHlchfrOyYRZu/Rj8qQQkbiaPKNf8ei7B1+rXkHdryVRUiC06/UP3aaydkDVXhdkLOQmvLw1JbnyDA=="
36
+ "value": "evwVuvJPRtdHXxc0wulqvQSSTm+IoeWgcuZuZjXnI2OZXQ+M9P4dAS/7ChFxoIul52xBCEB1MIZObdMynhWvCA=="
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.5",
7
+ "bom-ref": "pkg:cargo/planu-core@5.3.6",
8
8
  "type": "library",
9
9
  "name": "planu-core",
10
- "version": "5.3.5",
10
+ "version": "5.3.6",
11
11
  "hashes": [
12
12
  {
13
13
  "alg": "SHA-256",
14
- "content": "0116080409d8d34a70bcd11545d83ef0055475bac5338e1390eb2694296f64e1"
14
+ "content": "fc1ffffc7aa8178117d75efb21a21cbf47789de550aaa09010c6acbd22a3fa3f"
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.5",
1109
+ "ref": "pkg:cargo/planu-core@5.3.6",
1110
1110
  "dependsOn": [
1111
1111
  "pkg:cargo/core-foundation@0.10.1",
1112
1112
  "pkg:cargo/hmac@0.12.1",