Goof afternoon mr. @mohitjain
Thank you for quick answer!
I’ve asked my Cursor to investigate all your questions and here is the answer, i believe i’ll never do more with my own hands and brain = ):
1. git stash list
The stash was dropped before we realized the team would need it. However, the dangling commit is still alive in git objects:
$ git fsck --dangling --no-reflogs
dangling commit 14a13751c5ab87868ffede79a809ff74d1cb7c2e
Full stash commit object:
$ git cat-file -p 14a13751c5ab87868ffede79a809ff74d1cb7c2e
tree e0ea665501b98141e63daba23cc358c9efe966d6
parent d5d69062fac35497bb2cfc120c27362b086f67a5
parent aae4a6f25c094572a765ff53317620e2704fd401
author git stash (git@stash) 1774728310 +0200
committer git stash (git@stash) 1774728310 +0200
WIP on trains: d5d6906 more thoughts
Index commit:
$ git cat-file -p aae4a6f25c094572a765ff53317620e2704fd401
tree 51c0c273636333a40462d36f1c51f2a3b168387d
parent d5d69062fac35497bb2cfc120c27362b086f67a5
author git stash (git@stash) 1774728310 +0200
committer git stash (git@stash) 1774728310 +0200
index on trains: d5d6906 more thoughts
Key observations:
-
Stash message: WIP on trains: d5d6906 more thoughts — default auto-generated format, meaning a plain git stash call with no arguments or custom message.
-
Author/committer: git stash (git@stash) — standard git stash identity.
-
Index diff vs HEAD is empty (git diff --stat d5d6906 aae4a6f returns nothing) — no staged changes existed, all 45 files were unstaged working tree changes.
-
Timestamp: 1774728310 = 2026-03-28 22:05:10 +0200 — one second before reset: moving to HEAD at 22:05:11.
-
Stash scope: 45 files changed, 641 insertions, 183 deletions.
2. Cursor version
Version: 2.6.21
Commit: fea2f546c979a0a4ad1deab23552a43568807590
Arch: x64
VSCode Version: 1.105.1
OS: Linux 6.17.0-14-generic
3. Worktree mode
Not active. No branch icon next to the model picker — only Agent/Ask switcher and model selector. The worktrees directory (~/.cursor/worktrees/) does not even exist on this machine.
renderer.log confirms worktree cleanup cron was registered at session start but only ran at 00:44:58 (6 hours later) — well after the incident at 22:05:
18:44:58.126 [WorktreeCleanupCron] Registering cleanup task with interval of 6 hours
00:44:58.127 [WorktreeCleanupCron] Running scheduled worktree cleanup (interval: 6h)
00:44:58.128 [WorktreeManager] Using worktrees root /home/…/.cursor/worktrees
4. “Overwrite uncommitted changes?” dialog
Definitely not. Never shown or dismissed at any point during the session.
5. Full git reflog
Complete reflog (repo was cloned the same day, this is the entire history):
61db052 HEAD@{2026-03-29 06:22:45 +0300}: commit: lecture 1st run
38cdfdf HEAD@{2026-03-29 04:07:37 +0300}: commit: infer fake prob fix
b449ec5 HEAD@{2026-03-29 02:26:38 +0200}: commit: slides
83474eb HEAD@{2026-03-29 02:19:35 +0200}: commit: coords
8c9043d HEAD@{2026-03-29 01:57:55 +0200}: commit: slides
1189fbb HEAD@{2026-03-29 00:16:09 +0200}: commit: stash review
e7fda01 HEAD@{2026-03-29 00:10:22 +0200}: commit: stash defence
ca98670 HEAD@{2026-03-28 23:23:53 +0200}: commit: slides and linear and interface update
d5d6906 HEAD@{2026-03-28 22:05:11 +0200}: reset: moving to HEAD ← THE INCIDENT
d5d6906 HEAD@{2026-03-28 15:00:41 +0200}: pull --tags origin trains: Fast-forward
73ae63c HEAD@{2026-03-28 15:00:28 +0200}: checkout: moving from master to trains
447d786 HEAD@{2026-03-28 11:48:28 +0200}: clone: from [redacted]
Raw reflog line from .git/logs/HEAD:
d5d6906 d5d6906 git stash (git@stash) 1774728311 +0200 reset: moving to HEAD
No branch checkouts between 15:00:28 and the reset at 22:05:11. No manual git operations at all.
6. Additional log context
vscode.git/Git.log — regular 5-second polling cycle around the incident, no stash or reset commands:
22:05:07.217 git config --get commit.template [15ms]
22:05:07.226 git for-each-ref … refs/heads/trains refs/remotes/trains [11ms]
22:05:07.258 git status -z -uall [22ms]
← git stash + reset happened here (22:05:10-11), invisible to git extension
22:05:12.292 git config --get commit.template [11ms]
22:05:12.301 git for-each-ref … refs/heads/trains refs/remotes/trains [10ms]
22:05:12.349 git status -z -uall [36ms]
The git extension saw the dirty working tree at 22:05:07, then saw a clean working tree at 22:05:12 — the stash+reset happened between two polling cycles.
renderer.log — wakelock timeline:
22:03:52 Released wakelock id=36 (7+ min generation)
22:04:03 Acquired wakelock id=37
22:04:27 Released wakelock id=37
22:04:42 Acquired wakelock id=38 ← reset happens inside this generation
22:05:16 Released wakelock id=38
22:06:32 Acquired wakelock id=39
Filesync.log — bulk upload at 22:05:11 (25 files “Uploaded” in ~200ms):
22:05:11.729 Uploaded useTrainingStream.ts modelVersion=2
22:05:11.836 Uploaded ml/xor/train.py modelVersion=2
22:05:11.837 Uploaded stores/training.ts modelVersion=4
…
22:05:11.942 Uploaded tests/test_routers.py modelVersion=44
22:05:11.943 Uploaded ml/linear/generate.py modelVersion=2
(25 files total in 214ms)
Normal Filesync behavior is one file at a time with seconds between them. This burst is clearly a batch operation.
No mentions of “stash”, “reset”, “checkpoint”, “overwrite”, or “uncommitted” in renderer.log, Cursor Agent Exec.log, or Cursor Always Local.log at any point during the session.