Skip to content

Case-Insensitive Filesystem Collision on macOS: Clause.rkt vs clause.rkt in satore/ #663

@AradhyaDixit18

Description

@AradhyaDixit18

Hi maintainers,

I encountered a reproducible filesystem-level issue when cloning the repository on macOS (default APFS, case-insensitive).

During git clone, Git reports filename collisions in the satore/ project:

'satore/Clause.rkt'
'satore/clause.rkt'
'satore/tests/Clause.rkt'
'satore/tests/clause.rkt'

Because macOS cannot distinguish between files that differ only by case, only one file from each pair is checked out. This results in:

• Git marking the files as “modified” immediately after clone
• Loss of one of the file variants (actual data loss locally)
• Prevents clean worktrees and contributes to confusion for contributors using macOS
• Makes the satore project effectively unusable on macOS without workarounds

This issue will happen for all macOS users using the default filesystem.

Proposed Fixes (I can implement one if preferred):

  1. Rename files in satore/ to avoid case collisions
    Example: rename Clause.rktClause_upper.rkt or similar.
    Update require statements in the Racket code accordingly.

  2. Move the satore project into a submodule or separate repository
    This isolates the conflicting filesystem and avoids breaking macOS clones of the main repo.

  3. Document macOS-specific workaround
    Add a section in README noting:

    • macOS users must clone inside a case-sensitive disk image, OR
    • Use git update-index --assume-unchanged … to ignore the colliding files
  4. Provide platform-agnostic file structure
    Standardize filenames to lowercase across the project.


Please let me know which fix direction the maintainers prefer.
I am happy to submit a PR with the full solution.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions