Carry project memory in the repo, with tools/memory-sync.sh
Claude Code keeps per-project memory at <home>/.claude/projects/<key>/,
where <key> is the project's absolute path with every separator and the
drive colon turned into a dash. That makes it both rename-fragile and
machine-specific, and this project has hit each of those once:
- D:\DEV\Schunix -> D:\DEV\SchOS changed the key, and 43 memories were
invisible until moved across by hand.
- Development happens from Windows and from Linux, and each looks in a
different place for the same checkout.
Committing .claude/memory/ fixes both -- git carries it across renames
and between hosts -- and `import` puts it wherever the local machine
expects. .claude/settings.local.json stays ignored: those are per-machine
permissions.
The colon maps to a dash rather than being dropped. Deleting it gives
D-DEV-SchOS, which matches nothing and silently finds zero memories; that
was the first attempt. On Git Bash the key comes from `cygpath -w`,
because Claude Code is a Windows program and sees D:\DEV\SchOS, not
/d/DEV/SchOS.
This commit is contained in:
parent
cda5908660
commit
3182da3965
47 changed files with 2810 additions and 0 deletions
76
.claude/memory/schos-rename-and-git.md
Normal file
76
.claude/memory/schos-rename-and-git.md
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
---
|
||||
name: schos-rename-and-git
|
||||
description: "Schunix is now SchOS, the kernel is SchIFT; the tree is under local git as of 2026-08-09"
|
||||
metadata:
|
||||
type: project
|
||||
---
|
||||
|
||||
**On 2026-08-09 the project was renamed from Schunix to SchOS**, to drop the
|
||||
"-unix" element and any trademark exposure to The Open Group. Nexoniarz's
|
||||
ecosystem layout:
|
||||
|
||||
| Layer | Name |
|
||||
|---|---|
|
||||
| Operating system | **SchOS** |
|
||||
| Kernel | **SchIFT** |
|
||||
| Desktop environment | SchDE |
|
||||
| Window manager | SchWM |
|
||||
| Compositor | SchCom |
|
||||
| API / subsystem | SchAPI |
|
||||
| File system | SchFS (unchanged) |
|
||||
|
||||
**Every memory written before this date says "Schunix" and is filed under a
|
||||
`schunix-` slug. That is the old name for this same project -- read it as
|
||||
SchOS.** They were deliberately not renamed: 42 files and every `[[link]]`
|
||||
between them, for no gain.
|
||||
|
||||
**SchOS vs SchIFT is a real distinction, not a synonym.** Nexoniarz chose the
|
||||
split explicitly. SchIFT appears *only* where a Unix names its kernel:
|
||||
|
||||
- `uname(2)` sysname -> `SchIFT` (nodename is `schos`, it is the host)
|
||||
- `/proc/version` -> `SchIFT version 0.1.0 (schift) #1 SMP x86_64`
|
||||
- the two licence sentences that say "kernel" outright, in LICENSE.MIT and
|
||||
NOTICE
|
||||
|
||||
Everything a user reads as the product is SchOS: panic screen, boot menu,
|
||||
error prefixes, docs, LICENSE, NOTICE. `schunix.img` is now `schos.img`;
|
||||
`__SCHUNIX__` is `__SCHOS__`. The kernel source stays at `kernel/`, not
|
||||
`schift/` -- asked and declined, to keep the diff small.
|
||||
|
||||
The `Assets/SchOS * Logo.*` files are renamed but the **artwork inside the
|
||||
Full and Text logos may still spell the old name as vector paths**. That is
|
||||
design work, not a code change.
|
||||
|
||||
## The tree is under git now -- local only
|
||||
|
||||
`git init` on 2026-08-09, first commit `d0f7acf` = the tree as it stood before
|
||||
the rename, second `e04ca28` = the rename. Before this there was **no version
|
||||
control at all**, which had already cost real damage: a blanket `sed` rewrote
|
||||
`#include` lines and string literals with no way to undo it.
|
||||
|
||||
`core.autocrlf` is **false** and `.gitattributes` pins `* text eol=lf`. This
|
||||
matters: the build runs under Git Bash, and a Makefile recipe or `.S` file
|
||||
checked out with CRLF fails in ways that point nowhere near the cause.
|
||||
|
||||
`.gitignore` excludes `build/`, `sysroot/`, `dist/` and the images -- `dist/`
|
||||
alone is 61 MB of upstream tarballs the build re-fetches.
|
||||
|
||||
**There is no remote and there must not be one.** See
|
||||
[[nexoniarz-sharing-preference]] -- the standing rule is that unfinished work
|
||||
never leaves the machine. Local commits are fine and wanted; `git push` is not.
|
||||
|
||||
## The rename broke two things, both the same mistake
|
||||
|
||||
Both found by `tools/bootcheck.ps1`, neither visible at compile time:
|
||||
|
||||
- `cmd/shmtest/main.c` wrote `"SCHUNIX-MMAP-OK"` with a hardcoded length of
|
||||
`15` and compared it back by hand-counted offsets (`m[3]=='U'`,
|
||||
`m[14]=='K'`). The shorter marker made the write run two bytes past the
|
||||
literal and the compare read past the data -- **failing a file-backed mmap
|
||||
that was working perfectly.** Now one constant plus `sizeof`.
|
||||
- bootcheck asserted a 31-byte file after appending to `"hello-from-schunix"`;
|
||||
the shorter string makes it 29.
|
||||
|
||||
**The lesson for any future rename: grep for string literals whose length is
|
||||
written out separately from the literal.** A compiler cannot catch it and the
|
||||
failure looks like a broken subsystem.
|
||||
Loading…
Reference in a new issue