@boshu2/vibe-check 1.7.0 → 1.8.1

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 (98) hide show
  1. package/.agents/bundles/actionable-coaching-plan-2025-12-02.md +209 -0
  2. package/.agents/plans/git-forensics-enhancement-2025-12-05.md +493 -0
  3. package/.claude/skills/typescript-review.md +152 -0
  4. package/CHANGELOG.md +41 -5
  5. package/CLAUDE.md +85 -23
  6. package/Makefile +43 -19
  7. package/README.md +178 -172
  8. package/SECURITY.md +5 -1
  9. package/assets/logo-dark.svg +47 -0
  10. package/assets/logo.svg +47 -0
  11. package/claude-progress.json +28 -7
  12. package/claude-progress.txt +48 -0
  13. package/dist/analyzers/patterns.d.ts +62 -0
  14. package/dist/analyzers/patterns.d.ts.map +1 -0
  15. package/dist/analyzers/patterns.js +103 -0
  16. package/dist/analyzers/patterns.js.map +1 -0
  17. package/dist/analyzers/quality.d.ts +58 -0
  18. package/dist/analyzers/quality.d.ts.map +1 -0
  19. package/dist/analyzers/quality.js +114 -0
  20. package/dist/analyzers/quality.js.map +1 -0
  21. package/dist/analyzers/sessions.d.ts +45 -0
  22. package/dist/analyzers/sessions.d.ts.map +1 -0
  23. package/dist/analyzers/sessions.js +123 -0
  24. package/dist/analyzers/sessions.js.map +1 -0
  25. package/dist/cli.js +4 -0
  26. package/dist/cli.js.map +1 -1
  27. package/dist/commands/analyze.d.ts.map +1 -1
  28. package/dist/commands/analyze.js +5 -0
  29. package/dist/commands/analyze.js.map +1 -1
  30. package/dist/commands/forensics.d.ts +29 -0
  31. package/dist/commands/forensics.d.ts.map +1 -0
  32. package/dist/commands/forensics.js +213 -0
  33. package/dist/commands/forensics.js.map +1 -0
  34. package/dist/commands/index.d.ts +4 -0
  35. package/dist/commands/index.d.ts.map +1 -1
  36. package/dist/commands/index.js +11 -1
  37. package/dist/commands/index.js.map +1 -1
  38. package/dist/commands/insights.d.ts +3 -0
  39. package/dist/commands/insights.d.ts.map +1 -0
  40. package/dist/commands/insights.js +120 -0
  41. package/dist/commands/insights.js.map +1 -0
  42. package/dist/commands/pipeline.d.ts +3 -0
  43. package/dist/commands/pipeline.d.ts.map +1 -0
  44. package/dist/commands/pipeline.js +485 -0
  45. package/dist/commands/pipeline.js.map +1 -0
  46. package/dist/commands/profile.d.ts +0 -1
  47. package/dist/commands/profile.d.ts.map +1 -1
  48. package/dist/commands/profile.js +0 -4
  49. package/dist/commands/profile.js.map +1 -1
  50. package/dist/commands/session.d.ts +9 -0
  51. package/dist/commands/session.d.ts.map +1 -1
  52. package/dist/commands/session.js +95 -0
  53. package/dist/commands/session.js.map +1 -1
  54. package/dist/commands/sessions.d.ts +20 -0
  55. package/dist/commands/sessions.d.ts.map +1 -0
  56. package/dist/commands/sessions.js +201 -0
  57. package/dist/commands/sessions.js.map +1 -0
  58. package/dist/commands/watch.d.ts.map +1 -1
  59. package/dist/commands/watch.js +124 -7
  60. package/dist/commands/watch.js.map +1 -1
  61. package/dist/inner-loop/context-amnesia.d.ts +20 -0
  62. package/dist/inner-loop/context-amnesia.d.ts.map +1 -0
  63. package/dist/inner-loop/context-amnesia.js +249 -0
  64. package/dist/inner-loop/context-amnesia.js.map +1 -0
  65. package/dist/inner-loop/index.d.ts +39 -0
  66. package/dist/inner-loop/index.d.ts.map +1 -0
  67. package/dist/inner-loop/index.js +208 -0
  68. package/dist/inner-loop/index.js.map +1 -0
  69. package/dist/inner-loop/instruction-drift.d.ts +28 -0
  70. package/dist/inner-loop/instruction-drift.d.ts.map +1 -0
  71. package/dist/inner-loop/instruction-drift.js +260 -0
  72. package/dist/inner-loop/instruction-drift.js.map +1 -0
  73. package/dist/inner-loop/logging-only.d.ts +30 -0
  74. package/dist/inner-loop/logging-only.d.ts.map +1 -0
  75. package/dist/inner-loop/logging-only.js +264 -0
  76. package/dist/inner-loop/logging-only.js.map +1 -0
  77. package/dist/inner-loop/tests-passing-lie.d.ts +34 -0
  78. package/dist/inner-loop/tests-passing-lie.d.ts.map +1 -0
  79. package/dist/inner-loop/tests-passing-lie.js +213 -0
  80. package/dist/inner-loop/tests-passing-lie.js.map +1 -0
  81. package/dist/inner-loop/types.d.ts +111 -0
  82. package/dist/inner-loop/types.d.ts.map +1 -0
  83. package/dist/inner-loop/types.js +29 -0
  84. package/dist/inner-loop/types.js.map +1 -0
  85. package/dist/storage/index.d.ts +1 -0
  86. package/dist/storage/index.d.ts.map +1 -1
  87. package/dist/storage/index.js +11 -1
  88. package/dist/storage/index.js.map +1 -1
  89. package/dist/storage/spiral-history.d.ts +62 -0
  90. package/dist/storage/spiral-history.d.ts.map +1 -0
  91. package/dist/storage/spiral-history.js +265 -0
  92. package/dist/storage/spiral-history.js.map +1 -0
  93. package/docs/ARCHITECTURE.md +2 -10
  94. package/docs/FEATURES.md +340 -0
  95. package/docs/GAMIFICATION.md +19 -266
  96. package/docs/VIBE-ECOSYSTEM.md +12 -78
  97. package/feature-list.json +140 -88
  98. package/package.json +1 -1
