Repository navigation
feat(memory): give every person the family knows a file of their own - #191
Merged
Merged
Conversation
Who the family is and who it knows was guessed in four places. The design now names one model for it: - A person is one entity with two sources. The family declares each person in a file of their own, `family/people/<id>.md`: the full name, the other names they go by, their chat account if they have one. The wiki's person page is the compiled projection of it. - Membership is derived, not declared. In the first iteration a person with an account is a member; a later iteration suggests members from the records and asks the family first. - Records gain `mentions`, the people outside the household they name, written by the same call that classifies them. - A person registry is compiled from those mentions: names, aliases, the kind of relation, how present a person is, and the records it cites. The family's corrections are edits to the same declared files. The wiki's people tiers are a projection of the members plus the registry. - A nightly plausibility pass (the dream cycle) is named as later work. - ADR-011 gets an update: the agent may answer from compiled pages whose statements cite their records, reading the records filed since the last compile.
The wiki guessed who the family is from vault folders and the names in documents, so a `media/` folder became a member page carrying the baby's data, and a person without a chat account had no page at all. Each person now has a file, `family/people/<id>.md`, in the vault's frontmatter format: `type: person`, the full name as `title`, the other names the family uses as `aliases`, and `account` for a person with a chat account. A person with an account is a member of the household. Every `stack up memory` adds a file for each account that has none and never rewrites an existing one, so an existing install switches over with a restart of the memory stacklet. Until a file exists, the wiki keeps its old roster. With the files, the wiki gives every declared person a page under the names their file gives, also before anything names them, and its home page lists the members. Names in documents resolve through the aliases, generated person pages nobody declares are removed, and a change to any file rebuilds every person page (`--members`). A file that breaks the schema is never guessed at: the readers name it and leave it out, no page is removed while one is broken, and `stack memory write` refuses it with the reason. The schema sits with the other types in the frontmatter validator, which now knows a declared `person` and fields that must hold a single value. An update reaches it with `./stack restart memory`; add anyone without an account (a baby) as a file of their own in `family/people/`.
The archivist knew the family from the Paperless `Person:` tags, which are seeded from the accounts' first names. A person without an account had no tag and was never filed, and a document naming "Margaret" could not be matched to Maggie. With person files, the classifier and the capture prompt list every declared person with every name the family gave them, accounts or not. A returned name resolves through those names to the person's first name, and a person without a `Person:` tag gets one the first time a document names them, so no restart of the docs stacklet is needed. `stack memory prompt` shows the block the classifier receives and names any person file that was skipped, with the reason. Without person files, nothing changes. Refs: #154
Transcription and the diary cards took the family from `FAMILY_NAMES`, the accounts' names, plus the wiki's person pages. A baby without an account was missing from the transcription vocabulary, and a person page the old wiki roster made for a folder counted as family. With person files, the vocabulary, the transcript correction pass and the card people are the declared people and every name they go by; person pages count only for declared people and add the spellings documents used. Cards list people by first name, as their `Person:` tags do. Until the files exist, `FAMILY_NAMES` stands in as before. Closes: #154
A member's names from the household page reached their page's
frontmatter, but nothing showed them. The page header now adds "Also
known as" with the other names next to the date: Bart's page says
"Also known as Bartholomew". A name made only of words in the title
("Maggie" under "Maggie Simpson") is left out. Sender pages show their
aliases the same way.
The base memories corpus covers four weeks and tests dating and threading. `spec.people.en.yaml` spreads 47 memories from March 2024 to September 2026 and names the people around the Simpsons the way a real room does: grandparents rarely but for years, a best friend often, a teacher for one school year, a doctor for one month, a bully often without being close. Its `people` block is an answer key of who each person is to the family, written independently of how often the corpus names them, and every item lists who it mentions. `generate.py --corpus` and `ingest.py --corpus` render and replay a named spec next to the locale corpora.
arthware-dev
force-pushed
the
feat/household-members
branch
from
October 9, 2026 12:36
41589a7 to
580c519
Compare
6 tasks
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.
Summary
family/people/<id>.md(title,aliases,account), checked by the frontmatter validator. A person with an account is a member of the household.stack up memoryadds a file for each account and never rewrites one, so a restart is the whole upgrade.stack memory writerefuses it,stack memory promptlists it, and no page is retired while one is broken.Rebase merge: each commit stands alone and is its own changelog line.
Closes: #154