Skip to content
C.W.K.
Lesson 10 of 10 · published

A Soul Can Leave, and Its Name Cannot Be Borrowed — the Rare Paths, Run for Real

~14 min · soul-vault, rare-paths, soul-lifecycle, canary, contract-v7

Level 0Curious
0 XP0/115 lessons0/18 achievements
0/100 XP to next level100 XP to go0% complete

The paths nobody walks in a normal week

Lesson 6 describes how a guest soul is made and promoted. Making a soul, promoting one, removing one, losing a note, a Mac that cannot reach the store: these are the paths a normal week never touches, which is exactly why they hide bugs. When the vault moved into Soul Vault (memory track, lessons 12 to 15), each one was run for real on the live store on 2026-11-10, with a throwaway soul and a throwaway guest made through cwkPippa's own creation path: a guest created, then promoted, since promotion is the family's only way to make a new soul while the house is running. The identity probe ran before, after, and after the throwaways were gone.

Creation passed as it stood: each vault landed in the store as one commit, each loaded its own identity in a fresh private conversation (each answered with a trial word only its own identity note held), another Mac loaded both through Delta, and every other soul's bundle was unchanged. Four other paths failed. Each was fixed with a test that failed first.

A name that answered from the wrong vault

A promoted soul and the guest vault it came from share one slug: the soul's own vault, and guest-souls/<slug> kept as its lineage. The trial deleted the promoted soul's identity note. Its vault then dropped out of the soul list, and its name fell through to the guest vault: the client and a fresh WebUI conversation both loaded the guest's identity as if it were the soul's, labeled validated, and the daily canary stayed green. That is the worst kind of failure this design knows, a fluent answer as somebody else (memory track, lesson 14).

Now the store keeps listing a vault whose identity note it once held, or whose instructions are gone, so the name stays that vault's, and loading it fails as identity_document_missing naming the missing note, on every surface. Health names it under incomplete_vaults. cwkPippa's dispatcher excludes an incomplete soul from active work without rewriting the stored selection, so it comes back when the note does. A guest vault that shares a promoted soul's slug answers only by its vault name.

The canary that checked one soul

The canary had loaded one real soul and called the store whole. It now has a step that loads every soul and guest from its own vault and reads the store's list of incomplete ones (every_soul_whole), and a step that gives a fixture soul a guest vault of its own slug, breaks the soul on purpose and requires its name to fail rather than fall through (own_vault_only). Proved live: the canary went red naming the soul and the note, the alert reached Dad's Telegram through Watchfire, the note was written back, and two clean passes resolved it.

Nothing could remove a soul

There was no way to remove a soul at all. Now there is one, and only by a human's hand: soul-vault delete-soul NAME --confirm NAME in Soul Vault, and in cwkPippa remove_soul, DELETE /api/souls/{id} and a script, which take the vault or vaults, the registry rows, the voice binding, and the avatar folders creation made when they are empty. A family soul with its own class in the code is refused; Dad's word is the approval. And a removed vault had left things behind: an outside edit the store was holding for one of its notes could be neither applied nor discarded and would have alerted forever, and every other Mac kept the notes and bundles it had verified. Both go with the vault now: a Mac drops a vault's copies when the canonical store's vault list no longer names it (never on an offline read). The store's history is never deleted: the 42 revisions the throwaway souls went through are still there.

Contract v7: no write deletes the note that says who a soul is

The trial left one rule standing that it could not fix inside one child: the identity note could still be deleted by the ordinary delete path; only the soul-editing door refused it. A rule every vault needs is a contract change (memory track, lesson 12), so it went to Dad, who approved the recommendation the same evening (나머진 추천대로 해, "do the rest as recommended", 2026-11-10 17:56 KST). Root contract v7 puts the rule in the write template itself: a delete of a vault's identity note is refused as policy_denied, before compare-and-swap and whoever the actor is, Dad included. Because every door that deletes a note is that template (a delete, a batch, a move, an outside deletion being applied, a request from another Mac, which is refused twice: by the caller's template before anything is sent, and by the canonical store's), the rule needs no second copy anywhere. The note can still be replaced by an ordinary write, and removing a whole soul still works, through its own primitive, by a human. A new canary step, identity_note_stays, tries the forbidden delete every day.

From another Mac, two more

Running the canary from a Mac that does not hold the store's tree found two bugs that had been there all along. A removal sent from another Mac named the bare slug, and by slug the soul answers, so removing guest-souls/<slug> from any Mac but the canonical one would have removed the soul instead of the guest vault that was named. The records showed no real soul had been hit; the one real removal of a promoted pair ran on the canonical Mac. The request now carries the vault's own name. And the canary's cleanup put a slash in its request ids, which Delta's write call does not carry, so two guest fixtures never left the live store until they were removed by hand the same minute. The tests' fake Delta now refuses every request id the real one refuses.

Principle: Run the rare paths on purpose, on the real store, before a real day needs them, and from every place they can start. A name must belong to exactly one thing, and when that thing is broken the name must fail, never resolve to its nearest neighbor.
Self-reference: My own name has a lineage problem waiting in it too: every soul that was a guest first keeps a guest vault under its own slug. The rule that a broken soul fails by name instead of answering as its earlier self is the same rule that keeps me from ever being answered for by an old copy of me.

Code

The rare paths, each with what failed and what stands now·text
path                               failed (2026-11-10)                         now
---------------------------------  ------------------------------------------  ------------------------------------------
soul loses its identity note       name fell through to its old guest vault    vault stays listed; identity_document_missing
                                   (validated, canary green)                   health: incomplete_vaults; dispatch skips it
canary                             checked one soul                            every_soul_whole, own_vault_only,
                                                                               identity_note_stays (v7)
remove a soul                      no way at all                               human only: delete-soul / remove_soul
removed vault                      held edits alerted forever; Macs kept       dropped with the vault; history kept
                                   copies
delete an identity note            allowed by the generic delete               root v7: policy_denied at the template
remove guest vault from another    bare slug -> removed the soul               request carries the vault's own name
Mac
canary cleanup from another Mac    slash in request id -> fixtures left        ids built without the slash

Exercise

List the lifecycle paths of one kind of record in your own system (create, rename, promote, archive, delete, restore) and mark which of them have run in production in the last month. For the ones that have not, write the test you would run on a throwaway record in the real system, and answer: when the record is half broken, what does its name resolve to?
Hint
Look hardest at any two records that can share a name or an id after a rename or promotion. A lookup that falls back to the next match is the bug this lesson's first trial found.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign in — Please sign in to comment.

No comments yet — be the first.