Skip to content

fix(archivist): stop filing your conversations, keep what you pin - #70

Merged
arthware-dev merged 9 commits into
mainfrom
fix/archivist-thread-ownership
Aug 6, 2026
Merged

fix(archivist): stop filing your conversations, keep what you pin#70
arthware-dev merged 9 commits into
mainfrom
fix/archivist-thread-ownership

Conversation

@arthware-dev

@arthware-dev arthware-dev commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The archivist read a long message as material to file. In a room with other people that is usually just somebody talking, and filing it produced notes named after an agent's error message. Its own card then sat in the thread, so every line typed afterwards read as a correction to that note: one paste became a reclassification loop that could not be stopped by talking.

Two rules decide who acts on a message now. With more than one person in the room the archivist stops guessing from shape, and 📌 is how you keep something. A thread belongs to the first bot that answered in it, so a family's conversation with the agent is left alone. An @-mention still reaches the archivist anywhere, and links, files and voice memos are unaffected either way: pasting a URL or dropping a PDF is a deliberate act, not a turn in a conversation.

Pinning now also tells you it landed. A note was the one capture shape that filed in silence, and classification on a local model is half a minute of it. It reacts 👀 on pickup, the same as a link or an upload.

Also here: email attachments keep filing when the mail bot hands off into a thread nobody owns yet, and a scan the archivist could not read can be corrected instead of being a dead end. docs/design/brain/who-answers.md is the written version of the two rules, and tests/integration/test_bot_arbitration_e2e.py is the executable one, green against the rig.

Talking to the family agent in a thread got filed. A long message
became a note, and every reply after it read as a correction to that
note, so the archivist kept reclassifying while you were talking to
someone else.

Inside a thread the archivist now only acts where it answered first --
its own filing threads, where corrections belong. @-mentioning it still
works anywhere. The main timeline is unchanged.
One room, several bots. Writes down the signals each of them reads,
the thread-ownership rule, and the three gaps still open (the vocative
matcher is not shared, scribe has no gate, no per-room off switch).
The thread gate was dropping them. An email's attachments arrive in the
thread under its own card, seconds before the archivist's filing lands
there, so at that moment the thread belongs to nobody and the school
permission slip went on the floor.

A source card or an attachment is addressed to the archivist by
contract, so no room or thread rule gets a say. Also adds the sequence
diagrams for the four ways a family message gets answered.
Document filing and notes/bookmarks, what each is for, and the route
each takes. The split is fine; the grain is not. Proposes the thread as
the unit the agent judges, with unconditional timeline capture kept
underneath so a model failure never loses anything.
In a room with other people in it, a long message is usually just
someone talking. Filing those produced notes named after error messages
and stray remarks nobody meant to keep.

Now the archivist only files a text message on its own when you are the
only person in the room. Everywhere else, react 📌 to keep something,
which already works at any length and in any room mode. Links, photos,
PDFs, voice memos and documents are unchanged.
Two scenarios: chat between people is not filed but 📌 keeps it, and the
archivist stays out of a thread another bot is answering in while an
@-mention still reaches it there. Parked as `unverified` until a green
rig run.
Replying to "no text recognised, please tag it manually" ran your words
as a search instead of applying them. The document that most needs you
to describe it was the only one that would not accept a description.

Every filed document now carries its filing marker, whether or not the
classifier had anything to say about it, so a reply in its thread
reclassifies it with your message as the input.
Pinning a message filed it in silence and only showed a result once the
classifier was done, which on a local model is half a minute of nothing.
It now reacts 👀 the moment it picks the message up, the same as a pasted
link or an uploaded file. Notes were the one capture shape without it,
and 📌 is the only way to keep something in a room with other people in
it, so it was the gesture that most needed the reassurance.
The arbitration spec runs green now, so the unverified marker comes off.
stacker-bot is invited when the room is created: the room is private, and
the send path joins as a plain client, which Synapse refuses. The failed
send returned an error dict that the guard read as a pass, so it now
checks for success outright. Room names and pasted text carry the scope
uid so a run's leavings can be found in a live vault.
@arthware-dev
arthware-dev merged commit 2d08281 into main Aug 6, 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