Skip to content

feat(wiki): write wiki pages from templates in the family's voice - #193

Merged
arthware-dev merged 11 commits into
mainfrom
fix/wiki-citations-and-voice
Oct 12, 2026
Merged

arthware-dev merged 11 commits into
mainfrom
fix/wiki-citations-and-voice

Conversation

@arthware-dev

Copy link
Copy Markdown
Contributor

Summary

  • Person, home and topic pages are written from Markdown templates per language (templates/<kind>.<lang>.md): the model answers in JSON, the compiler fills the slots and leaves out any section with nothing in it.
  • Person pages read warm and personal, with the facts at a glance; the home page leads with the family, what happened in the last month, the schedule ahead and the household facts; topic pages state facts and where things stand.
  • Fixes: diary citations stay on their entry across rebuilds, every declared person is on the home page, and person pages credit whoever filed a source.

Eleven commits that each stand alone, so this is meant for a rebase merge.

A person page rebuilt after new filings cited the wrong diary entries:
"heart-shaped pancakes" linked to the Halloween entry, and most dated
lines on a page with diary sources pointed at a neighbouring entry.
Document and note citations were right.

A rebuild renumbers the previous page's citations by matching each
reference to the current evidence. The References block links a diary
entry to its month page, but the match looked for the entry's own path,
so no diary citation matched, kept its old number, and every diary
entry was offered to the model as new.

- Match a source by the title and link its References row shows, read
  from one helper the References block uses as well.
- Stamp the person pages the compiler writes. A page without the stamp
  is rebuilt once from the evidence alone, so the wrong citations
  already in a page's text are not carried forward as its baseline.

Fixes: 64336b7 ("feat(wiki): restructure and polish the wiki (#159)")
A person without a chat account, such as the baby, appeared nowhere on
the home page: the Members list held only account holders and told the
model to add nobody else, and Broader Family is for relatives outside
the household.

The home page now lists everyone the person files declare, linked to
their page, account holders first.

Fixes: b9fe4e4 ("feat(memory): give every person the family knows a file of their own")
A German household read "## References" under every generated page. The
block is now titled in the household language ("Quellen" in German) on
the home, person and topic pages, and a rebuild finds the old block
under either heading, so a household that changes its language does not
end up with two.
Person pages read like a records report ("a complex, transactional
relationship"), opened with placeholders such as "No explicit family
role defined", listed diary entries as documents, and carried dates the
model had rewritten.

A person page is now filled from a Markdown template per language,
`stacklets/memory/bot/templates/person.<lang>.md`, in English and
German:

- The model writes only the prose, as JSON: a one-line tagline, a short
  About, what the person loves, one line for each of their latest
  entries, and optionally a section with a heading of its own. It is
  asked for the warm, concrete voice of a family member describing
  someone to a visiting relative.
- The compiler fills the rest: the latest entries with their real dates,
  and the documents that name the person, linked.
- A section with nothing in it is left out with its heading. An answer
  that is not the expected JSON keeps the page as it was.

Every person page is regenerated once in the new layout, by the next
rebuild that touches it or the nightly sweep at the latest.
The home page listed the family alphabetically, put Bart's friends and
classmates under Broader Family, split Maggie into Maggie and a twin
called Margaret, and filled empty sections with "No vehicle details are
recorded".

The home page is now filled from a Markdown template per language,
`stacklets/memory/bot/templates/home.<lang>.md`, in English and German:

- The family: everyone the person files declare, oldest first, each
  linked to their page with one warm line. Nobody is dropped and nobody
  appears twice, whatever the model answers.
- Relatives, friends and neighbours, and the people who help the family
  (doctor, school, teachers) each have a section of their own.
- The home, vehicles, insurance, subscriptions and memberships hold
  plain facts with citations, and appear only when there are some.

The model answers in JSON, one field per section, and is given every
name a person goes by. The compiler formats the lists, so citations
appear once at the end of a line.
A topic page was one dense paragraph in the first person or in report
voice, credited actions to the wrong person ("Homer has confirmed a
lodge booking" that Marge made), and left the topic's open todos off the
page.

A topic page is now filled from a Markdown template per language,
`stacklets/memory/bot/templates/topic.<lang>.md`, in English and
German:

- At a glance: the key facts as label and value, with citations.
- Where things stand: what has been booked, bought or decided, and by
  whom. The model is told who filed each source.
- Still to do: the open items of the topic's todo list, as the family
  keeps it.
- Notes, links, documents and what was filed elsewhere, listed by the
  compiler with who filed each and when, newest first.

The model answers in JSON with the facts and the state only; plans and
to-dos stay on the todo list. A section with nothing in it is left out.
A person page credited one person with what another did ("Homer
confirmed the booking for two rooms" that Marge made) and read a
family member's other name as someone new ("the birth of his daughter,
Margaret" for Maggie's birth certificate).

The model now sees who filed each source, as the topic page already
does, and the whole family with every name each person goes by. It is
told to credit only who filed a source or who the source names as
doing it, and that another name of a family member is the same person.
A person page told who someone is but not what a relative looks up:
when they were born, their school or job, their doctor, the car they
drive.

Under the About text, a person page now lists up to five such facts as
label and value, each with its source, read only from sources that
name the person. With none, the section is left out.

Every person page is regenerated once in the new layout, by the next
rebuild that touches it or the nightly sweep at the latest.
The home page hid the household facts at the bottom, after every
friend and teacher, left the pets off, and wrote policy numbers into
the insurance list.

The home page now has:

- **At a glance**, right after the welcome: the home (owned or rented,
  the mortgage lender), each car, the family doctor and the children's
  school, at most six lines with citations. It replaces the Home and
  Vehicles sections.
- **Pets**, listed with the family.
- Insurance named by kind and insurer, and each person or place in one
  section only.
The home page said who the family is but nothing about what they have
been up to.

Right after the welcome, a Lately section now tells the last month in
three or four warm sentences, with citations. The compiler picks the
sources, the diary entries and notes of the last 31 days, and the
model writes from those only, so an old story never reads as news and
a bill that arrived is not an event. A month with nothing filed has no
such section.
The home page told what the family did, but not what is ahead or what
comes round every week or year.

After Lately, a Schedule section now lists:

- What is ahead in the next 90 days, by date, soonest first: trips,
  bookings, appointments, school events, payments due. The model reads
  the dates out of the sources; the compiler keeps only real dates
  from today on, drops what is over or too far off, and formats them
  in the household language (`14–16 Oct 2026`, `14.–16. Okt. 2026`).
- What recurs, after the dates: practices and clubs, monthly payments,
  yearly renewals and birthdays, as a source states them.

Each line cites its source. With nothing ahead and nothing recurring,
the section is left out.
@arthware-dev
arthware-dev merged commit e71cd65 into main Oct 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant