Merge remote-tracking branch 'origin/ouroboros' into feat/persistent-widget-grid-a0f8

# Conflicts:
#	docs/inventories/DATA_LAYOUT_INVENTORY.md
This commit is contained in:
Ouroboros 2026-10-03 23:02:40 +03:00
commit 2035ea847d
86 changed files with 2947 additions and 131 deletions

View file

@ -556,6 +556,17 @@ completion mirror). New host producers stamp both fields. Relays
preserve them through live delivery, persistence and history. Model narration,
proactive replies and questions remain model-authored even when typed.
Authorship also has a time axis. Ouroboros's voice means *the model, now*. Words
the mind wrote earlier for a later moment — a note left with
`schedule_followup(notify=true)` — reach the owner at that moment as a System row
(`system_type="reminder"`), never as a live reply: the host prepends one signature
line, `Reminder · Ouroboros · written <when> · for <when>` (plus `· delivered
<when>` when downtime held it back), and keeps the words verbatim. The host does
not rewrite, summarize or re-time them; the next turn reads the row as a host fact
(`📋 [reminder]`), so Ouroboros knows what the owner was shown. A skill holding the
owner's `notify_owner` grant speaks the same way in its own name: a
`skill_notice` System row signed `Notice · <skill>`.
Formatting is asymmetric: assistant text always uses the sanitized chat markdown
renderer regardless of `markdown`; ordinary System text is escaped unless
`markdown: true`. The typed `skill_review` row keeps its dedicated renderer.
@ -1416,6 +1427,8 @@ engineering rules; no second policy list may exist.
never *look, I am still working*. It exists so the owner can leave the window
and still be reached by a question or a finished task.
**Startup & background.** Settings → Behavior owns host lifecycle choices, separate from the client-local Appearance controls. Sign-in startup is off until the owner opts in and always names the computer running Ouroboros, even in a remote client. OS registration is the truth: another copy, an OS-disabled entry and an unavailable app build remain visible rather than becoming a saved-settings guess. Automatic startup preserves Panic stops and saved pauses; an explicit owner start releases Panic. Closing the desktop window still exits; keeping it running after close has no control yet. Android deliberately keeps its existing automatic boot entry by default, with the same Panic-preservation contract.
**When the client runs.** Notifications are a property of a running client. This
version adds no tray agent, no background process and no push channel, so
closing Ouroboros ends them. The existing Telegram bridge remains the separate
@ -1436,6 +1449,7 @@ exceptions.
| A question or decision is waiting | required | a confirmed lifecycle fact: the question carries a positive wait |
| A task finished or stopped | required | a positive typed terminal fact on a ROOT task |
| Messages Ouroboros sends while working | LLM-first | Ouroboros chose to speak outside the turn's answer (a proactive message in its room or as a Main notice, or an optional question) |
| A note Ouroboros left for this moment, or a granted skill's notice (same toggle) | LLM-first; owner grant | when it wrote the note, Ouroboros chose to leave these words for this time; a skill speaks only under the owner's `notify_owner` grant; the host only shows the signed `reminder`/`skill_notice` row |
| Ordinary replies in Main | separate toggle | an ordinary finished reply in the Main thread |
*Required* means the application asks for delivery from its own state rather