@@ -7,6 +7,25 @@ exports.createWatchCommand = createWatchCommand;
7
7
  const commander_1 = require("commander");
8
8
  const chalk_1 = __importDefault(require("chalk"));
9
9
  const git_1 = require("../git");
10
+ const spiral_history_1 = require("../storage/spiral-history");
11
+ const inner_loop_1 = require("../inner-loop");
12
+ // Pattern detection regexes (same as metrics/spirals.ts)
13
+ const PATTERNS = {
14
+ VOLUME_CONFIG: /volume|mount|path|permission|readonly|pvc|storage/i,
15
+ SECRETS_AUTH: /secret|auth|oauth|token|credential|password|key/i,
16
+ API_MISMATCH: /api|version|field|spec|schema|crd|resource/i,
17
+ SSL_TLS: /ssl|tls|cert|fips|handshake|https/i,
18
+ IMAGE_REGISTRY: /image|pull|registry|docker|tag/i,
19
+ GITOPS_DRIFT: /drift|sync|argocd|reconcil|outof/i,
20
+ };
21
+ function detectPattern(messages) {
22
+ for (const [pattern, regex] of Object.entries(PATTERNS)) {
23
+ if (regex.test(messages)) {
24
+ return pattern;
25
+ }
26
+ }
27
+ return 'OTHER';
28
+ }
10
29
  const SPIRAL_THRESHOLD = 3; // commits before warning
11
30
  const POLL_INTERVAL = 5000; // 5 seconds
12
31
  const RECENT_WINDOW = 10; // track last N commits
@@ -37,6 +56,8 @@ async function runWatch(options) {
37
56
  lastCommitHash: null,
38
57
  recentCommits: [],
39
58
  spiralWarnings: new Map(),
59
+ lastInnerLoopWarning: null,
60
+ innerLoopIssueCount: 0,
40
61
  };
41
62
  // Get initial state
42
63
  const initialCommits = await (0, git_1.getCommits)(options.repo, '1 hour ago');
@@ -49,6 +70,8 @@ async function runWatch(options) {
49
70
  }
50
71
  // Check for existing spirals
51
72
  checkForSpirals(state, options.quiet);
