gstack's artifacts sync stops saying ok when two folders differ only by letter case

2 hours ago

gstack 1.91.125.0 to 1.91.126.0: artifacts sync now holds files whose paths differ only by letter case (projects/MyApp vs projects/myapp) instead of reporting ok, checks what git add staged before it reports success, and names the collision at every skill start and in gstack-doctor. 1.91.125.0 notes: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911250---2026-10-17 1.91.126.0 notes: https://github.com/garrytan/gstack/blob/main/CHANGELOG.md#1911260---2026-10-17 Repair steps: https://github.com/garrytan/gstack/blob/main/docs/troubleshooting.md#artifact-case-collision Commits: https://github.com/garrytan/gstack/commits/main

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00Collision
  2. 0:16Held
  3. 0:31Staged
  4. 0:48Warning
  5. 1:02Repair
Show transcript

Collision

gstack logo

gstack's artifacts sync stops saying ok when two folders differ only by case

projects/MyApp/ + projects/myapp/status: ok
Same two folders, todaystatus: collision
CollisionHeldStagedWarningRepair
garrytan/gstack · CHANGELOG.md 1.91.126.0

gstack's artifacts sync used to report okay when two project folders differed only by letter case. On a Mac or Windows disk, one spelling then stayed modified forever. Now the status says collision.

Held

Colliding files wait in the queue while the rest keeps syncing

Held, never staged: any path that matches another except for letter case, at any folder level
Everything else keeps syncing
Already tracked? That spelling keeps syncing; only the new alias waits
CollisionHeldStagedWarningRepair
garrytan/gstack · CHANGELOG.md 1.91.126.0

The sync now holds any file whose path matches another except for letter case, at any folder level. Every other file keeps syncing. If one spelling is already tracked, it keeps going, and only the new alias waits.

Staged

Sync checks what git add staged before it reports success

Paths or bytes that never reached the index stay in the queue
A commit that would add a new case alias to the remote stays local
The same check covers --publish-removals
Detector from Kkkkkuro, #3223 and #3245
CollisionHeldStagedWarningRepair
garrytan/gstack · CHANGELOG.md 1.91.126.0

The sync also checks what git add actually staged. Files that never reached the index stay queued. A commit that would push a new case alias to the remote stays local, and that holds for published removals too.

Warning

Every skill start names the collision and the repair

ARTIFACTS_SYNC: attention: case-collision held=<N> names=<names>. ...
gstack-doctor warns the same way
Skills still start and slugs still resolve
CollisionHeldStagedWarningRepair
garrytan/gstack · CHANGELOG.md 1.91.126.0

While a collision is held, each skill start prints one line naming the files and the repair. gstack doctor warns the same way. Skills still start as usual, and project slugs resolve as before.

Repair

Do you sync gstack artifacts between a Mac and a Linux machine?

You pick the spelling to keep. gstack merges and renames nothing on its own.
docs/troubleshooting.mdArtifact case collision
CollisionHeldStagedWarningRepair
garrytan/gstack · CHANGELOG.md 1.91.126.0

gstack merges and renames nothing on its own. You keep one spelling, using the repair steps in the troubleshooting doc. So, do you sync your gstack artifacts between a Mac and a Linux machine?