fix(linux): normalize runtime-root dir casing (LifeOS → LIFEOS) — silent memory failure on case-sensitive FS#1406
Open
christauff wants to merge 1 commit into
Conversation
Contributor
Author
|
Note for triage: the diff is a pure |
Native runtime tools/hooks resolve the config-root runtime as mixed-case `~/.claude/LifeOS`, but DeployCore deploys it to all-caps `~/.claude/LIFEOS` (to match the `@LIFEOS/...` imports in CLAUDE.md). On macOS (case-insensitive FS) these coincide; on Linux (case-sensitive) the tools read a nonexistent path and silently return empty — e.g. MemoryStatus reports the KNOWLEDGE corpus as "no dir yet" despite it existing at LIFEOS/MEMORY/KNOWLEDGE. Normalizes the runtime-root path segment to the canonical LIFEOS across the install payload (119 refs / 91 files). No-op on macOS; fixes the silent failure on Linux. Leaves the legitimately mixed-case `skills/LifeOS` and `install/LifeOS` source-dir references untouched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
088754b to
de168be
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context (friendly heads-up: people are already deploying v6 on Linux!)
First — congrats on the 6.0.0 "one skill, one install" release. I picked it up within hours of the tag and installed it on Linux (Ubuntu), and it mostly came up beautifully. This PR reports one silent failure I hit during that deploy, with a fix. Sharing it partly because it's the kind of thing that only surfaces off-macOS, and you probably want to know early.
The bug:
LifeOSvsLIFEOS— a case-sensitivity silent failure on LinuxThe runtime is deployed to the all-caps
<configRoot>/LIFEOS/—DeployCoredoes this deliberately (its own comment: "Targets the config-root runtime at the ALL-CAPS<configRoot>/LIFEOS/so it matches the@LIFEOS/...imports in CLAUDE.md"), andCLAUDE.template.mdimports@LIFEOS/....But many runtime tools and hooks resolve the root as mixed-case
~/.claude/LifeOS— e.g.const LIFEOS_DIR = join(HOME, ".claude", "LifeOS").LifeOSandLIFEOSare the same inode → everything works, invisible.Repro (Linux)
It's looking at
~/.claude/LifeOS/MEMORY/KNOWLEDGE(nonexistent on Linux) instead of~/.claude/LIFEOS/MEMORY/KNOWLEDGE. No error is thrown — the corpus just appears empty, which is the dangerous part. After normalizing the path casing,MemoryStatuscorrectly reports the corpus.The fix
Normalize the runtime-root path segment
"LifeOS"→"LIFEOS"(the canonicalDeployCore/CLAUDE.mdalready use) across the install-payload tools and hooks — 119 references across 91 files..claude/LifeOS,CLAUDE_ROOT/"LifeOS", etc.). The legitimately mixed-caseskills/LifeOSandinstall/LifeOSsource-directory references are deliberately left untouched (verified).Notes / happy to adjust
lifeosDir()helper the tools import, instead of each re-deriving the path) would prevent the casing from drifting again — glad to follow up with that if you'd prefer it over the flat normalization.PLATFORM.mdlists Linux as "Fully Supported," so this seemed worth fixing rather than working around locally (a~/.claude/LifeOS → LIFEOSsymlink also masks it, but that's a band-aid).Thanks for building and open-sourcing this — genuinely a pleasure to deploy.
🤖 Generated with Claude Code