73
+ // Check for inner-loop issues on initial load
74
+ await checkForInnerLoopIssues(options.repo, state, options.quiet);
52
75
  }
53
76
  // Poll for new commits
54
77
  const poll = async () => {
@@ -79,6 +102,8 @@ async function runWatch(options) {
79
102
  }
80
103
  // Check for spirals
81
104
  checkForSpirals(state, options.quiet);
105
+ // Check for inner-loop issues
106
+ await checkForInnerLoopIssues(options.repo, state, options.quiet);
82
107
  }
83
108
  }
84
109
  }
@@ -167,15 +192,107 @@ function displaySpiralWarning(component, fixes) {
167
192
  const duration = fixes.length > 1
168
193
  ? Math.round((fixes[0].date.getTime() - fixes[fixes.length - 1].date.getTime()) / 60000)
169
194
  : 0;
195
+ // Detect pattern from commit messages
196
+ const allMessages = fixes.map(c => c.message).join(' ');
197
+ const pattern = detectPattern(allMessages);
198
+ const patternName = (0, spiral_history_1.getPatternDisplayName)(pattern);
199
+ // Get personalized advice from history
200
+ const advice = (0, spiral_history_1.getAdvice)(pattern, component);
201
+ console.log('');
202
+ console.log(chalk_1.default.bold.yellow(' ⚠️ SPIRAL FORMING'));
203
+ console.log(chalk_1.default.yellow(` ${component} component (${patternName})`));
204
+ console.log(chalk_1.default.yellow(` ${fixes.length} fixes${duration > 0 ? `, ${duration} min` : ''}`));
205
+ console.log('');
206
+ // Show personalized history if available
207
+ if (advice && advice.yourHistory.times > 0) {
208
+ console.log(chalk_1.default.white(` Your history: ${advice.yourHistory.times} ${component} spirals, avg ${advice.yourHistory.avgDuration} min`));
209
+ if (advice.whatWorked.length > 0) {
210
+ const topFixes = advice.whatWorked.slice(0, 2)
211
+ .map(w => `${(0, spiral_history_1.getResolutionDisplayName)(w.resolution).toLowerCase()} (${w.times}x)`)
212
+ .join(', ');
213
+ console.log(chalk_1.default.white(` What worked: ${topFixes}`));
214
+ }
215
+ console.log('');
216
+ console.log(chalk_1.default.bold.cyan(` → ${advice.suggestion}`));
217
+ }
218
+ else {
219
+ // Generic advice for first-time spirals
220
+ console.log(chalk_1.default.gray(' Consider:'));
221
+ console.log(chalk_1.default.gray(' • Step back and write a test'));
222
+ console.log(chalk_1.default.gray(' • Check the docs or ask for help'));
223
+ console.log(chalk_1.default.gray(' • Take a 5-minute break'));
224
+ }
225
+ console.log('');
226
+ console.log(chalk_1.default.cyan('─'.repeat(60)));
227
+ // Record this spiral to history
228
+ (0, spiral_history_1.appendSpiral)(pattern, component, duration, fixes.length);
229
+ }
230
+ async function checkForInnerLoopIssues(repoPath, state, quiet) {
231
+ if (state.recentCommits.length < 3)
232
+ return;
233
+ try {
234
+ // Get commit stats for inner-loop analysis
235
+ const commitStats = await (0, git_1.getCommitStats)(repoPath, '1 hour ago');
236
+ // Convert commits to TimelineEvent format
237
+ const events = state.recentCommits.map((c, idx) => ({
238
+ hash: c.hash,
239
+ timestamp: c.date,
240
+ author: c.author,
241
+ subject: c.message,
242
+ type: c.type,
243
+ scope: c.scope,
244
+ sessionId: 'watch',
245
+ sessionPosition: idx,
246
+ gapMinutes: 0,
247
+ isRefactor: c.type === 'refactor',
248
+ spiralDepth: 0,
249
+ }));
250
+ // Run quick inner-loop check
251
+ const check = (0, inner_loop_1.quickInnerLoopCheck)(events, commitStats.filesPerCommit, commitStats.lineStatsPerCommit);
252
+ // Only show warning if issues changed
253
+ if (check.hasIssues && check.issueCount > state.innerLoopIssueCount) {
254
+ // Get full analysis for detailed warning
255
+ const analysis = (0, inner_loop_1.analyzeInnerLoop)(events, commitStats.filesPerCommit, commitStats.lineStatsPerCommit);
256
+ displayInnerLoopWarning(analysis);
257
+ state.innerLoopIssueCount = check.issueCount;
258
+ state.lastInnerLoopWarning = check.topIssue;
259
+ }
260
+ }
261
+ catch {
262
+ // Silently ignore errors
263
+ }
264
+ }
265
+ function displayInnerLoopWarning(analysis) {
266
+ const healthEmoji = analysis.summary.overallHealth === 'critical' ? '🚨' :
267
+ analysis.summary.overallHealth === 'warning' ? '⚠️' : '✅';
268
+ const healthColor = analysis.summary.overallHealth === 'critical' ? chalk_1.default.red :
269
+ analysis.summary.overallHealth === 'warning' ? chalk_1.default.yellow : chalk_1.default.green;
170
270
  console.log('');
171
- console.log(chalk_1.default.bold.yellow(' ⚠️ SPIRAL DETECTED'));
172
- console.log(chalk_1.default.yellow(` Component: ${component}`));
173
- console.log(chalk_1.default.yellow(` Fixes: ${fixes.length} commits${duration > 0 ? `, ${duration} min` : ''}`));
271
+ console.log(healthColor(` ${healthEmoji} INNER LOOP ${analysis.summary.overallHealth.toUpperCase()}`));
174
272
  console.log('');
175
- console.log(chalk_1.default.gray(' Consider:'));
176
- console.log(chalk_1.default.gray(' • Step back and write a test'));
177
- console.log(chalk_1.default.gray(' Check the docs or ask for help'));
178
- console.log(chalk_1.default.gray(' • Take a 5-minute break'));
273
+ // Show detected issues
274
+ if (analysis.testsPassingLie.detected) {
275
+ console.log(chalk_1.default.red(` 🤥 ${analysis.testsPassingLie.message}`));
276
+ }
277
+ if (analysis.contextAmnesia.detected) {
278
+ console.log(chalk_1.default.yellow(` 🧠 ${analysis.contextAmnesia.message}`));
279
+ }
280
+ if (analysis.instructionDrift.detected) {
281
+ console.log(chalk_1.default.yellow(` 🎯 ${analysis.instructionDrift.message}`));
282
+ }
283
+ if (analysis.loggingOnly.detected) {
284
+ console.log(chalk_1.default.yellow(` 🔍 ${analysis.loggingOnly.message}`));
285
+ }
286
+ // Show top recommendation
287
+ if (analysis.recommendations.length > 0) {
288
+ console.log('');
289
+ console.log(chalk_1.default.bold.cyan(` → ${analysis.recommendations[0]}`));
290
+ }
291
+ // Emergency protocol for critical issues
292
+ if (analysis.summary.overallHealth === 'critical') {
293
+ console.log('');
294
+ console.log(chalk_1.default.red.bold(' STOP → git status → backup → start simple'));
295
+ }
179
296
  console.log('');
180
297
  console.log(chalk_1.default.cyan('─'.repeat(60)));
181
298
  }
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Context Amnesia Detector
3
+ *
4
+ * Detects when AI forgets previous instructions and:
5
+ * - Reverts intentional changes
6
+ * - Re-implements code that was just deleted
7
+ * - Repeats the same fix multiple times
8
+ *
9
+ * This is a key "Inner Loop Disaster" in vibe coding.
10
+ */
11
+ import { TimelineEvent } from '../types';
12
+ import { ContextAmnesiaResult, InnerLoopConfig } from './types';
13
+ /**
14
+ * Detect context amnesia patterns in commit history.
15
+ */
16
+ export declare function detectContextAmnesia(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
17
+ additions: number;
18
+ deletions: number;
19
+ }>, config?: Partial<InnerLoopConfig>): ContextAmnesiaResult;
20
+ //# sourceMappingURL=context-amnesia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-amnesia.d.ts","sourceRoot":"","sources":["../../src/inner-loop/context-amnesia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,oBAAoB,EAEpB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAajB;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACzE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,oBAAoB,CAuDtB"}
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ /**
3
+ * Context Amnesia Detector
4
+ *
5
+ * Detects when AI forgets previous instructions and:
6
+ * - Reverts intentional changes
7
+ * - Re-implements code that was just deleted
8
+ * - Repeats the same fix multiple times
9
+ *
10
+ * This is a key "Inner Loop Disaster" in vibe coding.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.detectContextAmnesia = detectContextAmnesia;
14
+ const date_fns_1 = require("date-fns");
15
+ const types_1 = require("./types");
16
+ /**
17
+ * Detect context amnesia patterns in commit history.
18
+ */
19
+ function detectContextAmnesia(events, filesPerCommit, lineStatsPerCommit, config = {}) {
20
+ const cfg = { ...types_1.DEFAULT_INNER_LOOP_CONFIG, ...config };
21
+ const incidents = [];
22
+ if (events.length < 2) {
23
+ return {
24
+ detected: false,
25
+ incidents: [],
26
+ totalIncidents: 0,
27
+ totalTimeWasted: 0,
28
+ message: 'Not enough commits to detect context amnesia',
29
+ };
30
+ }
31
+ // Build enriched commit data
32
+ const commits = events.map((e) => ({
33
+ hash: e.hash,
34
+ message: e.subject,
35
+ timestamp: e.timestamp,
36
+ scope: e.scope,
37
+ files: filesPerCommit.get(e.hash) || [],
38
+ additions: lineStatsPerCommit.get(e.hash)?.additions || 0,
39
+ deletions: lineStatsPerCommit.get(e.hash)?.deletions || 0,
40
+ type: e.type,
41
+ }));
42
+ // Sort by timestamp ascending
43
+ commits.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
44
+ // Detection strategies
45
+ const revertIncidents = detectReverts(commits, cfg);
46
+ const reimplementIncidents = detectReimplementation(commits, cfg);
47
+ const repeatedFixIncidents = detectRepeatedFixes(commits, cfg);
48
+ incidents.push(...revertIncidents, ...reimplementIncidents, ...repeatedFixIncidents);
49
+ // Calculate total time wasted
50
+ const totalTimeWasted = incidents.reduce((sum, i) => sum + i.gapMinutes, 0);
51
+ // Generate message
52
+ const detected = incidents.length > 0;
53
+ let message = '';
54
+ if (detected) {
55
+ const types = new Set(incidents.map((i) => i.type));
56
+ const typeStr = Array.from(types).join(', ');
57
+ message = `🧠 Context amnesia detected: ${incidents.length} incident${incidents.length > 1 ? 's' : ''} (${typeStr}). ~${totalTimeWasted}m potentially wasted.`;
58
+ }
59
+ return {
60
+ detected,
61
+ incidents: incidents.slice(0, 10), // Top 10
62
+ totalIncidents: incidents.length,
63
+ totalTimeWasted,
64
+ message,
65
+ };
66
+ }
67
+ /**
68
+ * Detect explicit reverts or undo patterns.
69
+ */
70
+ function detectReverts(commits, config) {
71
+ const incidents = [];
72
+ // Patterns that indicate a revert
73
+ const revertPatterns = [
74
+ /revert/i,
75
+ /undo/i,
76
+ /rollback/i,
77
+ /back\s*out/i,
78
+ /restore\s+previous/i,
79
+ ];
80
+ for (let i = 1; i < commits.length; i++) {
81
+ const commit = commits[i];
82
+ const isRevert = revertPatterns.some((p) => p.test(commit.message));
83
+ if (isRevert) {
84
+ // Find what was reverted (look back within window)
85
+ const windowStart = new Date(commit.timestamp.getTime() - config.amnesiaWindowMinutes * 60 * 1000);
86
+ // Find commits in window that touch same files
87
+ for (let j = i - 1; j >= 0; j--) {
88
+ const original = commits[j];
89
+ if (original.timestamp < windowStart)
90
+ break;
91
+ const sharedFiles = commit.files.filter((f) => original.files.includes(f));
92
+ if (sharedFiles.length > 0) {
93
+ const gap = (0, date_fns_1.differenceInMinutes)(commit.timestamp, original.timestamp);
94
+ incidents.push({
95
+ type: 'revert',
96
+ originalCommit: {
97
+ hash: original.hash,
98
+ message: original.message,
99
+ timestamp: original.timestamp,
100
+ },
101
+ repeatCommit: {
102
+ hash: commit.hash,
103
+ message: commit.message,
104
+ timestamp: commit.timestamp,
105
+ },
106
+ scope: commit.scope || original.scope,
107
+ filesAffected: sharedFiles,
108
+ gapMinutes: gap,
109
+ description: `Reverted changes from ${gap}m ago`,
110
+ });
111
+ break; // Only count once per revert
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return incidents;
117
+ }
118
+ /**
119
+ * Detect reimplementation: code deleted then similar code re-added.
120
+ */
121
+ function detectReimplementation(commits, config) {
122
+ const incidents = [];
123
+ // Track significant deletions
124
+ const deletions = [];
125
+ for (const commit of commits) {
126
+ // Significant deletion: more deletions than additions
127
+ if (commit.deletions > commit.additions && commit.deletions > 10) {
128
+ deletions.push({
129
+ commit,
130
+ files: commit.files,
131
+ linesDeleted: commit.deletions,
132
+ });
133
+ }
134
+ }
135
+ // Look for later commits that re-add similar content to same files
136
+ for (const deletion of deletions) {
137
+ const windowEnd = new Date(deletion.commit.timestamp.getTime() + config.amnesiaWindowMinutes * 60 * 1000);
138
+ for (const commit of commits) {
139
+ // Must be after the deletion
140
+ if (commit.timestamp <= deletion.commit.timestamp)
141
+ continue;
142
+ if (commit.timestamp > windowEnd)
143
+ continue;
144
+ // Must touch same files with additions
145
+ const sharedFiles = commit.files.filter((f) => deletion.files.includes(f));
146
+ if (sharedFiles.length === 0)
147
+ continue;
148
+ // Must have significant additions (reimplementing)
149
+ if (commit.additions < deletion.linesDeleted * 0.5)
150
+ continue;
151
+ const gap = (0, date_fns_1.differenceInMinutes)(commit.timestamp, deletion.commit.timestamp);
152
+ // Check if this looks like reimplementation vs intentional refactor
153
+ // Refactors usually have "refactor" in message
154
+ if (/refactor/i.test(commit.message))
155
+ continue;
156
+ incidents.push({
157
+ type: 'reimplementation',
158
+ originalCommit: {
159
+ hash: deletion.commit.hash,
160
+ message: deletion.commit.message,
161
+ timestamp: deletion.commit.timestamp,
162
+ },
163
+ repeatCommit: {
164
+ hash: commit.hash,
165
+ message: commit.message,
166
+ timestamp: commit.timestamp,
167
+ },
168
+ scope: commit.scope || deletion.commit.scope,
169
+ filesAffected: sharedFiles,
170
+ gapMinutes: gap,
171
+ description: `Deleted ${deletion.linesDeleted} lines, then re-added ${commit.additions} lines ${gap}m later`,
172
+ });
173
+ }
174
+ }
175
+ return incidents;
176
+ }
177
+ /**
178
+ * Detect repeated fixes: same area fixed multiple times in short window.
179
+ */
180
+ function detectRepeatedFixes(commits, config) {
181
+ const incidents = [];
182
+ // Group fix commits by scope/files
183
+ const fixCommits = commits.filter((c) => c.type === 'fix');
184
+ // Track fixes per scope within time window
185
+ const scopeFixes = new Map();
186
+ for (const fix of fixCommits) {
187
+ const scope = fix.scope || fix.files[0] || 'unknown';
188
+ if (!scopeFixes.has(scope)) {
189
+ scopeFixes.set(scope, []);
190
+ }
191
+ scopeFixes.get(scope).push(fix);
192
+ }
193
+ // Find scopes with 3+ fixes in window (beyond normal spiral detection)
194
+ for (const [scope, fixes] of scopeFixes) {
195
+ if (fixes.length < 3)
196
+ continue;
197
+ // Check if messages are similar (forgot what was tried)
198
+ for (let i = 0; i < fixes.length - 1; i++) {
199
+ const current = fixes[i];
200
+ const next = fixes[i + 1];
201
+ const gap = (0, date_fns_1.differenceInMinutes)(next.timestamp, current.timestamp);
202
+ if (gap > config.amnesiaWindowMinutes)
203
+ continue;
204
+ // Check message similarity
205
+ const similarity = calculateSimilarity(current.message, next.message);
206
+ if (similarity > config.similarityThreshold) {
207
+ incidents.push({
208
+ type: 'forgotten_change',
209
+ originalCommit: {
210
+ hash: current.hash,
211
+ message: current.message,
212
+ timestamp: current.timestamp,
213
+ },
214
+ repeatCommit: {
215
+ hash: next.hash,
216
+ message: next.message,
217
+ timestamp: next.timestamp,
218
+ },
219
+ scope,
220
+ filesAffected: [...new Set([...current.files, ...next.files])],
221
+ gapMinutes: gap,
222
+ description: `Similar fix attempted ${gap}m later (${Math.round(similarity * 100)}% similar)`,
223
+ });
224
+ }
225
+ }
226
+ }
227
+ return incidents;
228
+ }
229
+ /**
230
+ * Calculate similarity between two commit messages (Jaccard index).
231
+ */
232
+ function calculateSimilarity(msg1, msg2) {
233
+ const words1 = new Set(msg1
234
+ .toLowerCase()
235
+ .replace(/[^a-z0-9\s]/g, '')
236
+ .split(/\s+/)
237
+ .filter((w) => w.length > 2));
238
+ const words2 = new Set(msg2
239
+ .toLowerCase()
240
+ .replace(/[^a-z0-9\s]/g, '')
241
+ .split(/\s+/)
242
+ .filter((w) => w.length > 2));
243
+ if (words1.size === 0 || words2.size === 0)
244
+ return 0;
245
+ const intersection = new Set([...words1].filter((w) => words2.has(w)));
246
+ const union = new Set([...words1, ...words2]);
247
+ return intersection.size / union.size;
248
+ }
249
+ //# sourceMappingURL=context-amnesia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-amnesia.js","sourceRoot":"","sources":["../../src/inner-loop/context-amnesia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Inner Loop Failure Pattern Detection
3
+ *
4
+ * This module detects the 4 "Inner Loop Disasters" from vibe coding:
5
+ * 1. "Tests Passing" Lie - AI claims success but code doesn't work
6
+ * 2. Context Amnesia - Forgets instructions, re-does work
7
+ * 3. Instruction Drift - "Improves" things not asked for
8
+ * 4. Debug Loop Spiral - Adds logging instead of fixing
9
+ */
10
+ import { TimelineEvent } from '../types';
11
+ import { InnerLoopAnalysis, InnerLoopConfig } from './types';
12
+ export * from './types';
13
+ export { detectTestsPassingLie } from './tests-passing-lie';
14
+ export { detectContextAmnesia } from './context-amnesia';
15
+ export { detectInstructionDrift, createSessionScope, inferSessionScope } from './instruction-drift';
16
+ export { detectLoggingOnlyCommits, analyzeCommitsForLogging } from './logging-only';
17
+ /**
18
+ * Run all inner loop failure pattern detectors.
19
+ */
20
+ export declare function analyzeInnerLoop(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
21
+ additions: number;
22
+ deletions: number;
23
+ }>, config?: Partial<InnerLoopConfig>): InnerLoopAnalysis;
24
+ /**
25
+ * Quick check for inner loop issues (fast, no diff analysis).
26
+ */
27
+ export declare function quickInnerLoopCheck(events: TimelineEvent[], filesPerCommit: Map<string, string[]>, lineStatsPerCommit: Map<string, {
28
+ additions: number;
29
+ deletions: number;
30
+ }>): {
31
+ hasIssues: boolean;
32
+ issueCount: number;
33
+ topIssue: string | null;
34
+ };
35
+ /**
36
+ * Format inner loop analysis for terminal output.
37
+ */
38
+ export declare function formatInnerLoopAnalysis(analysis: InnerLoopAnalysis): string;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inner-loop/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,eAAe,EAOhB,MAAM,SAAS,CAAC;AAOjB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAEpF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,EACzE,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,iBAAiB,CAqDnB;AA2FD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EAAE,EACvB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACrC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACxE;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAcA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAgD3E"}