Repository navigation
A patch that completes the curator's new form: the line on the day's wellbeing now keys on a class the model sets on each fact, not on a predicate name the sidecar never writes (#1456), and a recall quote survives when the guard cuts its source (#1451). The LongMemEval harness runs again (#1454), and the live voice path sends its app id like every other model call (#1455). A model twin swapped in right after its original was stamped now takes the seed of its library package (#1250). A recall block that only repeats an answer already in the window now counts as a repeat even when that answer carried its sidecar block (#1458).
Fixed
- voice: the
gpt_livesession handshake names its app (#1455). The live model's session socket opened with the credential alone, so the phone was the one model request without an app attribution, and theduplexblock refusedx_titleandhttp_referer, so a set could not add one. Thegpt_liveblock now takes both keys and sends them on the upgrade request asX-TitleandHTTP-Referer, as anllmcell does. When a key is unset, its header is not sent. Thevoicetemplate now carries the attribution itself:x_titleandhttp_referersit at the top ofparamsas env defaults (${OPENROUTER_X_TITLE:-MeClaw},${OPENROUTER_HTTP_REFERER:-https://meclaw.ai}), and agpt_liveblock that names neither inherits them, so an instance a set switches to duplex throughoverride_paramsnames its app without knowing the keys. A value in the block wins. - LongMemEval recall harness: a question whose first session is empty is measured (#1454). The memory store builds its schema the first time it wakes, and only a written turn wakes it. A question whose first haystack session has no turns (23 of the 500 in
longmemeval_s) read the store before that and ended after two seconds withno such table: episodes. Before the first write the snapshot is now zero without a read. After it, a missing table still ends the question. When a question ends early, the annotation sessions that are still running now stop after their current call. They used to keep calling the annotator for minutes, alongside the next question. - curator:
recall_in_walldecides after the overflow guard, against the wall rows that are sent (#1451). Stage one only marks the recall pairs of earlier rounds as candidates; once the guard has cut the window, a pair is left out only when every quote it carries still stands raw in a wall row that survived the cut. Before, the check ran against the whole wall before the guard, so when the guard cut the quoted turn, the turn and its recall were both gone -- a recall whose quoted turn the guard cut now stays in the window. The pair leaves before the window is ordered, so a recall of the oldest sent round is no longer folded into the person's words and sent a second time while the snapshot names it dropped. The knob ships off, and off nothing changes. A new test runs the curator with all ten knobs of a set's curator form on at once: the overrides pass the door of a birth, the calls run clean, and each knob keeps the effect its own test claims. - curator: the wellbeing line keys on a class the model sets on the fact, not on a predicate (#1456).
wellbeing_lineopened only on afactmark with the predicatehealth, orneedswith the stanceunfulfilled, but the sidecar writes predicates as open keys (has_symptom,reports_symptom,health_status, ...) and never wrote either, so the line never opened in a real conversation. A sidecar fact may now carry the closed classwellbeing: truewhen it says how the person is doing right now, in body or mind: the memory contract names it with two examples, the offered schema declares it as an optional boolean,extract-gluestages it only astrueand interprets nothing, andcurator/intakekeeps it on thefactmark withfact_mark_kind"1". The line in./historyand./policy(one text, byte for byte) now takes the newest classed fact of the day at any predicate; the deadhealthandneedsbranches are gone. Off (wellbeing_line"0",fact_mark_kind"0"), nothing changes. - mutation: a model twin swapped in right after its original was stamped still takes the library seed (#1250). The swap reads the original's provenance from the colony's registry index, whose rows the writer commits asynchronously; a swap that arrived before the writer had committed the original's stamp found no package and handed the twin the
seed/of the original's directory instead. A mutation now fences the writer before it reads the index, so every stamp enqueued before it counts. - curator:
recall_in_wallmatches a recall of an answer that carries a sidecar block (#1458). The wall's answers were hashed with their sidecar block, while the memory hive quotes only the spoken words, so no quote of an answer ever matched and every recall block holding one stayed in the window. The answer is now hashed without the block, cut at the same fence the splitter cuts. The knob ships off, and off nothing changes. - Template versions (#1451): third digit,
curator@1.24.1; third digit for the pins that follow,assistant@3.12.6,builder@1.32.6,builder-librarian@2.2.108,cogny@5.14.1,figure@2.0.20,meclaw-os@2.4.6,member@2.9.6,memory-hive@3.21.2,org@2.2.21,simple-agent@2.2.18,talky@6.18.1. - Template versions (#1455): second digit,
voice@2.9.0; third digit,freeswitch@3.1.4.