Who is this?
Every image request in Avatars eventually asks one question: who is in it? Avatars never answers that from its own memory. Souls live in Pippa's soul registry. Registered people live in Pippa's human registry. Avatars asks, every time, and keeps no private list that could disagree. The soul list in the WebUI says it in one line, Soul identity comes from Pippa’s registry., with a link that opens Pippa so a new soul is registered there and nowhere else.
That is the first move of this track. Identity is data with one owner, and every other place asks the owner.
Why the key is soul_pk
A soul can be named three ways. Its soul_pk is immutable. Its current slug and its display name are projections that may change. Pippa's resolver accepts the immutable key, the current slug or an active alias, but the record it returns always carries the soul_pk, and that is what Avatars stores: on a set, on a reference profile, in an asset's subject list. The house invariant is short: Only registry-bound active souls can own avatar sets. Stable soul_pk survives renames. Rename a soul next month and its avatars, references and lineage still point at the right owner, because none of them ever held the name.
Pippa Quest covers how souls are born and registered. This track only cares how a picture finds one.
People are subjects too
Some pictures depict a registered person. Dad's journal covers and channel thumbnails often have Dad in them. A person is not an AI soul: no brain, no vault, no voice. The architecture's answer is to bring people into the same wire field without turning them into souls. Pippa's adapter builds a HumanAvatarSubject from the human registry. The user ID goes into soul_pk, kind is "human", and is_super is fixed to false.
So one field carries both, and kind says which authority vouched for the record: perpetual and guest come from the soul registry, human from the human registry. Sets, reference profiles, generation and publication then work the same way for both. The ID dad is a subject exactly as pippa is, and nothing in Avatars has to branch on which registry it came from.
Strict on the way in
The resolver tries the soul registry first, then the human registry, and the second lookup is the strict one. Pippa's user registry offers two lookups on purpose. The lenient one answers Dad for any ID it does not know, which suits an old log line that never recorded a viewer. The strict one raises. The avatar path uses the strict one, and the comment on that line states the reason: a typo must never become Dad. A misspelled soul ID that quietly resolved to Dad would put the wrong face in a picture, and every record downstream would say it was intended.
Then validate_subjects checks two more things for each subject. The entry must be active, so a soul the registry has retired cannot appear in new work. And when an acting soul is named, a protected Super Soul passes only if it is the soul that is acting. Pippa's route turns a PermissionError into 403 and a ValueError into 409, so the caller learns which kind of no it got. Track 8 teaches protection properly. Here it is enough to notice that the check runs where the registry lives, not in Avatars.
Viewer modes are not people
Pippa's user registry holds more than people. Quiet Mode switches Dad's session into a guest view that hides screen-safe conversations, and there are other access projections like it. They are rows in the user registry, and a careless projection would make each of them an avatar subject. The base class closes that door: avatar_root is None unless an actual person opts in, and human_subject refuses a user without one with This user is a viewer context, not an avatar subject. The subject list is built the same way, only from users who have an avatar root. The architecture puts it in one sentence: Unknown IDs and viewer modes are rejected.
Avatars asks every time
Avatars' Upstream.subjects posts the ID list, with the acting soul beside it, to Pippa's /api/avatar-studio/subjects, and Studio.subjects removes duplicates before it asks. The question is asked when a plan is made, when a reference profile is read or saved, when an asset is opened as a reference, and when the subject directory is drawn for a brain. There is no local copy that could drift from the registry. The cost is one call to Pippa; the payoff is that a soul retired in the registry this morning stops appearing in plans this afternoon, with nobody editing Avatars.
An unbound photograph is still welcome. Not every reference depicts a registered subject: a landscape you uploaded for its light is an ordinary composition reference with an empty subject list, and nobody has to pretend it is a soul.