refactor(consult): state the answer shape once in the natal prompt (BUG-1256 step 1)
The English shape summary sat in the system prompt four times (contract, index, natal heading rule, skill skeleton) and the contract restated the Chinese ANSWER SHAPE point by point. Keep the summary in the contract only and drop the restatements; the Chinese ANSWER SHAPE stays the one full statement. General answer-policy bullets no longer sit under the reference_transparency header. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d40febcd95
commit
6a372bc3a8
@@ -47,14 +47,20 @@ test("product voice uses a spoken opener then the skill Level 2 report skeleton"
|
||||
|
||||
assert.match(mastra, /productConversationVoice/);
|
||||
assert.match(mastra, /natalSpokenReportContract/);
|
||||
assert.match(mastra, /skill Level 2 report skeleton/);
|
||||
// 原值: assert.match(mastra, /skill Level 2 report skeleton/)
|
||||
// 新值: index 只指回「ANSWER SHAPE above, stated once there」
|
||||
// 原因: 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.match(mastra, /The answer shape is the ANSWER SHAPE above, stated once there/);
|
||||
assert.match(mastra, /Do not paste the Technique Audit Table into the answer body/);
|
||||
assert.match(binding, /Follow this method and its truth boundaries/);
|
||||
// 原值: assert.match(binding, /present its Level 2 report template as the evidence of the product's answer shape, not as the shape itself/)
|
||||
// 新值: Level 2 模板只是依据来源,六步宫位和 Yoga 表不贴进正文标题下
|
||||
// 原因: TASK-consult-conversational-answer-20261006 D1/D6(BUG-1244)
|
||||
assert.match(binding, /present its Level 2 report template as a source of evidence, not as the answer's shape\. \$\{NATAL_ANSWER_SHAPE_SUMMARY\}/);
|
||||
assert.match(binding, /they are not pasted under a heading/);
|
||||
// 原值(2): /present its Level 2 report template as a source of evidence, not as the answer's shape\. \$\{NATAL_ANSWER_SHAPE_SUMMARY\}/、/they are not pasted under a heading/
|
||||
// 新值(2): 骨架句只说 Level 2 模板是依据来源、形状在产品口吻里只说一次;不再嵌形状摘要
|
||||
// 原因(2): 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.match(binding, /the Level 2 report template is a source of evidence, not the answer's shape: the shape is the ANSWER SHAPE stated once in the product voice/);
|
||||
assert.doesNotMatch(binding, /NATAL_ANSWER_SHAPE_SUMMARY/);
|
||||
assert.match(mastra, /The bound skill method is this product's answering contract/);
|
||||
assert.match(mastra, /Do not use a restricted technique/);
|
||||
// 原值: assert.match(mastra, /must_use_layers is the executed shortlist/)
|
||||
@@ -72,13 +78,18 @@ test("product voice uses a spoken opener then the skill Level 2 report skeleton"
|
||||
// 原值: assert.match(voice, /## ${REPORT_HEADING.support}…## ${REPORT_HEADING.timing}…## ${REPORT_HEADING.action}/)
|
||||
// 新值: 多人各写一段、段首点名;合同不再要求三个固定 ## 标题
|
||||
// 原因: TASK-consult-conversational-answer-20261006 D1(BUG-1244)
|
||||
assert.match(voice, /When the user names more than one person, one paragraph each \(妈妈 and 爸爸 are two paragraphs, never one\)/);
|
||||
// 原值(2): /When the user names more than one person, one paragraph each …/(英文合同第 2 条)
|
||||
// 新值(2): 同一规则只在中文 ANSWER SHAPE 第 2 条
|
||||
// 原因(2): 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.match(voice, /问「父母」时妈妈和爸爸分开写,不揉成一段/);
|
||||
assert.doesNotMatch(voice, /When the user names more than one person, one paragraph each/);
|
||||
assert.doesNotMatch(voice, /## \$\{REPORT_HEADING/);
|
||||
// 原值: assert.match(voice, /The opener carries no action list/)
|
||||
// 新值: 「开场不写行动」写在共享 ANSWER SHAPE 第 1 步与形状摘要里
|
||||
// 原因: TASK-consult-plain-answer-20261001 D2:合同不再复述开场细节,引用唯一定义
|
||||
assert.match(voice, /开场不写标题、不写行动/);
|
||||
assert.match(voice, /Say each thing once \(D8\)/);
|
||||
// 原值: /Say each thing once \(D8\)/ 新值: 中文「同一件事只说一遍」 原因: 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.match(voice, /同一件事只说一遍/);
|
||||
// 原值: assert.match(voice, /First-turn total ≤ 900 Chinese characters/)
|
||||
// 新值: 没有字数上限,写到讲清楚为止
|
||||
// 原因: TASK-consult-plain-answer-20261001 D8:产品取消字数上限(推翻 BUG-1073 的 900 字,保留「只说一遍」)
|
||||
@@ -86,8 +97,10 @@ test("product voice uses a spoken opener then the skill Level 2 report skeleton"
|
||||
// 原值: assert.match(voice, /There is no length cap: write until it is clear, and stop there/)
|
||||
// 新值: 首轮通常三到六段,不设硬截断
|
||||
// 原因: TASK-consult-conversational-answer-20261006 D3(BUG-1244)
|
||||
assert.match(voice, /The first answer is usually three to six paragraphs/);
|
||||
assert.match(voice, /There is no hard cutoff/);
|
||||
// 原值(2): /The first answer is usually three to six paragraphs/、/There is no hard cutoff/(合同英文复述)
|
||||
// 新值(2): 只锁中文「首轮通常三到六段」「不设硬截断」(上方已断言),英文由形状摘要携带
|
||||
// 原因(2): 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.doesNotMatch(voice, /The first answer is usually three to six paragraphs/);
|
||||
// 原值: /cite only the fields that support this judgment, and only what the opener and the sections did not already cite/
|
||||
// 新值: 依据留在括号里,六步宫位和 Yoga 表是来源,不是一节
|
||||
// 原因: TASK-consult-conversational-answer-20261006 D6(BUG-1244)
|
||||
@@ -95,13 +108,17 @@ test("product voice uses a spoken opener then the skill Level 2 report skeleton"
|
||||
// 原值: assert.match(voice, /One to three actions for this week, here and nowhere else/)
|
||||
// 新值: 行动不强制,盘上指向具体事情时才顺口一句
|
||||
// 原因: TASK-consult-conversational-answer-20261006 D2(BUG-1244)
|
||||
assert.match(voice, /An action is not required/);
|
||||
// 原值(2): /An action is not required/(合同第 5 条) 新值(2): 中文 ANSWER SHAPE 第 4 条「行动不强制」 原因(2): 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.match(voice, /4\. 行动不强制/);
|
||||
assert.doesNotMatch(voice, /One natal career\/wealth\/marriage\/family question still uses the opener-plus-skeleton above/);
|
||||
assert.match(voice, /a follow-up turn follows the shape instruction carried in the user turn/);
|
||||
// 原值: assert.match(mastra, /each thing said once, first-turn total ≤ 900 characters/)
|
||||
// 新值: 指令引用 NATAL_ANSWER_SHAPE_SUMMARY(摘要里写「无字数上限、只说一遍」),不再含 900
|
||||
// 原因: TASK-consult-plain-answer-20261001 D7/D8
|
||||
assert.match(mastra, /Write in Simplified Chinese\. \$\{NATAL_ANSWER_SHAPE_SUMMARY\}/);
|
||||
// 原值(2): /Write in Simplified Chinese\. \$\{NATAL_ANSWER_SHAPE_SUMMARY\}/
|
||||
// 新值(2): index 不再嵌形状摘要
|
||||
// 原因(2): 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.doesNotMatch(mastra, /\$\{NATAL_ANSWER_SHAPE_SUMMARY\}/);
|
||||
assert.doesNotMatch(mastra, /≤ 900|≤ 400|反差|扮演/);
|
||||
assert.match(mastra, /The checklist is a list of things to check, not a list of paragraphs to write/);
|
||||
// 原值: assert.match(binding, /no action list in the opener/)
|
||||
@@ -209,8 +226,11 @@ test("one shape definition: contract, thinking plan, user turn and agent prompts
|
||||
assert.equal(natalSpokenReportContract.includes(`## ${heading}`), false, heading);
|
||||
assert.equal(natalAnswerShapeBody().includes(`## ${heading}`), false, heading);
|
||||
}
|
||||
// 原值: 合同与 natal 标题规则都包含形状摘要(另有 index、skill 骨架两处,系统提示里共 4 份)
|
||||
// 新值: 只有合同包含;标题规则、index、skill 骨架都不再嵌入
|
||||
// 原因: 2026-10-07 提示词去重(BUG-1256):英文形状摘要只在本命合同里保留一份,其余三处与合同里逐条复述中文 ANSWER SHAPE 的句子删除
|
||||
assert.ok(natalSpokenReportContract.includes(NATAL_ANSWER_SHAPE_SUMMARY));
|
||||
assert.ok(consultationSpokenHeadingRule("natal").includes(NATAL_ANSWER_SHAPE_SUMMARY));
|
||||
assert.equal(consultationSpokenHeadingRule("natal").includes(NATAL_ANSWER_SHAPE_SUMMARY), false);
|
||||
assert.match(NATAL_ANSWER_SHAPE_SUMMARY, /usually three to six paragraphs/);
|
||||
assert.match(NATAL_ANSWER_SHAPE_SUMMARY, /no hard cutoff/);
|
||||
assert.match(NATAL_ANSWER_SHAPE_SUMMARY, /no conclusion from an empty house alone/);
|
||||
|
||||
Reference in New Issue
Block a user