@boshu2/vibe-check 1.5.0 → 1.6.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.
- package/.agents/bundles/insight-mining-dashboard-research-2025-11-30.md +400 -0
- package/.agents/bundles/storage-enhancement-research-2025-11-30.md +292 -0
- package/.agents/bundles/timeline-feature-research-complete-2025-11-30.md +301 -0
- package/.agents/plans/insight-dashboard-plan-2025-11-30.md +1130 -0
- package/.agents/plans/json-storage-enhancement-plan.md +717 -0
- package/.agents/plans/storage-hardening-and-cache-plan.md +592 -0
- package/.agents/plans/test-coverage-gaps-plan.md +1117 -0
- package/.agents/plans/timeline-feature-plan.md +193 -0
- package/.agents/plans/vibe_timeline_research_findings.md +553 -0
- package/.claude/settings.local.json +1 -0
- package/.vibe-check/.gitignore +6 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +24 -0
- package/CONTRIBUTING.md +227 -0
- package/README.md +200 -143
- package/claude-progress.json +191 -9
- package/claude-progress.txt +257 -0
- package/dashboard/app.js +75 -2
- package/dashboard/dashboard-data.json +653 -0
- package/dashboard/index.html +13 -0
- package/dashboard/styles.css +61 -0
- package/dist/analysis/cross-session-analysis.d.ts +68 -0
- package/dist/analysis/cross-session-analysis.d.ts.map +1 -0
- package/dist/analysis/cross-session-analysis.js +174 -0
- package/dist/analysis/cross-session-analysis.js.map +1 -0
- package/dist/analysis/index.d.ts +2 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +12 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/cli.js +10 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +2 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +105 -2
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/cache.d.ts +6 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +168 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/dashboard.d.ts +8 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +109 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +8 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/timeline.d.ts +14 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +462 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/git.d.ts +24 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +94 -0
- package/dist/git.js.map +1 -1
- package/dist/insights/generators.d.ts +44 -0
- package/dist/insights/generators.d.ts.map +1 -0
- package/dist/insights/generators.js +289 -0
- package/dist/insights/generators.js.map +1 -0
- package/dist/insights/index.d.ts +16 -0
- package/dist/insights/index.d.ts.map +1 -0
- package/dist/insights/index.js +171 -0
- package/dist/insights/index.js.map +1 -0
- package/dist/insights/types.d.ts +93 -0
- package/dist/insights/types.d.ts.map +1 -0
- package/dist/insights/types.js +6 -0
- package/dist/insights/types.js.map +1 -0
- package/dist/output/timeline-html.d.ts +6 -0
- package/dist/output/timeline-html.d.ts.map +1 -0
- package/dist/output/timeline-html.js +389 -0
- package/dist/output/timeline-html.js.map +1 -0
- package/dist/output/timeline-markdown.d.ts +6 -0
- package/dist/output/timeline-markdown.d.ts.map +1 -0
- package/dist/output/timeline-markdown.js +167 -0
- package/dist/output/timeline-markdown.js.map +1 -0
- package/dist/output/timeline.d.ts +9 -0
- package/dist/output/timeline.d.ts.map +1 -0
- package/dist/output/timeline.js +318 -0
- package/dist/output/timeline.js.map +1 -0
- package/dist/patterns/detour.d.ts +32 -0
- package/dist/patterns/detour.d.ts.map +1 -0
- package/dist/patterns/detour.js +137 -0
- package/dist/patterns/detour.js.map +1 -0
- package/dist/patterns/flow-state.d.ts +16 -0
- package/dist/patterns/flow-state.d.ts.map +1 -0
- package/dist/patterns/flow-state.js +40 -0
- package/dist/patterns/flow-state.js.map +1 -0
- package/dist/patterns/index.d.ts +8 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +22 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/intervention-effectiveness.d.ts +42 -0
- package/dist/patterns/intervention-effectiveness.d.ts.map +1 -0
- package/dist/patterns/intervention-effectiveness.js +196 -0
- package/dist/patterns/intervention-effectiveness.js.map +1 -0
- package/dist/patterns/late-night.d.ts +30 -0
- package/dist/patterns/late-night.d.ts.map +1 -0
- package/dist/patterns/late-night.js +141 -0
- package/dist/patterns/late-night.js.map +1 -0
- package/dist/patterns/post-delete-sprint.d.ts +28 -0
- package/dist/patterns/post-delete-sprint.d.ts.map +1 -0
- package/dist/patterns/post-delete-sprint.js +85 -0
- package/dist/patterns/post-delete-sprint.js.map +1 -0
- package/dist/patterns/spiral-regression.d.ts +49 -0
- package/dist/patterns/spiral-regression.d.ts.map +1 -0
- package/dist/patterns/spiral-regression.js +219 -0
- package/dist/patterns/spiral-regression.js.map +1 -0
- package/dist/patterns/thrashing.d.ts +25 -0
- package/dist/patterns/thrashing.d.ts.map +1 -0
- package/dist/patterns/thrashing.js +111 -0
- package/dist/patterns/thrashing.js.map +1 -0
- package/dist/storage/atomic.d.ts +40 -0
- package/dist/storage/atomic.d.ts.map +1 -0
- package/dist/storage/atomic.js +155 -0
- package/dist/storage/atomic.js.map +1 -0
- package/dist/storage/commit-log.d.ts +35 -0
- package/dist/storage/commit-log.d.ts.map +1 -0
- package/dist/storage/commit-log.js +128 -0
- package/dist/storage/commit-log.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +33 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/schema.d.ts +32 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +37 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/storage/timeline-store.d.ts +117 -0
- package/dist/storage/timeline-store.d.ts.map +1 -0
- package/dist/storage/timeline-store.js +438 -0
- package/dist/storage/timeline-store.js.map +1 -0
- package/dist/types.d.ts +96 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/ARCHITECTURE.md +458 -0
- package/docs/DATA-ARCHITECTURE.md +565 -0
- package/docs/GAMIFICATION.md +564 -0
- package/docs/JSON-STORAGE-PATTERNS.md +512 -0
- package/docs/METRICS-EXPLAINED.md +394 -0
- package/docs/UNIFIED-ECOSYSTEM.md +560 -0
- package/docs/VIBE-ECOSYSTEM.md +406 -0
- package/feature-list.json +48 -0
- package/package.json +2 -1
- package/vitest.config.ts +1 -5
- package/.vibe-check/calibration.json +0 -38
- package/.vibe-check/latest.json +0 -114
- package/.vibe-check/sessions.json +0 -44
- package/PLAN-ultimate-game.md +0 -1362
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
# vibe-check Timeline Feature: Git Data Analysis Research
|
|
2
|
+
|
|
3
|
+
**Repository:** /Users/fullerbt/workspaces/personal/vibe-check
|
|
4
|
+
**Analysis Date:** 2025-11-30
|
|
5
|
+
**Commit Range:** 43 commits over 3 days (Nov 28-30, 2025)
|
|
6
|
+
**Author:** Boden Fuller (single-developer repo)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. AVAILABLE GIT METADATA
|
|
11
|
+
|
|
12
|
+
### Core Fields (Always Available)
|
|
13
|
+
|
|
14
|
+
| Field | Format Code | Example | Use for Timeline |
|
|
15
|
+
|-------|-------------|---------|------------------|
|
|
16
|
+
| **Commit Hash** | `%H` | `3f955bf12...` | Unique ID, linking |
|
|
17
|
+
| **Short Hash** | `%h` | `3f955bf` | Display, compact ID |
|
|
18
|
+
| **Timestamp (Unix)** | `%at` | `1764511499` | Session detection, gaps |
|
|
19
|
+
| **Timestamp (ISO)** | `%ai` | `2025-11-30 09:04:59 -0500` | Display, timezone-aware |
|
|
20
|
+
| **Author Email** | `%ae` | `boden.fuller@gmail.com` | Multi-dev repos |
|
|
21
|
+
| **Author Name** | `%an` | `Boden Fuller` | Display, attribution |
|
|
22
|
+
| **Committer Email** | `%ce` | Same as author | CI/bot detection |
|
|
23
|
+
| **Committer Name** | `%cn` | Same as author | CI/bot detection |
|
|
24
|
+
| **Subject** | `%s` | `feat: add timeline` | Semantic type, display |
|
|
25
|
+
| **Body** | `%b` | Multi-line text | Context, AI attribution |
|
|
26
|
+
| **Git Notes** | `%N` | (empty in this repo) | Custom metadata |
|
|
27
|
+
|
|
28
|
+
### Derived Metadata
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# File-level changes
|
|
32
|
+
git log --numstat --format="%H|%at|%s"
|
|
33
|
+
# Output: hash|timestamp|subject followed by:
|
|
34
|
+
# 107 3804 tests/cli.integration.test.ts
|
|
35
|
+
|
|
36
|
+
# Aggregate stats
|
|
37
|
+
git log --shortstat --format="%H|%at|%s"
|
|
38
|
+
# Output: 21 files changed, 107 insertions(+), 3804 deletions(-)
|
|
39
|
+
|
|
40
|
+
# Per-file with rename detection
|
|
41
|
+
git log --stat --format="%H|%at|%s"
|
|
42
|
+
# Shows file paths + line changes per file
|
|
43
|
+
|
|
44
|
+
# Branch/tag references
|
|
45
|
+
git log --decorate --format="%H|%D"
|
|
46
|
+
# Shows: HEAD -> main, origin/main, tag: v1.1.0
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Special Metadata Patterns
|
|
50
|
+
|
|
51
|
+
**AI Attribution Detection:**
|
|
52
|
+
```
|
|
53
|
+
Body contains: "🤖 Generated with [Claude Code]"
|
|
54
|
+
Body contains: "Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
55
|
+
→ 100% of commits in this repo are AI-assisted
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Semantic Commit Detection:**
|
|
59
|
+
```bash
|
|
60
|
+
Subject matches: ^(feat|fix|docs|test|chore|wip|ci|session)(\(.+?\))?:
|
|
61
|
+
→ 100% of commits (43/43) use semantic commits
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 2. SESSION DETECTION PATTERNS
|
|
67
|
+
|
|
68
|
+
### Timestamp Gap Analysis (43 commits, 42 gaps)
|
|
69
|
+
|
|
70
|
+
**Gap Distribution:**
|
|
71
|
+
```
|
|
72
|
+
< 30 minutes: 29 gaps (69.0%) ← Active coding
|
|
73
|
+
30m - 1 hour: 5 gaps (11.9%) ← Short breaks
|
|
74
|
+
1 - 2 hours: 3 gaps ( 7.1%) ← Meal/break
|
|
75
|
+
2 - 4 hours: 3 gaps ( 7.1%) ← Context switch
|
|
76
|
+
> 4 hours: 2 gaps ( 4.8%) ← End of day
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Recommended Session Boundary: **1 hour**
|
|
80
|
+
|
|
81
|
+
**Why 1 hour?**
|
|
82
|
+
- 69% of gaps are <30min (tight feedback loops)
|
|
83
|
+
- Only 19% of gaps are >1hr (clear session boundaries)
|
|
84
|
+
- Captures 9 distinct sessions over 3 days
|
|
85
|
+
|
|
86
|
+
### Detected Sessions (1hr threshold)
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Session 1: Nov 28, 12:09-13:56 (107 min, 7 commits)
|
|
90
|
+
- Initial CLI tool + README + publishing setup
|
|
91
|
+
|
|
92
|
+
Session 2: Nov 28, 17:07-18:04 (57 min, 3 commits)
|
|
93
|
+
- Research bundles, WIP vibe-score implementation
|
|
94
|
+
|
|
95
|
+
Session 3: Nov 28, 20:58-20:58 (1 commit burst)
|
|
96
|
+
- v2.0.0 release + level subcommand
|
|
97
|
+
|
|
98
|
+
Session 4: Nov 28, 22:25 (1 commit)
|
|
99
|
+
- Unit tests for ML model
|
|
100
|
+
|
|
101
|
+
Session 5: Nov 29, 00:27 (1 commit, late night)
|
|
102
|
+
- Version fix (was incorrectly 2.0.0)
|
|
103
|
+
|
|
104
|
+
Session 6: Nov 29, 10:25 (1 commit)
|
|
105
|
+
- Gamification feature
|
|
106
|
+
|
|
107
|
+
Session 7: Nov 29, 11:55-13:43 (108 min, 12 commits)
|
|
108
|
+
- GitHub Actions, hooks, UX improvements
|
|
109
|
+
|
|
110
|
+
Session 8: Nov 29, 15:35-19:21 (227 min, 13 commits) ← LONGEST
|
|
111
|
+
- Watch mode, sessions, pattern memory, v1.5 gamification
|
|
112
|
+
|
|
113
|
+
Session 9: Nov 30, 08:21-09:04 (43 min, 3 commits)
|
|
114
|
+
- Test coverage, integration tests, retrospective
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Insights:**
|
|
118
|
+
- **Average session:** ~61 minutes
|
|
119
|
+
- **Longest session:** 227 min (3.8 hours) - v1.5 feature
|
|
120
|
+
- **Most commits/session:** 13 (Session 8)
|
|
121
|
+
- **Single-commit sessions:** 4 (quick fixes, late-night corrections)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 3. COMMIT TYPE DISTRIBUTION
|
|
126
|
+
|
|
127
|
+
**Semantic Prefix Analysis:**
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
feat 16 commits ( 37.2%) ███████ - New features
|
|
131
|
+
docs 9 commits ( 20.9%) ████ - Documentation
|
|
132
|
+
chore 6 commits ( 14.0%) ██ - Maintenance
|
|
133
|
+
fix 4 commits ( 9.3%) █ - Bug fixes
|
|
134
|
+
test 4 commits ( 9.3%) █ - Test changes
|
|
135
|
+
session 2 commits ( 4.7%) - Session metadata
|
|
136
|
+
wip 1 commit ( 2.3%) - Work in progress
|
|
137
|
+
ci 1 commit ( 2.3%) - CI configuration
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Type Clustering Within Sessions:**
|
|
141
|
+
|
|
142
|
+
- **Session 1:** feat → docs → fix → feat (setup phase)
|
|
143
|
+
- **Session 7:** feat → ci → fix → chore → fix (rapid iteration)
|
|
144
|
+
- **Session 8:** feat → feat → feat (deep feature work)
|
|
145
|
+
|
|
146
|
+
**Pattern:** Sessions with 5+ commits show **type mixing** (feat + fix + docs), while short sessions are **single-type** (one feat or one fix).
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 4. LINES CHANGED PATTERNS
|
|
151
|
+
|
|
152
|
+
### Average by Commit Type
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
Type Count Avg + Avg - Avg Net Total Net
|
|
156
|
+
────────────────────────────────────────────────────────────
|
|
157
|
+
feat 16 +873 -114 +759 +12,145
|
|
158
|
+
docs 9 +632 -7 +625 +5,622
|
|
159
|
+
chore 6 +15 -6 +9 +54
|
|
160
|
+
fix 4 +14 -6 +9 +36
|
|
161
|
+
test 4 +752 -952 -200 -799
|
|
162
|
+
session 2 +192 -0 +192 +385
|
|
163
|
+
wip 1 +855 -0 +855 +855
|
|
164
|
+
ci 1 +56 -0 +56 +56
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Key Insights:**
|
|
168
|
+
- **feat commits:** Large additions (avg +873 lines)
|
|
169
|
+
- **fix commits:** Tiny tweaks (avg +14 lines)
|
|
170
|
+
- **test commits:** NET NEGATIVE (avg -200 lines) - refactors!
|
|
171
|
+
- **docs commits:** Medium additions (avg +632 lines)
|
|
172
|
+
|
|
173
|
+
### Major Refactors (net deletions > 100)
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
1. test: replace unit tests with CLI integration tests
|
|
177
|
+
+107 -3804 (net: -3697)
|
|
178
|
+
→ Deleted 258 unit tests, replaced with 11 integration tests
|
|
179
|
+
|
|
180
|
+
2. feat(v1.3): replace ML level prediction with session workflow
|
|
181
|
+
+282 -1563 (net: -1281)
|
|
182
|
+
→ Removed entire ML subsystem (ECE, logistic regression)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Pattern:** Both refactors happened LATE (commits 42-43), after realizing earlier approach was wrong.
|
|
186
|
+
|
|
187
|
+
### Largest Features (net additions > 800)
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
1. feat(gamification): +3301 lines (dashboard, XP, achievements)
|
|
191
|
+
2. docs(bundles): +2567 lines (research documentation)
|
|
192
|
+
3. test: +2449 lines (comprehensive test suite)
|
|
193
|
+
4. feat: +1668 lines (npm standards compliance)
|
|
194
|
+
5. docs: +1643 lines (architecture guides)
|
|
195
|
+
6. feat: +1591 lines (initial CLI tool)
|
|
196
|
+
7. feat(calibration): +1356 lines (ML learning loop)
|
|
197
|
+
8. feat(v1.5): +1080 lines (gamification supercharge)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Pattern:** Large features cluster in **Session 6-8** (Nov 29 afternoon/evening).
|
|
201
|
+
|
|
202
|
+
### Correlation: Type vs Size
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
feat: avg absolute change = 919 lines (large, variable)
|
|
206
|
+
docs: avg absolute change = 625 lines (medium, consistent)
|
|
207
|
+
test: avg absolute change = 1649 lines (HUGE variance - refactors)
|
|
208
|
+
fix: avg absolute change = 9 lines (tiny, precise)
|
|
209
|
+
chore: avg absolute change = 9 lines (tiny, mechanical)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 5. TIME-OF-DAY PATTERNS
|
|
215
|
+
|
|
216
|
+
### Hourly Distribution
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
Hour Commits Pattern
|
|
220
|
+
────────────────────────────
|
|
221
|
+
00:00 1 █ (late-night fix)
|
|
222
|
+
08:00 2 ██ (morning start)
|
|
223
|
+
09:00 1 █
|
|
224
|
+
10:00 1 █
|
|
225
|
+
11:00 1 █
|
|
226
|
+
12:00 8 ████████ (lunch-hour coding!)
|
|
227
|
+
13:00 10 ██████████ (peak productivity)
|
|
228
|
+
15:00 2 ██
|
|
229
|
+
16:00 3 ███
|
|
230
|
+
17:00 4 ████
|
|
231
|
+
18:00 5 █████ (evening focus)
|
|
232
|
+
19:00 2 ██
|
|
233
|
+
20:00 2 ██
|
|
234
|
+
22:00 1 █ (late work)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Time-of-Day Categories
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
Morning (6am-12pm): 5 commits (11.6%)
|
|
241
|
+
Afternoon (12pm-6pm): 27 commits (62.8%) ← PEAK
|
|
242
|
+
Evening (6pm-12am): 10 commits (23.3%)
|
|
243
|
+
Night (12am-6am): 1 commit ( 2.3%)
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Insights:**
|
|
247
|
+
- **Peak hours:** 12pm-2pm (18 commits / 41.9%)
|
|
248
|
+
- **Developer preference:** Afternoon coder (62.8%)
|
|
249
|
+
- **Late-night commits:** Rare (1 commit at 00:27 - version fix)
|
|
250
|
+
- **No early morning:** No commits before 8am
|
|
251
|
+
|
|
252
|
+
### Productivity by Time
|
|
253
|
+
|
|
254
|
+
**Commits per hour (active hours only):**
|
|
255
|
+
```
|
|
256
|
+
12pm-2pm: 18 commits (9.0 commits/hr) ← HIGHEST
|
|
257
|
+
5pm-7pm: 9 commits (4.5 commits/hr)
|
|
258
|
+
8am-11am: 5 commits (1.25 commits/hr) ← Slower ramp-up
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 6. ADVANCED METADATA OPPORTUNITIES
|
|
264
|
+
|
|
265
|
+
### Available but Not Yet Used
|
|
266
|
+
|
|
267
|
+
**1. Git Notes (`git notes add`)**
|
|
268
|
+
- Store timeline annotations
|
|
269
|
+
- Link commits to vibe-levels
|
|
270
|
+
- Add retrospective comments
|
|
271
|
+
- Example: `git notes add -m "Spiral detected: 3 fix commits"`
|
|
272
|
+
|
|
273
|
+
**2. Commit Message Body Analysis**
|
|
274
|
+
- AI attribution footer (already present)
|
|
275
|
+
- Bullet points → task breakdown
|
|
276
|
+
- References to issues/PRs
|
|
277
|
+
- Example body:
|
|
278
|
+
```
|
|
279
|
+
- Deleted 258 unit tests, replaced with 11 integration tests
|
|
280
|
+
- Full retrospective analyzing ML detour
|
|
281
|
+
- Hit: Tests Passing Lie, Instruction Drift
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
**3. File Churn Patterns**
|
|
285
|
+
- Track which files change together
|
|
286
|
+
- Detect component boundaries
|
|
287
|
+
- Identify hotspots
|
|
288
|
+
- Example: `src/gamification/*` changed in 8 commits
|
|
289
|
+
|
|
290
|
+
**4. Merge Commits**
|
|
291
|
+
- This repo has ZERO merge commits (linear history)
|
|
292
|
+
- If present: detect feature branches, PRs
|
|
293
|
+
|
|
294
|
+
**5. GPG Signatures**
|
|
295
|
+
- This repo: no signatures
|
|
296
|
+
- If present: trust/security indicators
|
|
297
|
+
|
|
298
|
+
**6. Trailer Parsing**
|
|
299
|
+
```
|
|
300
|
+
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
301
|
+
→ AI-assisted indicator
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Could Be Added (New Data)
|
|
305
|
+
|
|
306
|
+
**1. Vibe-Level Annotations**
|
|
307
|
+
```bash
|
|
308
|
+
git notes --ref=vibe-level add -m "3" <commit>
|
|
309
|
+
# Later: git log --notes=vibe-level
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**2. Session Metadata**
|
|
313
|
+
```bash
|
|
314
|
+
git notes --ref=session add -m "session-id: 007, duration: 108m" <commit>
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**3. Spiral Markers**
|
|
318
|
+
```bash
|
|
319
|
+
git notes --ref=spiral add -m "fix-chain: 3 commits, trigger: API mismatch" <commit>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 7. TIMELINE FEATURE RECOMMENDATIONS
|
|
325
|
+
|
|
326
|
+
### Data Schema for `vibe-check timeline`
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
interface TimelineEvent {
|
|
330
|
+
// Core Git Data
|
|
331
|
+
hash: string; // Full commit hash
|
|
332
|
+
shortHash: string; // 7-char hash
|
|
333
|
+
timestamp: number; // Unix timestamp
|
|
334
|
+
datetime: string; // ISO 8601
|
|
335
|
+
author: string; // Author name
|
|
336
|
+
subject: string; // Commit message (first line)
|
|
337
|
+
body?: string; // Full commit message
|
|
338
|
+
|
|
339
|
+
// Semantic Analysis
|
|
340
|
+
type: CommitType; // feat|fix|docs|test|chore|etc
|
|
341
|
+
scope?: string; // (gamification), (v1.3), etc
|
|
342
|
+
|
|
343
|
+
// Change Metrics
|
|
344
|
+
filesChanged: number;
|
|
345
|
+
insertions: number;
|
|
346
|
+
deletions: number;
|
|
347
|
+
netChange: number; // insertions - deletions
|
|
348
|
+
|
|
349
|
+
// Session Context
|
|
350
|
+
sessionId: number; // Computed from gaps
|
|
351
|
+
sessionPosition: number; // 1st, 2nd, 3rd commit in session
|
|
352
|
+
gapMinutes?: number; // Minutes since previous commit
|
|
353
|
+
|
|
354
|
+
// Derived Insights
|
|
355
|
+
isRefactor: boolean; // deletions > insertions
|
|
356
|
+
isLargeFeature: boolean; // net > 500 lines
|
|
357
|
+
isFix: boolean; // type === 'fix' or in fix chain
|
|
358
|
+
spiralDepth?: number; // If part of fix chain
|
|
359
|
+
|
|
360
|
+
// AI Detection
|
|
361
|
+
isAiAssisted: boolean; // From commit body
|
|
362
|
+
|
|
363
|
+
// Future: Notes-based
|
|
364
|
+
vibeLevel?: number; // 0-5
|
|
365
|
+
spiralTrigger?: string; // e.g., "API_MISMATCH"
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
interface Session {
|
|
369
|
+
id: number;
|
|
370
|
+
startTime: number;
|
|
371
|
+
endTime: number;
|
|
372
|
+
durationMinutes: number;
|
|
373
|
+
commits: TimelineEvent[];
|
|
374
|
+
|
|
375
|
+
// Aggregates
|
|
376
|
+
totalLines: number;
|
|
377
|
+
netChange: number;
|
|
378
|
+
commitTypes: Record<CommitType, number>;
|
|
379
|
+
|
|
380
|
+
// Metrics
|
|
381
|
+
velocity: number; // commits/hour
|
|
382
|
+
reworkRatio: number; // % fix commits
|
|
383
|
+
avgLinesPerCommit: number;
|
|
384
|
+
|
|
385
|
+
// Patterns
|
|
386
|
+
hadSpiral: boolean;
|
|
387
|
+
largestCommit: TimelineEvent;
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Session Detection Algorithm
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
function detectSessions(commits: Commit[], gapThresholdMinutes = 60): Session[] {
|
|
395
|
+
const sessions: Session[] = [];
|
|
396
|
+
let currentSession: Commit[] = [commits[0]];
|
|
397
|
+
|
|
398
|
+
for (let i = 1; i < commits.length; i++) {
|
|
399
|
+
const gapMinutes = (commits[i].timestamp - commits[i-1].timestamp) / 60;
|
|
400
|
+
|
|
401
|
+
if (gapMinutes >= gapThresholdMinutes) {
|
|
402
|
+
// End current session
|
|
403
|
+
sessions.push(buildSession(currentSession));
|
|
404
|
+
currentSession = [commits[i]];
|
|
405
|
+
} else {
|
|
406
|
+
currentSession.push(commits[i]);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// Don't forget last session
|
|
411
|
+
sessions.push(buildSession(currentSession));
|
|
412
|
+
return sessions;
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Timeline Output Format
|
|
417
|
+
|
|
418
|
+
**Recommended:**
|
|
419
|
+
```
|
|
420
|
+
Session 1: Nov 28, 12:09-13:56 (107 min) ━━━━━━━━━━━━━━━━
|
|
421
|
+
12:09 feat initial vibe-check CLI tool +1591
|
|
422
|
+
13:05 docs add README and fix repository URL +115
|
|
423
|
+
13:27 fix use scoped package name +0
|
|
424
|
+
13:41 feat add npm CLI standards compliance +1668
|
|
425
|
+
13:51 docs rewrite README +24
|
|
426
|
+
13:51 chore bump version to 1.0.2 +8
|
|
427
|
+
13:56 docs add CLAUDE.md +119
|
|
428
|
+
|
|
429
|
+
Session metrics:
|
|
430
|
+
Velocity: 3.9 commits/hr
|
|
431
|
+
Rework: 14% (1 fix / 7 commits)
|
|
432
|
+
Net change: +3525 lines (7 files)
|
|
433
|
+
Pattern: Setup phase (feat → docs → fix)
|
|
434
|
+
|
|
435
|
+
[gap: 3.2 hours]
|
|
436
|
+
|
|
437
|
+
Session 2: Nov 28, 17:07-18:04 (57 min) ━━━━━━━━━
|
|
438
|
+
17:07 docs unified vibe system research +2567
|
|
439
|
+
17:07 wip partial implementation +855
|
|
440
|
+
18:04 feat implement ML learning loop +1356
|
|
441
|
+
|
|
442
|
+
Session metrics:
|
|
443
|
+
Velocity: 3.2 commits/hr
|
|
444
|
+
Rework: 0%
|
|
445
|
+
Net change: +4778 lines (24 files)
|
|
446
|
+
Pattern: Research → Implementation
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Visualization Ideas
|
|
450
|
+
|
|
451
|
+
**1. Session Timeline (ASCII)**
|
|
452
|
+
```
|
|
453
|
+
Nov 28 ━━━━━╋━━━╋━━━━━━━━━━━━━━━━╋━━╋━━━━━╋
|
|
454
|
+
12pm 18pm 22pm 2am
|
|
455
|
+
|
|
456
|
+
Nov 29 ━━━━━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━
|
|
457
|
+
10am 15pm 19pm
|
|
458
|
+
|
|
459
|
+
Nov 30 ━╋━━━━
|
|
460
|
+
8am
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**2. Commit Type Stacked Bar**
|
|
464
|
+
```
|
|
465
|
+
Session 1 [feat][docs][fix][feat][docs][chore][docs]
|
|
466
|
+
Session 2 [docs][wip][feat]
|
|
467
|
+
Session 3 [feat][chore]
|
|
468
|
+
...
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**3. Lines Changed Heatmap**
|
|
472
|
+
```
|
|
473
|
+
Hour Commits Lines Changed
|
|
474
|
+
12pm ████ +1,706 ▓▓▓▓▓▓▓▓▓
|
|
475
|
+
13pm ██████ +1,819 ▓▓▓▓▓▓▓▓▓▓
|
|
476
|
+
17pm ██ +3,422 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
|
|
477
|
+
18pm ██ +1,356 ▓▓▓▓▓▓▓
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## 8. FINDINGS SUMMARY
|
|
483
|
+
|
|
484
|
+
### What Git Gives Us
|
|
485
|
+
|
|
486
|
+
1. **Rich Metadata:** Hash, timestamp, author, message, stats
|
|
487
|
+
2. **Precise Timing:** Unix timestamps → session gaps
|
|
488
|
+
3. **Semantic Structure:** Commit types, scopes
|
|
489
|
+
4. **Change Quantification:** Files, lines added/deleted
|
|
490
|
+
5. **AI Attribution:** Footer detection
|
|
491
|
+
6. **Extensibility:** Git notes for vibe-levels
|
|
492
|
+
|
|
493
|
+
### Session Detection Works
|
|
494
|
+
|
|
495
|
+
- **1-hour gap threshold** is optimal (69% <30min, 19% >1hr)
|
|
496
|
+
- Captures **9 sessions** over 3 days
|
|
497
|
+
- Average session: **61 minutes**
|
|
498
|
+
- Longest session: **227 minutes** (deep feature work)
|
|
499
|
+
|
|
500
|
+
### Commit Patterns Are Clear
|
|
501
|
+
|
|
502
|
+
- **feat:** Large, variable (avg +873 lines)
|
|
503
|
+
- **fix:** Tiny, precise (avg +14 lines)
|
|
504
|
+
- **docs:** Medium, consistent (avg +632 lines)
|
|
505
|
+
- **test:** Refactor-prone (avg -200 net)
|
|
506
|
+
|
|
507
|
+
### Time-of-Day Matters
|
|
508
|
+
|
|
509
|
+
- **Peak:** 12pm-2pm (41.9% of commits)
|
|
510
|
+
- **Developer:** Afternoon coder (62.8%)
|
|
511
|
+
- **Velocity:** 9 commits/hr during peak (vs 1.25/hr morning)
|
|
512
|
+
|
|
513
|
+
### Timeline Feature is Viable
|
|
514
|
+
|
|
515
|
+
- All necessary data is in git
|
|
516
|
+
- No external storage needed (use git notes for vibe-levels)
|
|
517
|
+
- Can compute metrics on-the-fly
|
|
518
|
+
- Rich visualizations possible with existing data
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## 9. NEXT STEPS
|
|
523
|
+
|
|
524
|
+
### Phase 1: Basic Timeline (MVP)
|
|
525
|
+
- [x] Parse git log with timestamps
|
|
526
|
+
- [ ] Detect sessions (1hr gap)
|
|
527
|
+
- [ ] Group commits by session
|
|
528
|
+
- [ ] Display chronological list
|
|
529
|
+
- [ ] Show session summaries
|
|
530
|
+
|
|
531
|
+
### Phase 2: Metrics Integration
|
|
532
|
+
- [ ] Calculate session velocity
|
|
533
|
+
- [ ] Detect fix chains (spirals)
|
|
534
|
+
- [ ] Show rework ratio per session
|
|
535
|
+
- [ ] Highlight large features/refactors
|
|
536
|
+
|
|
537
|
+
### Phase 3: Visualization
|
|
538
|
+
- [ ] ASCII timeline bars
|
|
539
|
+
- [ ] Commit type color coding
|
|
540
|
+
- [ ] Lines changed heatmap
|
|
541
|
+
- [ ] Session duration bars
|
|
542
|
+
|
|
543
|
+
### Phase 4: Advanced Features
|
|
544
|
+
- [ ] Interactive drill-down
|
|
545
|
+
- [ ] Filter by commit type
|
|
546
|
+
- [ ] Filter by date range
|
|
547
|
+
- [ ] Export to JSON
|
|
548
|
+
- [ ] Git notes integration (vibe-levels)
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
**Conclusion:** Git provides everything needed for a rich timeline feature. The data is clean, structured, and reveals clear patterns in coding behavior. Session detection works reliably, and there's ample opportunity for visualization and insight extraction.
|
|
553
|
+
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,52 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.6.0] - 2025-11-30
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Dashboard Command** - `vibe-check dashboard` opens a visual dashboard in your browser
|
|
12
|
+
- Score trend charts showing vibe score over time
|
|
13
|
+
- Session rating distribution (Elite/High/Medium/Low)
|
|
14
|
+
- Metrics radar chart
|
|
15
|
+
- Recent sessions list
|
|
16
|
+
- Achievement progress tracking
|
|
17
|
+
- **Insight Engine** - Generates actionable insights from your data
|
|
18
|
+
- Peak productivity hours detection
|
|
19
|
+
- Best coding day analysis
|
|
20
|
+
- Improvement streak tracking
|
|
21
|
+
- Problematic scope warnings (high fix ratios)
|
|
22
|
+
- Streak risk alerts
|
|
23
|
+
- Personal best celebrations
|
|
24
|
+
- Level-up progress notifications
|
|
25
|
+
- Late night coding warnings
|
|
26
|
+
- Recent achievement highlights
|
|
27
|
+
- Dashboard exports data to `dashboard-data.json` for offline viewing
|
|
28
|
+
- `--no-open` flag to export data without opening browser
|
|
29
|
+
- `-o, --output` flag for custom output path
|
|
30
|
+
|
|
31
|
+
## [1.5.0] - 2025-11-30
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- **Timeline Storage** - Persistent storage with schema versioning
|
|
35
|
+
- **Cross-session Queries** - Query patterns across all historical data
|
|
36
|
+
- **Regression Detection** - Detect when metrics are trending worse
|
|
37
|
+
- **Spiral Pattern Memory** - Track which patterns cause the most spirals
|
|
38
|
+
|
|
39
|
+
## [1.4.0] - 2025-11-29
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
- **Timeline Command** - `vibe-check timeline` for viewing coding journey
|
|
43
|
+
- **Pattern Memory** - Tracks spiral triggers over time
|
|
44
|
+
- **Intervention Memory** - Tracks what interventions break spirals
|
|
45
|
+
- **Weekly Challenges** - Gamified weekly goals
|
|
46
|
+
|
|
47
|
+
## [1.3.0] - 2025-11-29
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
- **Watch Mode** - `vibe-check watch` for real-time spiral detection
|
|
51
|
+
- **Intervene Command** - `vibe-check intervene` to record what broke a spiral
|
|
52
|
+
- **Cache Command** - `vibe-check cache` to manage local storage
|
|
53
|
+
|
|
8
54
|
## [1.2.0] - 2025-11-29
|
|
9
55
|
|
|
10
56
|
### Added
|
package/CLAUDE.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# vibe-check Development Guide
|
|
2
2
|
|
|
3
|
+
## Opus 4.5 Behavioral Standards
|
|
4
|
+
|
|
5
|
+
<default_to_action>
|
|
6
|
+
By default, implement changes rather than only suggesting them. If the user's intent is unclear, infer the most useful likely action and proceed, using tools to discover any missing details instead of guessing.
|
|
7
|
+
</default_to_action>
|
|
8
|
+
|
|
9
|
+
<use_parallel_tool_calls>
|
|
10
|
+
When performing multiple independent operations (reading multiple files, running multiple checks), execute them in parallel rather than sequentially. Only sequence operations when one depends on another's output.
|
|
11
|
+
</use_parallel_tool_calls>
|
|
12
|
+
|
|
13
|
+
<investigate_before_answering>
|
|
14
|
+
Before proposing code changes, read and understand the relevant files. Do not speculate about code you have not opened. Give grounded, hallucination-free answers based on actual code inspection.
|
|
15
|
+
</investigate_before_answering>
|
|
16
|
+
|
|
17
|
+
<avoid_overengineering>
|
|
18
|
+
Only make changes that are directly requested or clearly necessary. Keep solutions simple and focused. Do not add features, refactor code, or make "improvements" beyond what was asked. Do not create helpers or abstractions for one-time operations.
|
|
19
|
+
</avoid_overengineering>
|
|
20
|
+
|
|
21
|
+
<communication_style>
|
|
22
|
+
After completing tasks involving tool use, provide a brief summary of work done. When making significant changes, explain what was changed and why. Keep summaries concise but informative.
|
|
23
|
+
</communication_style>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
3
27
|
## npm Publishing Standards
|
|
4
28
|
|
|
5
29
|
### When to Publish
|