ARFC-1018: Case-Sensitive Asset Pathnames

Status

Draft Date: 2026-09-05 Version: 0.3

Abstract

This ARFC states the rule for comparing pathnames in the asset store: two pathnames name the same object only when they are the same sequence of characters. Letter case, accents, and character width are all significant. Lessons/notes.md, lessons/notes.md and léssons/notes.md are three different paths.

ARFC-1019 generalizes this rule to every value the platform stores; pathnames are its Address class.

The platform has never stated this rule, and today behaves two ways at once: files are compared exactly, while directories are compared under a fold that treats A and a — and also a and á, ae and æ, o and ø — as the same character. This ARFC resolves that inconsistency in favor of exact comparison, and states what an author sees when two names differ only in case.

Table of Contents


Introduction

Instructors and students address their work in the asset store by pathname — a realm, a zone, and a path such as lessons/Prime Numbers/panels/intro.md. Every read, write, delete and directory listing resolves a pathname to an object.

Until now the platform has published no rule about whether two pathnames that differ only in letter case name the same object. In the absence of a stated rule, two different answers took hold in different parts of the system. This ARFC states one rule and applies it everywhere.

Motivation

Current State

Prior Art

Platform Comparison Preserves spelling
Linux / POSIX filesystems Exact Yes
Object storage (S3 and equivalents) Exact Yes
URL paths (RFC 3986) Exact Yes
Git index Exact Yes
Windows / NTFS Folded (case only) Yes
macOS / APFS (default volume) Folded (case only) Yes

The desktop operating systems fold; the network, storage and version-control layers do not. No mainstream platform folds accents. A platform whose content is addressed by URL, stored in object storage, and edited from a Linux shell sits on the exact-comparison side of that divide.

Use Cases

  1. Naming is consistent with identity. Objects in this platform are also named by URN, and URNs are compared exactly apart from documented exceptions (ARFC-1001). Two ways of naming the same object should not disagree about whether two names are the same.
  2. Work moves between the shell and the asset store. Students work in a case-sensitive shell workbench and move files between it and their asset zone. A pair of names that is two files in the shell and one file in the store cannot round-trip without loss.
  3. Character identity is stated, not guessed. Treating A, a, á and â as four distinct characters is a rule an author can hold in their head. Conflating the first two but not the last two — or, as today, conflating some accents but not others — is not.
  4. Published content is served over URLs. Lesson content published for students is addressed by URL path, where comparison is already exact. A store that folds while its delivery layer does not will eventually disagree with itself.

Design Goals

Specification

Core Rules

  1. Exact comparison. Two pathnames name the same object only if every segment is the same sequence of characters. Case, accents, and character width are significant.
  2. Spelling is preserved. The path an author supplies is the path that is stored, listed, and returned.
  3. Distinct names are distinct objects. Lessons/ and lessons/ may both exist in the same zone and hold different content.
  4. No approximate resolution. A request naming a path that does not exist exactly is refused as not found. It is never served by an object whose name differs only in case, accent, or width.
  5. The rule is uniform. It governs files and directories alike, in both personal and realm zones, for reads, writes, deletes, and directory listings.

What an Author Observes

Action Result
Write Lessons/intro.md, then read lessons/intro.md Not found
Write Notes.md and notes.md in one directory Two files, as today
Create Lessons/ when Lessons/ exists Resolves to the existing directory
Create lessons/ when Lessons/ exists Creates a second, separate directory
List a directory Names appear exactly as they were written

Names Are Not Compared for Similarity

The platform makes no judgment about whether two different names were meant to be the same. It does not warn, refuse, or suggest when a new name differs from an existing one only by case, accent, or width. A different name is a different name, whatever the reason for the difference.

This is deliberate. Any similarity check would have to decide which differences are suspicious and which are ordinary — precisely the judgment call whose inconsistency this ARFC exists to remove. A rule that can be stated in one sentence can be relied on; a rule with an exception for names that look alike cannot. Authors and authoring clients are responsible for the names they choose, and a name that turns out to be wrong is corrected the way any other wrong name is.

Version 1 Scope

Included

Excluded

Security Considerations

Silent substitution is removed. Under a folding rule, a request for /Config/keys can be served by an object named /config/keys that the caller never named and may not have expected. Exact comparison eliminates that class of confusion, which matters most where a pathname is used to select something privileged.

Visually similar names remain distinct. Because A and A are now different characters, two directories may look nearly identical in a listing. Authorization is determined by grants on the object, never by name similarity, so this does not create an access-control risk — but interfaces that present paths to a human should not treat visual distinctness as a safety property. Since the platform does not compare names for similarity, a client that needs to draw a reader’s attention to look-alike names is the place to do it.

No new exposure. The rule narrows which names resolve to an object; it never widens it. Any request that succeeds under this rule would also have succeeded before.

Backward Compatibility

References

Author

ĀYŌDÈ Development Team