@planu/cli 5.6.0 → 5.7.0

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 (43) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/.planu-build.json +1 -1
  3. package/dist/cli/commands/telemetry.d.ts +3 -0
  4. package/dist/cli/commands/telemetry.js +118 -0
  5. package/dist/cli/router.js +3 -1
  6. package/dist/config/environment-schema.json +14 -0
  7. package/dist/engine/contradiction-detector.d.ts +2 -1
  8. package/dist/engine/contradiction-detector.js +215 -0
  9. package/dist/engine/handoff-artifacts/schemas.js +4 -0
  10. package/dist/engine/housekeeping/legacy-planu-demolisher.d.ts +3 -0
  11. package/dist/engine/housekeeping/legacy-planu-demolisher.js +164 -0
  12. package/dist/engine/lifecycle-reconciliation.js +87 -40
  13. package/dist/engine/readiness-checker.js +13 -1
  14. package/dist/engine/telemetry/error-reporter.d.ts +9 -9
  15. package/dist/engine/telemetry/error-reporter.js +15 -34
  16. package/dist/engine/telemetry/event-envelope.d.ts +11 -0
  17. package/dist/engine/telemetry/event-envelope.js +124 -0
  18. package/dist/engine/telemetry/telemetry-client.d.ts +8 -1
  19. package/dist/engine/telemetry/telemetry-client.js +38 -20
  20. package/dist/engine/telemetry/telemetry-store.d.ts +15 -2
  21. package/dist/engine/telemetry/telemetry-store.js +73 -2
  22. package/dist/engine/validator/spec-compliance-runner.d.ts +2 -1
  23. package/dist/engine/validator/spec-compliance-runner.js +78 -1
  24. package/dist/index.js +26 -0
  25. package/dist/tools/challenge-spec.js +25 -10
  26. package/dist/tools/init-project/handler.js +2 -2
  27. package/dist/tools/init-project/legacy-planu.d.ts +2 -0
  28. package/dist/tools/init-project/legacy-planu.js +18 -0
  29. package/dist/tools/init-project/schedule-housekeeping.d.ts +2 -0
  30. package/dist/tools/init-project/schedule-housekeeping.js +8 -0
  31. package/dist/tools/reconcile-spec.js +29 -2
  32. package/dist/tools/register-spec-tools/analysis-tools.d.ts +7 -0
  33. package/dist/tools/register-spec-tools/analysis-tools.js +13 -1
  34. package/dist/tools/safe-handler.js +6 -12
  35. package/dist/types/handoff-artifacts.d.ts +1 -0
  36. package/dist/types/housekeeping.d.ts +34 -0
  37. package/dist/types/housekeeping.js +0 -1
  38. package/dist/types/scope.d.ts +23 -0
  39. package/dist/types/spec/inputs.d.ts +9 -0
  40. package/dist/types/telemetry.d.ts +39 -1
  41. package/dist/types/validation-evidence.d.ts +6 -0
  42. package/package.json +1 -1
  43. package/planu-plugin.json +1 -1
@@ -109,6 +109,8 @@ export interface UpdateStatusInput {
109
109
  * When true, the transition proceeds and qualityWarnings[] is written to spec.md frontmatter.
110
110
  */
111
111
  forceApprove?: boolean;
112
+ /** Marker set by reconcile_spec's declared-drift route; accepts the declared reason as reconciliation evidence in place of validation-report.json. */
113
+ declaredDriftKind?: 'architectural-premise';
112
114
  }
113
115
  /**
114
116
  * SPEC-769: Output from the readiness gate check in update_status(approved).
@@ -159,12 +161,19 @@ export interface GenerateChecklistInput {
159
161
  focus?: ChecklistCategory[];
160
162
  experienceLevel?: 'beginner' | 'expert';
161
163
  }
164
+ /** An orchestrator-declared drift that produces no auto-detectable file/scope change. */
165
+ export interface DeclaredSpecDrift {
166
+ kind: 'architectural-premise';
167
+ /** Why the implementation drifted from the approved premise. Minimum 100 characters. */
168
+ reason: string;
169
+ }
162
170
  export interface ReconcileSpecInput {
163
171
  specId: string;
164
172
  projectId: string;
165
173
  autoDetect?: boolean;
166
174
  livingSpec?: boolean;
167
175
  changes?: ReconcileChange[];
176
+ declaredDrift?: DeclaredSpecDrift;
168
177
  }
169
178
  export interface ClarifyRequirementsInput {
170
179
  projectId: string;
@@ -4,11 +4,47 @@ export interface GeoData {
4
4
  city: string;
5
5
  timezone: string;
6
6
  }
7
+ /** SPEC-1704: the six allowlisted schemaVersion-1 envelope event names. */
8
+ export type TelemetryEnvelopeEventName = 'installation_activated' | 'mcp_server_started' | 'mcp_tool_completed' | 'mcp_tool_failed' | 'spec_lifecycle_transitioned' | 'release_check_completed';
7
9
  export type TelemetryEventName = 'init_project' | 'create_spec' | 'tool_used' | 'tool_error' | 'tool_blocked'
8
10
  /** SPEC-705: Emitted when agent parallelism is downgraded due to host RAM constraints. */
9
11
  | 'ram_guardrail_downgrade'
10
12
  /** SPEC-727: Emitted when a panel is aborted because two specialists share the same (modelId, promptHash). */
11
- | 'panel_heterogeneity_violation';
13
+ | 'panel_heterogeneity_violation' | TelemetryEnvelopeEventName;
14
+ export type TelemetryEnvelopeResult = 'success' | 'error' | 'blocked' | 'cancelled';
15
+ export type TelemetryDurationBucket = 'lt_100ms' | '100ms_1s' | '1s_5s' | 'gte_5s';
16
+ export type TelemetryOperatingSystem = 'darwin' | 'linux' | 'win32' | 'other';
17
+ export type TelemetryMcpHost = 'claude-code' | 'claude-desktop' | 'cursor' | 'codex' | 'other' | 'unknown';
18
+ /** SPEC-1704: the exact, closed shape of a schemaVersion-1 telemetry event. */
19
+ export interface TelemetryEnvelopeV1 {
20
+ schemaVersion: 1;
21
+ eventId: string;
22
+ eventName: TelemetryEnvelopeEventName;
23
+ occurredAt: string;
24
+ anonymousInstallationId: string;
25
+ sessionId: string;
26
+ planuVersion: string;
27
+ toolName?: string;
28
+ result?: TelemetryEnvelopeResult;
29
+ durationBucket?: TelemetryDurationBucket;
30
+ operatingSystem: TelemetryOperatingSystem;
31
+ nodeMajor: number;
32
+ mcpHost: TelemetryMcpHost;
33
+ }
34
+ /** Caller-supplied fields for buildTelemetryEnvelope; unknown keys are rejected. */
35
+ export interface TelemetryEnvelopeInput {
36
+ anonymousInstallationId: string;
37
+ sessionId: string;
38
+ toolName?: string;
39
+ result?: TelemetryEnvelopeResult;
40
+ durationMs?: number;
41
+ mcpHost?: TelemetryMcpHost;
42
+ }
43
+ /** Injectable determinism for tests and the `planu telemetry show` command. */
44
+ export interface TelemetryEnvelopeBuildOptions {
45
+ uuid?: () => string;
46
+ clock?: () => Date;
47
+ }
12
48
  export interface TelemetryConfig {
13
49
  enabled: boolean;
14
50
  /** ISO timestamp of when the user was first shown the opt-in prompt */
@@ -17,6 +53,8 @@ export interface TelemetryConfig {
17
53
  consentVersion?: number;
18
54
  /** SPEC-572: Opt-in to cross-project Observatory aggregated insights (requires telemetry enabled) */
19
55
  enableObservatory?: boolean;
56
+ /** SPEC-1704: generated on enable, deleted on disable, regenerated fresh on the next enable. */
57
+ anonymousInstallationId?: string;
20
58
  }
21
59
  export interface TelemetryEvent {
22
60
  event: TelemetryEventName;
@@ -83,12 +83,18 @@ export interface PerScenarioResult {
83
83
  evidence: string[];
84
84
  unverifiable?: true;
85
85
  }
86
+ export interface DoneDriftMissingFileFinding {
87
+ kind: 'done-drift-missing-files';
88
+ specId: string;
89
+ missingPath: string;
90
+ }
86
91
  export interface SpecComplianceResult {
87
92
  dimensionScore: number;
88
93
  perScenario: PerScenarioResult[];
89
94
  command: string;
90
95
  evidenceSource?: 'frontmatter' | 'criteria' | 'none';
91
96
  ignoredCriteriaTitles?: string[];
97
+ doneDriftFindings?: DoneDriftMissingFileFinding[];
92
98
  }
93
99
  export interface EvidenceTestLink {
94
100
  path: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@planu/cli",
3
- "version": "5.6.0",
3
+ "version": "5.7.0",
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.6.0",
5
+ "version": "5.7.0",
6
6
  "icon": "assets/plugin/icon.svg",
7
7
  "command": ["npx", "@planu/cli@latest"],
8
8
  "packageName": "@planu/cli",