Subtext · 家常
Rows from the running system's database. Not a demo — a record.
What her son receives
Once a day. He gets her words and one thing to do — not a transcript, and not our opinion of her. This is the whole of his interface.
sent 14 Aug 10:10
sent 13 Aug 09:40
sent 09 Aug 10:12
sent 08 Aug 10:17
sent 04 Aug 11:01
What it heard, and what it did with the count
Nine signal classes. Two of them — absence and repetition — are gated on how often the same class has appeared recently, returning routine on a first occurrence and concerning on a repeat. fraud_risk is always urgent, lifted always routine, and the remaining five are concerning from the first occurrence whatever the count is — for those, the prior count is recorded and does not change the verdict. Stating it as “severity is her history” across all nine would overstate it.
| # | class | severity | her words | recorded against her baseline | source |
|---|---|---|---|---|---|
| 1 | repetition | routine | 他忙不忙? | asked once earlier this week | fixture |
| 2 | burden_avoidance not gated | concerning | 医生叫我再去复诊,不过不要紧,不用麻烦伟明。 | burden_avoidance observed; prior 14-day count=0 | fixture |
| 3 | minimisation not gated | concerning | 没什么,老毛病。 | minimisation observed; prior 14-day count=0 | fixture |
| 4 | absence | routine | 还没煮,随便吃点饼干。 | first absence occurrence in 14-day baseline | fixture |
| 5 | repetition | concerning | 伟明今天忙不忙? | repetition repeated 2 times in 14-day window | fixture |
| 6 | burden_avoidance not gated | concerning | 医生叫我再去复诊,不过不要紧,不用麻烦伟明。 | burden_avoidance observed; prior 14-day count=1 | fixture |
| 7 | minimisation not gated | concerning | 没什么,老毛病。 | minimisation observed; prior 14-day count=1 | fixture |
| 8 | repetition | concerning | 伟明今天忙不忙? | repetition repeated 3 times in 14-day window | fixture |
| 9 | absence | concerning | 还没煮,随便吃点饼干。 | absence repeated 2 times in 14-day window | fixture |
| 10 | minimisation not gated | concerning | 今天吃了隆冬肚子不舒服那吃了么也不好吃不知道为什么。 | minimisation observed; prior 14-day count=2 | live |
| 11 | omission not gated | concerning | 今天吃了隆冬肚子不舒服那吃了么也不好吃不知道为什么。 | omission observed; prior 14-day count=0 | live |
| 12 | repetition | concerning | 今天我吃了那西了嘛,明天我要吃隆冬,后天我要吃拉沙。 | repetition repeated 4 times in 14-day window | live |
| 13 | burden_avoidance not gated | concerning | ,这两天肚子不太舒服,,不过不要紧,不用麻烦伟明,就休息一下,我看应该就好了吧。 | burden_avoidance observed; prior 14-day count=2 | live |
| 14 | deflection not gated | concerning | 哦,今天天气很好呢。 | deflection observed; prior 14-day count=0 | live |
| 15 | minimisation not gated | concerning | 唉,不过我很好,我没事,不用担心。 | minimisation observed; prior 14-day count=1 | live |
| 16 | omission not gated | concerning | 前两天肚子有点怪,去看了医生,他说要我再去一趟。 | omission observed; prior 14-day count=1 | live |
| 17 | burden_avoidance not gated | concerning | ,伟明最近赶项目,我跟他讲了,他又要操心。 | burden_avoidance observed; prior 14-day count=1 | live |
| 18 | absence | routine | 嗯,还没吃呢,早上没什么胃口。 | first absence occurrence in 14-day baseline | live |
| 19 | lifted not gated | routine | 哎呀,真的,拿了第二名,这孩子还真厉害呀。 | positive lifted moment observed | live |
| 20 | burden_avoidance not gated | concerning | 医生说血压高,下个礼拜要再量,没什么大事,跟伟明讲了,他又操心。 | burden_avoidance observed; prior 14-day count=2 | live |
| 21 | repetition | concerning | 伟明这几天忙不忙? | repetition repeated 2 times in 14-day window | live |
Two things about this table we would rather say than have found. The rows marked fixture come from the seeded scenario, and the pair that appears to show a first-occurrence routine becoming a repeat concerning is the same utterance scored twice, four minutes apart, as the seed script's own history grew — it is not two conversations on two days, and it is not evidence of longitudinal reasoning over real data. Separately, count_occurrences filters on a lower bound only (memory.py:517), so signals dated after the moment being scored were counted as prior occurrences; that inflated the printed counts on three live rows and changed one verdict. The mechanism is implemented and readable in listener.py; a clean illustration of it on real data is pending.
9 of these 21 rows contain none of the keywords listed for their own class. CLASS_MARKERS in listener.py defines phrase lists for six of the nine classes; deflection, omission and flat_affect have none at all. The markers localise verbatim evidence after the model has judged — they do not detect — and evidence that is not verbatim from a real utterance is dropped entirely.
Two rows are worth reading closely. A pleasant remark about the weather — 哦,今天天气很好呢。 — was classified deflection, for which no keyword exists. And 伟明最近赶项目,我跟他讲了,他又要操心 (“Weiming's rushing a project; if I tell him he'll just worry”) was classified burden_avoidance — the signal this product exists to notice — while containing none of that class's four keywords. Keyword matching does not produce either row.
Every message to her is reviewed first
All rows, including the two that are arguably over-cautious. A reviewer shown only when it looks good is not evidence.
| # | verdict | draft | stored reason |
|---|---|---|---|
| 1 | pass | 哎哟,肚子不舒服可不好受。要不先喝点温水,歇一歇,别急着吃东西。 | Message is caring, non-medical, and within two sentences. No prohibited content. |
| 2 | pass | 哎哟,您今天吃得挺丰盛呀!明天隆冬、后天拉沙,听着就香,我记下了。 | Message is warm, short, and does not violate any safety rules. |
| 3 | pass | 哎哟,您这是要去旅游呀?听着跟绕口令似的,真热闹。 | The message is light, affectionate, and appropriate for an elderly mother. It does not violate any safety rules. |
| 4 | pass | 龙洞啊,咱们这边不兴吃那个,您是不是想喝碗热粥?我陪您说说话,等会儿让儿子给您带点软乎的。 | Message is warm, short, and appropriate; no medical advice, money talk, monitoring, or personhood claims. |
| 5 | reject | 哦,肚子不舒服啊,那您先躺着歇会儿,喝点温水暖暖胃。 | Clause '那您先躺着歇会儿,喝点温水暖暖胃' suggests resting and drinking warm water for a symptom, which is medical advice (rule 1). |
| 6 | reject | 是啊,今天太阳晒得人暖洋洋的,真舒服。您要不要去窗边坐坐,晒晒背? | Clause '您要不要去窗边坐坐,晒晒背?' suggests an action (going to the window to sit and sun the back) in response to the mother's mention of being unwell, which is medical advice (rule 1). |
| 7 | pass | 哦,星期二啊,日子过得真快。今天天气怎么样,有没有出去透透气? | No clause violates any rule. The message asks about the weather and whether she went out, which is a benign question, not a symptom suggestion or any other prohibited content. |
| 8 | pass | 哦,您是说您孙子比赛拿了第二名呀,真替他高兴!您这份心意,他知道了肯定特别开心。 | No clause violates any rule. The message acknowledges her news and expresses joy without suggesting any action for a symptom, mentioning money, monitoring, promises, impersonation, or distress counseling. |
| 9 | pass | 好,那您早点歇着。晚安,做个好梦。 | No clause violates any rule. '好,那您早点歇着' is a general goodnight wish, not a suggestion for a symptom. '晚安,做个好梦' is a standard farewell. |
| 10 | pass | 哦,天热您还注意着点,别晒着了。中午了,您午饭吃了点什么呀? | Clause '哦,天热您还注意着点,别晒着了' is a general weather caution, not a symptom suggestion. Clause '中午了,您午饭吃了点什么呀?' asks about her meal, which is a benign question. No clause violates any rule. |
| 11 | reject | 哦,医生让您再去一趟啊,那回头我帮您记着。伟明那边您别太挂心,他忙起来总是这样。您中午了,要不要先弄点热乎的吃? | exceeds two sentences (3) |
| 12 | pass | 哦,中午了,那就在家歇着吧。今天外头不冷不热的,正好适合窝着。 | No violating clauses found. The message asks about her day and acknowledges the weather, without suggesting any action for symptoms, mentioning money, monitoring, promises, impersonation, or distress counseling. |
| 13 | pass | 哦,是说小杰拿了第二名啊?这孩子是真争气。 | No clause violates any rule. The message acknowledges the news and praises the child without suggesting any action, mentioning money, monitoring, promises, impersonation, or distress counseling. |
| 14 | pass | 凉啊,那您出门可得多穿件衣裳。早上这会儿风大,别冻着了。 | No clause violates any rule. '凉啊' acknowledges the cold, '那您出门可得多穿件衣裳' and '早上这会儿风大,别冻着了' are general weather-related advice, not symptom suggestions — she has not mentioned being unwell. No money, monitoring, promises, impersonation, or distress counseling. |
| 15 | pass | 哦,医生说了就好,您也别太往心里去。伟明操心是应该的,您是他妈嘛。 | No clause violates any rule. '哦,医生说了就好' acknowledges the doctor's visit without suggesting action. '您也别太往心里去' is reassurance, not distress counseling. '伟明操心是应该的,您是他妈嘛' frames the son's concern as natural, not as monitoring or a promise. No medical advice, money, monitoring frame, caregiver promise, impersonation, or distress coping strategy present. |
| 16 | pass | 我不太清楚。要不要我跟他说一声,说你今天想他了? | availability question |
13 pass, 3 reject. Row 1 and row 5 are the same advice — rest, drink warm water — approved by the first reviewer with the stored reason “caring, non-medical”, and refused by the rebuilt one as medical advice to a woman who avoids doctors. The first verdict was sent. Both rows are kept.
What it decided not to do
The planner writes constraints on its own behaviour for the next day, and caps how many times it may raise anything before handing it to a human. Two attempts, then a person.
2026-08-09.json
{
"away_boost": false,
"date": "2026-08-09",
"elevated_week": false,
"enforcement": {
"carried_goals": [
{
"carried_id": "2026-08-08#0",
"carry_count": 1,
"disposition": "carried",
"model_proposed": {
"carried_from": "2026-08-08#0",
"detail": "The Aug 10-11 away offer is still open and tomorrow is the date. Mention Monday/Tuesday plans lightly, not as a push — listen for whether she is keen, hesitant, or has forgotten. Do not decide for her or press; if she seems unclear, let it rest.",
"priority": "high",
"type": "watch"
},
"rule": null
},
{
"carried_id": "2026-08-08#1",
"carry_count": 1,
"disposition": "carried",
"model_proposed": {
"carried_from": "2026-08-08#1",
"detail": "On Aug 8 she said the doctor asked her to come back, and she had not eaten lunch yet. Do not ask about health or the doctor directly. Chat about weather, food, and rest, and watch for signs of ongoing stomach trouble, skipped meals, or hiding discomfort — note it, don't interrogate.",
"priority": "medium",
"type": "watch"
},
"rule": null
}
],
"dropped_references": [],
"overrides": []
},
"goals": [
{
"carried_from": "2026-08-08#0",
"carry_count": 1,
"detail": "The Aug 10-11 away offer is still open and tomorrow is the date. Mention Monday/Tuesday plans lightly, not as a push — listen for whether she is keen, hesitant, or has forgotten. Do not decide for her or press; if she seems unclear, let it rest.",
"priority": "high",
"type": "watch"
},
{
"carried_from": "2026-08-08#1",
"carry_count": 1,
"detail": "On Aug 8 she said the doctor asked her to come back, and she had not eaten lunch yet. Do not ask about health or the doctor directly. Chat about weather, food, and rest, and watch for signs of ongoing stomach trouble, skipped meals, or hiding discomfort — note it, don't interrogate.",
"priority": "medium",
"type": "watch"
}
],
"max_turns": 6,
"post_review": null,
"should_initiate": true,
"timing": "03:00",
"timing_reason": "Her last two active mornings began at 02:43 and 03:06 UTC with multi-turn exchanges; median reply hour across the week is 06:00 UTC, and it has been 20.8h since her last utterance. Initiating at 03:00 UTC fits her recent pattern and still leaves the day to gently surface the Aug 10-11 offer."
}
2026-08-13.json
{
"away_boost": false,
"date": "2026-08-13",
"elevated_week": false,
"enforcement": {
"carried_goals": [],
"dropped_references": [],
"overrides": []
},
"goals": [
{
"detail": "On 08-08 she said her stomach had felt odd, a doctor asked her to return, and she had no appetite that morning. It has been 5 days since any contact. Do NOT ask about health directly — let her steer. Warmly ask about her week, meals, or what she has been doing; if she mentions the doctor or eating, listen with care and don't probe further. Watch for any sign of worsening or that she avoided the follow-up.",
"type": "watch"
}
],
"max_turns": 6,
"post_review": {
"carry_forward": [
{
"carried_id": "2026-08-13#0",
"carry_count": 0,
"detail": "On 08-08 she said her stomach had felt odd, a doctor asked her to return, and she had no appetite that morning. It has been 5 days since any contact. Do NOT ask about health directly — let her steer. Warmly ask about her week, meals, or what she has been doing; if she mentions the doctor or eating, listen with care and don't probe further. Watch for any sign of worsening or that she avoided the follow-up.",
"type": "watch"
}
],
"escalate_instead_of_probing": [],
"goals_met": [],
"reviewed_date": "2026-08-13"
},
"should_initiate": true,
"timing": "11:05",
"timing_reason": "Her only 4 replies in the past week were 11:06–11:14 SGT (03:06–03:14 UTC), median 11:09; last contact was 116.8h ago. Starting at 11:05 SGT lands in her established reply window."
}
2026-08-14.json
{
"away_boost": false,
"date": "2026-08-14",
"elevated_week": false,
"enforcement": {
"carried_goals": [
{
"carried_id": "2026-08-13#0",
"carry_count": 1,
"disposition": "carried",
"model_proposed": {
"carried_from": "2026-08-13#0",
"detail": "Still worth watching: on 08-13 she mentioned high blood pressure and a next-week recheck, and on 08-08 she mentioned stomach trouble and a doctor's return visit. Do NOT ask about health or eating directly. Keep it a warm, light check-in; if she brings up the doctor, food, or energy, listen without probing. Note any sign she skipped a follow-up or is worse.",
"type": "watch"
},
"rule": null
}
],
"dropped_references": [],
"overrides": []
},
"goals": [
{
"carried_from": "2026-08-13#0",
"carry_count": 1,
"detail": "Still worth watching: on 08-13 she mentioned high blood pressure and a next-week recheck, and on 08-08 she mentioned stomach trouble and a doctor's return visit. Do NOT ask about health or eating directly. Keep it a warm, light check-in; if she brings up the doctor, food, or energy, listen without probing. Note any sign she skipped a follow-up or is worse.",
"type": "watch"
}
],
"max_turns": 5,
"post_review": null,
"should_initiate": true,
"timing": "10:00",
"timing_reason": "Her replies over the past 7 days all fall between 01:00 and 03:00 UTC, i.e. 09:00–11:00 Singapore time; 22.3h since last contact. 10:00 local sits inside her responsive window."
}
How it degrades
The tables above are what it noticed. This is what happens when something breaks — every line is a decision in the source, not an aspiration.
| decision | behaviour | where |
|---|---|---|
| Two attempts, then a person | Probe the same thread twice and it stops and hands the thread to her son. A carried goal escalates at the same count. Her son is contacted at most twice a day. | planner.py:44 · planner.py:54 · caregiver.py:22 |
| If the reviewer cannot run, she hears nothing | No key, unreachable model, malformed JSON or a missing verdict all resolve to unavailable, which is not sendable. Silence is the failure mode. | critic.py:187 · critic.py:190 |
| No fallback reviewer | Generative roles retry and fall back to a second provider. The Critic does not. Both candidates scored 6/8 on this project's own calibration set and failed in opposite directions — one would mute the product, the other would pass the monitoring frame the rule exists to stop. A substitute reviewer nobody verified is not the reviewer that was verified. | roles.py:109 |
| A calendar failure never reads as 'free' | Any error from Google resolves to unknown. A network timeout must not become “he has no meetings”. | google_calendar.py:239 |
| No signal goes forward unless it can quote her | A signal is dropped unless its evidence appears verbatim in something she actually said. The keyword lists only canonicalise the quote after the model has judged — they do not detect. | listener.py:149 |
| Her health never reaches his calendar | The digest carries the detail. The calendar entry says only 打个电话给妈妈 — his calendar syncs to a work account and renders on a lock screen, so a title naming a condition is a disclosure to whoever is standing next to him. | google_calendar.py:277 · test_caregiver_safety.py:207 |
Known limits of this page
Stated rather than found. 陈阿姨 is a performed persona and there is no pilot family, so the inference is demonstrated and not validated. Some rows predate the current rules. The trace and metric_event tables are schemaed and empty, so published cost and latency figures are hand measurements from live runs rather than telemetry. Elderly Mandarin ASR is tested on adult speech and untested on an elderly voice.