Fall-through
A SvelteKit project is already a map from files to meaning: src/routes/admin/users/[id]/+page.svelte is the page for /admin/users/:id. svelte-d does not flatten that map into a bag of generated names. It falls through. The kit-relative path is the workspace-relative path. Only the cell prefix changes, because the same route has to exist as preserved source, as libwasm D, as optional lang=ts glue, and — if there is a server file — as vibe.0 D.
That is why a reader can open src-d/routes/admin/users/_id_/page.d and still know which Svelte file produced it. The _id_ spelling is forced by the language and by the compiler: D cannot start a filename with +, and LDC 1.43 on Windows asserts inside globMatch if a directory name contains [. Source under src-svelte/ keeps the kit names. Dest under src-d/ is sanitized only where the identifier would be illegal. Component files are not sanitized at all: ClickField.svelte remains ClickField.d / struct ClickField. Groups (app) stay on disk and are stripped from the URL, which is what SvelteKit itself does.
The cells and their prefixes are fixed. There is not a fifth tree.
| Project | Workspace | Cell |
|---|---|---|
src/routes/+page.svelte | src-svelte/routes/+page.svelte | source, preserved |
src-d/routes/page.d | libwasm | |
src-ts/modules/generated/routes__page_svelte.ts | lang=ts jsExports + __svelteD.ts | |
src/lib/Dock.svelte | src-d/lib/Dock.d | libwasm (struct Dock) |
src/routes/+page.server.d | webserver/source/generated/routes/page_server.d | vibe.0 |
src/routes/admin/users/[id]/+page.svelte | src-d/routes/admin/users/_id_/page.d | dest dirs cannot keep [ |
src/lib/jquery-bridge.ts | src-ts/modules/helpers/lib/jquery-bridge.ts | Vite |
src/styles/app.scss | styles/app.scss | Vite |
node_modules/svelte-grid/Grid.svelte | src-svelte/ext/svelte-grid/Grid.svelte | ingested, then printed |
public/logo.png | public/logo.png | vibe.0 serveStaticFiles |
svelte-d map src/routes/admin/+page.svelte and the TypeScript export mapKitPath must agree field-for-field. That agreement is tested. Compile writes the same information to ws/.svelte-d/fallthrough.json so an adapter or a debug page can see the map without re-deriving it. Mapping a path is still not a claim that the printer has emitted every construct on that file. A +page.svelte that uses a construct the language section marks as a seam will map cleanly and then fail (or skip) at print. The map is the filesystem contract; the language section is the IR contract.