human behavior: classifier gate, pacing, splitting, quiet hours, stable prompt prefix

This commit is contained in:
Oleksandr Kozachuk
2026-07-13 15:55:26 +02:00
parent 13b9569c07
commit ae870db181
15 changed files with 510 additions and 42 deletions
+16 -6
View File
@@ -66,13 +66,23 @@ link syntax from the model reads as noise.
When the envelope `channel` is null/none/empty, the response channel
is the channel the message came from.
### ENV-10 — System prompt template substitution (coverage: test)
### ENV-10 — Dynamic context reaches the system prompt (coverage: test)
`message()` substitutes `{date}` (YYYY-MM-DD), `{time}`, `{memory}`
(the assembled memory block legacy memory string while the
structured memory is inactive, see MEM-10) in the system prompt;
`{news}` is replaced with the news file content when the configured
file exists and stays literal when it does not.
The system message carries the current date, time, news (when the
configured file exists) and the memory block (legacy string while
structured memory is inactive, see MEM-10). Since FDB-008 these live
in a context suffix, not inline — see ENV-20; legacy `{date}`,
`{time}`, `{news}`, `{memory}` placeholders in operator templates are
stripped.
### ENV-20 — Persona prefix is byte-stable (coverage: test)
`message()` renders the system message as: static persona text
(config template with all dynamic placeholders removed) followed by a
`## Context` suffix holding date, time, news and memory. Two calls in
the same channel produce byte-identical persona prefixes — the prompt
cache can actually hit (the old inline `{date}`/`{time}` substitution
invalidated it every minute).
### ENV-11 — Per-channel history shrink prefers busy channels (coverage: test)