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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions