Skip to content

Support case-preserving module paths with case-safe cache keys #82

Description

@thiremani

Problem

Pluto currently requires lowercase module paths because module paths are also used directly in filesystem cache paths. The mangled ABI can distinguish case, and common repository/module names may contain uppercase characters, but simply relaxing validation would make cache entries collide on case-insensitive filesystems such as the default macOS and Windows filesystems.

This is separate from PR #78 script-root mangling fix: filesystem-derived script and relative-path names can preserve their existing case, while changing the module-path policy requires a deliberate cache-key design.

Desired properties

  • Preserve the module path exact spelling in language identity, diagnostics, and mangled symbols.
  • Give differently cased paths distinct, deterministic cache keys on case-insensitive filesystems.
  • Keep lowercase cache paths stable where practical.
  • Use a reversible escape, for example Go uppercase X to !x, or an equivalently collision-resistant encoding.
  • Define how literal escape characters, Unicode, and Unicode normalization are handled.
  • Version or migrate existing cache entries if the on-disk scheme changes.

Regression coverage

  • Differently cased module paths produce distinct cache directories and ABI symbols.
  • Cache encoding round-trips exactly.
  • Lowercase paths remain unchanged where intended.
  • Invalid or ambiguous escape spellings are rejected.
  • Behavior is consistent on case-sensitive and case-insensitive filesystems.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions