Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion docs/design/brain/wiki-page-anatomy.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,58 @@ their keep, spokes.
4. **Links.** Timeline, todos, interests, documents, related entities.
The link graph is the API for agents that need to go deeper.

### The person page template (built)

A person's `about.md` is filled from a Markdown template per language,
`stacklets/memory/bot/templates/person.<lang>.md` (English and German).
The template's headings are what the family reads; each `{{slot}}` is
filled by one side:

| Slot | Filled by | What it holds |
|---|---|---|
| `name`, `first_name` | compiler | the person's file |
| `tagline` | model | one warm line: who they are in the family |
| `about` | model | two to four sentences about them today |
| `loves` | model | up to five things, people, places or pastimes they love |
| `more` | model, optional | one section of its own choosing, with its own heading |
| `lately` | compiler, one line each by the model | the six newest entries naming them (not documents), with their real dates |
| `documents` | compiler | the documents naming them, newest first, linked |

The model answers in JSON, one field per slot, and writes in the
household's voice: warm, concrete, the way a family member would
describe someone to a visiting relative. It never writes a date, never
lists a document, and cannot credit an entry to the wrong day, because
those slots are not its to fill. A paragraph whose slot is empty is
left out with its heading, so a page never says "nothing recorded". An
answer that is not the JSON object keeps the page as it was.

Each page carries a stamp with the layout it follows. A page with an
older stamp is regenerated from the evidence once instead of being
kept as the baseline for the next rebuild, so a layout change reaches
every page by the next nightly sweep.

### The home and topic page templates (built)

The home page and every topic page follow the same split, each from its
own template (`home.<lang>.md`, `topic.<lang>.md`, shared code in
`page_template.py`):

- **Home.** The compiler lists everyone the person files declare, linked
and never dropped, in the order the model gives (oldest first). The
model writes the welcome and one line per person, and reads relatives,
friends and neighbours, the people who help the family, and the
household facts (home, vehicles, insurance, subscriptions,
memberships) out of the sources. The welcome is warm; the facts are
plain.
- **Topic.** Facts and state, no prose: the model gives the key facts as
label and value and what has happened (booked, bought, decided), with
who did it. The compiler lists the open items of the topic's todo
list as the family keeps it, and everything filed under the topic
with who filed it and when.

Correspondent pages stay as they are: facts the compiler renders from
the documents, no model prose.

### Entity types and slot templates

The ontology defines which pages exist; each entity type brings a
Expand Down Expand Up @@ -154,7 +206,8 @@ command), whether todos are also assigned to non-capturing members

1. **Profile-card prompt** for person about pages: curated, recency-
weighted, anti-conflation, token-capped, trivia-if-present. The
35B batch run is the quality reference.
35B batch run is the quality reference. Built as the person page
template above (2026-10).
2. **One non-person entity page** (the car). Forces entity types and
slot templates to become real instead of theoretical.
3. **Todos**: capture → render → nag, in that order; render alone is
Expand Down
Loading
Loading