@planu/cli 5.3.39 → 5.3.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## [5.3.40] - 2026-08-23
2
+
3
+ ### Bug Fixes
4
+ - fix(spec-1590): feed full multi-line BDD criteria to scope-contradiction check
5
+
6
+ ### Chores
7
+ - chore(planu): sync state after SPEC-1590 done
8
+ - chore(spec-1273): mark done and reconcile Files with regenerated artifacts
9
+
10
+
1
11
  ## [5.3.39] - 2026-08-23
2
12
 
3
13
  ### Bug Fixes
@@ -1,4 +1,5 @@
1
1
  import type { NormalizedAcceptanceCriterion } from '../../types/spec-format.js';
2
+ export declare function extractSectionCriteria(section: string): string[];
2
3
  export declare function extractNormalizedAcceptanceCriteria(raw: string, options?: {
3
4
  allowLegacyBodyFallback?: boolean;
4
5
  }): NormalizedAcceptanceCriterion[];
@@ -80,7 +80,7 @@ function extractOneCriterion(body) {
80
80
  const listItem = extractListItems(body).find((item) => !TECHNICAL_MARKER.test(item));
81
81
  return listItem ?? null;
82
82
  }
83
- function extractSectionCriteria(section) {
83
+ export function extractSectionCriteria(section) {
84
84
  const explicitBodies = extractExplicitCriterionBodies(section);
85
85
  if (explicitBodies.length > 0) {
86
86
  return explicitBodies
@@ -21,6 +21,7 @@ import { detectChallengeCapabilities, } from './challenge-spec/scenarios-utils.j
21
21
  import { collectCapabilityScenarios } from './challenge-spec/scenario-collector.js';
22
22
  import { buildChallengeReport, parseChallengeResolutionEvidence, } from './challenge-spec/challenge-report.js';
23
23
  import { extractListItems, findMarkdownSectionRange, } from '../engine/spec-format/markdown-sections.js';
24
+ import { extractSectionCriteria } from '../engine/spec-format/acceptance-criteria.js';
24
25
  const ALL_FOCUS_AREAS = [
25
26
  'failures',
26
27
  'concurrency',
@@ -219,7 +220,7 @@ export async function handleChallengeSpec(args, server) {
219
220
  const criteriaRange = findMarkdownSectionRange(specContent, 'Acceptance Criteria');
220
221
  const criteriaTexts = criteriaRange === null
221
222
  ? []
222
- : extractListItems(specContent.slice(criteriaRange.contentStart, criteriaRange.end));
223
+ : extractSectionCriteria(specContent.slice(criteriaRange.contentStart, criteriaRange.end));
223
224
  const contradictionResult = checkScopeContradictions(resolvedOutOfScope, criteriaTexts);
224
225
  for (const c of contradictionResult.contradictions) {
225
226
  failureScenarios.push({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.3.39",
3
+ "version": "5.3.40",
4
4
  "description": "Planu — MCP Server for Spec Driven Development. Cross-platform (Linux/macOS/Windows, x64/arm64).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
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.39",
5
+ "version": "5.3.40",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",