feat(home): warm older-sister greeting voice; daily line says why, plainly
Late night no longer remarks on being awake (产品 2026-10-01); every daypart, weekday and returning line reworded in the same caring voice. Daily line: each house sentence names where the Moon is in plain words, then one concrete sentence; no stacked hedges. Sign-fallback moods rewritten the same way. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
fa6d026f12
commit
dc45fde613
@@ -30,7 +30,8 @@ test("terminal and fallback greetings follow the current profile name", () => {
|
||||
assert.match(greeting, /周宁/);
|
||||
assert.doesNotMatch(greeting, /林遥/);
|
||||
}
|
||||
assert.equal(terminalGreeting, "早上好,周宁");
|
||||
// 原值 "早上好,周宁" / 新值 "早安,周宁" / 原因:开场语改知心姐姐口吻(产品 2026-10-01)。
|
||||
assert.equal(terminalGreeting, "早安,周宁");
|
||||
assert.equal(fallbackGreeting, "欢迎,周宁");
|
||||
});
|
||||
|
||||
@@ -41,36 +42,46 @@ test("the starter greeting is one line drawn from daypart, weekday and returning
|
||||
// 原因:产品把开场语改成 claude.ai 式的单行问候,追问句移到输入框占位符,
|
||||
// 「招呼语 + 问句」两半这个形状本身被取消,问句池不再存在。
|
||||
const noon = WEDNESDAY(12);
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0).text, "中午好");
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0.5).text, "中午好,周宁");
|
||||
// 原值 "中午好" / "中午好,周宁" / 新值 "中午好,记得吃饭" / "午安,周宁"
|
||||
// / 原因:开场语改知心姐姐口吻(产品 2026-10-01);下标与池长不变。
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0).text, "中午好,记得吃饭");
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0.5).text, "午安,周宁");
|
||||
assert.equal(createStartGreeting("周宁", noon, 0.5), createStartGreetingParts("周宁", noon, 0.5).text);
|
||||
|
||||
// 边界不越界:1 与 0.999999 都落在池内最后一条。
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 1).text, "中午好,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0.999999).text, "中午好,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 1).text, "午安,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", noon, 0.999999).text, "午安,周宁");
|
||||
});
|
||||
|
||||
test("late night has its own three lines and none of them asks a follow-up", () => {
|
||||
test("late night has its own three lines and none of them remarks on being awake", () => {
|
||||
// 原值 "夜猫子,晚上好" / "还没睡呀,周宁" / "晚安前再聊一会"
|
||||
// / 新值 "这会儿很安静" / "夜里好,周宁" / "慢慢说,周宁"
|
||||
// / 原因:产品 2026-10-01「夜猫子、还不睡,用户会觉得你管别人睡不睡」;断言加严:深夜池任何一条都不得提睡觉。
|
||||
const lateNight = WEDNESDAY(2);
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 0).text, "夜猫子,晚上好");
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 1 / 3).text, "还没睡呀,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 0.7).text, "晚安前再聊一会");
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 0).text, "这会儿很安静");
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 1 / 3).text, "夜里好,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", lateNight, 0.7).text, "慢慢说,周宁");
|
||||
// 23 点与 4 点同属深夜。
|
||||
assert.equal(createStartGreetingParts("周宁", WEDNESDAY(23), 1 / 3).text, "还没睡呀,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", WEDNESDAY(4), 1 / 3).text, "还没睡呀,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", WEDNESDAY(23), 1 / 3).text, "夜里好,周宁");
|
||||
assert.equal(createStartGreetingParts("周宁", WEDNESDAY(4), 1 / 3).text, "夜里好,周宁");
|
||||
for (let step = 0; step < 100; step += 1) {
|
||||
assert.doesNotMatch(createStartGreetingParts("周宁", lateNight, step / 100).text, /睡|夜猫子|晚安/);
|
||||
}
|
||||
});
|
||||
|
||||
test("a blank name leaves only the lines that carry no name", () => {
|
||||
const lateNight = WEDNESDAY(2);
|
||||
assert.equal(createStartGreetingParts("", lateNight, 0).text, "夜猫子,晚上好");
|
||||
assert.equal(createStartGreetingParts(" ", lateNight, 0.9).text, "晚安前再聊一会");
|
||||
// 原值 "夜猫子,晚上好" / "晚安前再聊一会" / 新值 "这会儿很安静"(深夜池唯一不带称呼的一条)
|
||||
// / 原因:深夜池换句(产品 2026-10-01)。
|
||||
assert.equal(createStartGreetingParts("", lateNight, 0).text, "这会儿很安静");
|
||||
assert.equal(createStartGreetingParts(" ", lateNight, 0.9).text, "这会儿很安静");
|
||||
|
||||
// 周一的星期条目带称呼,名字为空时整条不可达;回访池同理。
|
||||
// 原值:断言名字为空时不出现「周一了」/ 新值:只断言带称呼的回访条目不可达
|
||||
// / 原因:周一条目改成不带称呼的「周一了,别太累」,名字为空也该出现;带称呼条目不可达的断言保留。
|
||||
for (let step = 0; step < 100; step += 1) {
|
||||
for (const hasSessions of [false, true]) {
|
||||
const text = createStartGreetingParts("", MONDAY(9), step / 100, hasSessions).text;
|
||||
assert.doesNotMatch(text, /周一了/);
|
||||
assert.doesNotMatch(text, /又见面了|嗨,|最近还好吗/);
|
||||
assert.doesNotMatch(text, /又见面了|你来啦|最近还好吗/);
|
||||
assert.ok(text.length > 0);
|
||||
assert.doesNotMatch(text, /\{名字\}/);
|
||||
assert.doesNotMatch(text, /,$|^,/);
|
||||
@@ -82,22 +93,24 @@ test("the weekday pool only opens on its own day", () => {
|
||||
const friday = FRIDAY(9);
|
||||
const fridayLines = new Set(Array.from({ length: 100 }, (_, step) =>
|
||||
createStartGreetingParts("周宁", friday, step / 100).text));
|
||||
assert.ok(fridayLines.has("周五快乐"));
|
||||
// 原值 "周五快乐" / "周一了,周宁" / 新值 "周五了,松口气" / "周一了,别太累" / 原因:知心姐姐口吻(产品 2026-10-01)。
|
||||
assert.ok(fridayLines.has("周五了,松口气"));
|
||||
|
||||
const wednesdayLines = new Set(Array.from({ length: 100 }, (_, step) =>
|
||||
createStartGreetingParts("周宁", WEDNESDAY(9), step / 100).text));
|
||||
assert.ok(!wednesdayLines.has("周五快乐"));
|
||||
assert.ok(!wednesdayLines.has("周五了,松口气"));
|
||||
assert.equal(wednesdayLines.size, 3);
|
||||
|
||||
assert.ok(new Set(Array.from({ length: 100 }, (_, step) =>
|
||||
createStartGreetingParts("周宁", MONDAY(9), step / 100).text)).has("周一了,周宁"));
|
||||
createStartGreetingParts("周宁", MONDAY(9), step / 100).text)).has("周一了,别太累"));
|
||||
assert.ok(new Set(Array.from({ length: 100 }, (_, step) =>
|
||||
createStartGreetingParts("周宁", SUNDAY(9), step / 100).text)).has("周日,慢一点"));
|
||||
});
|
||||
|
||||
test("the returning pool needs at least one session behind the account", () => {
|
||||
const evening = WEDNESDAY(20);
|
||||
const returning = ["又见面了,周宁", "欢迎回来", "嗨,周宁", "最近还好吗,周宁?"];
|
||||
// 原值 "嗨,周宁" / 新值 "你来啦,周宁" / 原因:知心姐姐口吻(产品 2026-10-01);池长不变。
|
||||
const returning = ["又见面了,周宁", "你来啦,周宁", "欢迎回来", "最近还好吗,周宁?"];
|
||||
|
||||
const firstVisit = new Set(Array.from({ length: 100 }, (_, step) =>
|
||||
createStartGreetingParts("周宁", evening, step / 100, false).text));
|
||||
|
||||
Reference in New Issue
Block a user