- T1 (BUG-1160): 「通用读法 · 先看受冲」 opens every turn's methodology once. - T2 (BUG-1161): Chinese lists for parents, children, education, migration, family, annual, general, health; health replaces the English route in the web consultation only. - T3 (BUG-1162): career / marriage / wealth each gain an affliction line. - T4 (BUG-1163): health label 健康, prompt asks about the constitution first. - Single-domain annual / timing turns keep the pre-brief method (CONSULT_READING_BUDGET_BLOCKED): they would exceed the 12,000-character assertions, which this brief may not change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
177 lines
14 KiB
TypeScript
177 lines
14 KiB
TypeScript
import type { ConsultationDomain } from "./consultation-domain-registry.ts";
|
||
import type { ProfileGender } from "./profile-gender.ts";
|
||
|
||
/**
|
||
* Condensed consultation checklists (TASK-consult-evidence-card-v2-20260927
|
||
* T4, decision "方案 B"): what the web consultation hands the answer model for
|
||
* career, marriage and wealth instead of the full strict route and the full
|
||
* event-judgment file.
|
||
*
|
||
* Condensed from the live skill's `references/strict-workflow-router.md`
|
||
* (§2 shared baseline, §3 career-timing-strict, §4 relationship-timing-strict,
|
||
* §5 finance-timing-strict) and `references/event_judgment_career.md`,
|
||
* `event_judgment_marriage.md`, `event_judgment_wealth.md`. Each list is 5–8
|
||
* lines: the must-see items (all of them on the evidence card), the three
|
||
* layers to keep apart, the forbidden statements, and what stays a lookup.
|
||
*
|
||
* TASK-consult-affliction-reading-20261001 (T2/T3) added one affliction line to
|
||
* each of those three and wrote the lists for the remaining domains (parents,
|
||
* children, education, migration, family, annual, general, health); those
|
||
* cite the brief, not the router, as their source.
|
||
*
|
||
* Consultation only. The router and the event-judgment files are unchanged and
|
||
* still serve reports and every other surface; this file does not edit the
|
||
* skill, so there is no skill version change.
|
||
*/
|
||
export const CONDENSED_CHECKLIST_SOURCE =
|
||
"consultation condensed checklist (from references/strict-workflow-router.md §2–§5 and references/event_judgment_*.md)";
|
||
|
||
/**
|
||
* The marriage list's gender line (TASK-consult-gender-optional-20260927, G3).
|
||
* `unknown` applies only when the current subject's gender is not filled.
|
||
* When it is filled, the line follows strict-workflow-router.md §4 ("Confirm
|
||
* gender and day/night context before spouse significator analysis") and the
|
||
* repo's gender interpretation contract
|
||
* (references/oracle/gender_interpretation_contract_2026_07_19.json): the core
|
||
* stack stays gender-neutral and the spouse significator is a supplement.
|
||
*/
|
||
export const CONDENSED_GENDER_LINES = {
|
||
unknown: "性别未知:金星与木星都要看,不按性别指定「夫星」「妻星」下定论。",
|
||
female: "性别:女(卡上 gender)。先确认性别与昼夜盘(卡上 day_night)再取夫星:夫星以木星为主,部分传承兼看火星;它只是补充层,核心仍是 7 宫、7 宫主、D9、UL、DK,不得只因夫星的大运或过运就定婚期。",
|
||
male: "性别:男(卡上 gender)。先确认性别与昼夜盘(卡上 day_night)再取妻星:妻星取金星;它只是补充层,核心仍是 7 宫、7 宫主、D9、UL、DK,不得只因金星的大运或过运就定婚期。",
|
||
} as const satisfies Record<ProfileGender | "unknown", string>;
|
||
|
||
/**
|
||
* The shared reading every consultation turn gets once, ahead of any domain
|
||
* list (TASK-consult-affliction-reading-20261001 T1, decisions D1/D2): read the
|
||
* afflictions before the dignities. The text is the brief's final wording;
|
||
* field names in brackets were adapted to where the evidence card really
|
||
* carries them (planet rows `conjunct_with` / `aspected_by` / `combust` /
|
||
* `status`, house rows `occupants` / `aspected_by`, the base
|
||
* `functional_benefic_malefic` layer, the parents rows' `functional`, the
|
||
* yogas section's `hits`). The "two or more signals" threshold is a product
|
||
* heuristic, not a classical rule; the celebrity backtest of the third brief
|
||
* checks it for false positives.
|
||
*/
|
||
export const CONDENSED_SHARED_READING_TITLE = "通用读法 · 先看受冲";
|
||
export const CONDENSED_SHARED_READING_SOURCE = "consultation shared reading (TASK-consult-affliction-reading-20261001)";
|
||
export const CONDENSED_SHARED_READING_LINES: readonly string[] = [
|
||
"先看受冲,再看旺弱。旺弱和力量(入旺、入庙、Shadbala、SAV)只说明这颗星自己有没有力气,不说明它管的那件事顺不顺、那个人在不在你身边。",
|
||
"受冲信号,每条算一个:①宫、宫主或代表星与罗睺、计都、土星、火星同宫(星行 conjunct_with、宫行 occupants),或被土星、火星照(aspected_by);②宫主落 6、8、12 宫,或落在从该宫数起的第 6、8、12 宫;③宫主或代表星是本上升的功能凶星(functional_malefics,父母行 functional);④落陷(status)或燃烧(combust);⑤对应分盘里同号宫有凶星,或宫主落分盘的 6、8、12 宫。",
|
||
"同一个人或同一件事有两个及以上受冲信号:这一段第一句先写这一面,用「可能」,括号里写是哪几条;只有一个:补充一句;没有:不写。吉的一面同样要有依据,吉凶都有时两面都说。",
|
||
"力量大的星如果本身是 6、8、12 宫主,它带来的麻烦也有力量,不得因为「强」就说「没事」。",
|
||
"不写没有区分度的推论:逆行不等于「反复、打回来」;宫主不在本宫不等于「往外跑」;某星不在某宫不等于「离得远」;空宫不单独下结论。",
|
||
"不断言死亡、离婚、疾病诊断、流产、不孕。",
|
||
"瑜伽只认 yogas.hits:hits 里的才是这张盘成立的格局;只在 names 里、没进 hits 的是待检规则,不得说成本人的格局。",
|
||
];
|
||
|
||
/** The shared reading as one numbered block. */
|
||
export function sharedConsultationReading(): string {
|
||
return CONDENSED_SHARED_READING_LINES.map((line, index) => `${index + 1}. ${line}`).join("\n");
|
||
}
|
||
|
||
/**
|
||
* Domains whose list was written by TASK-consult-affliction-reading-20261001
|
||
* (T2, decision D5) rather than condensed from the router; their section
|
||
* cites that brief as its source.
|
||
*/
|
||
export const CONSULT_BRIEF_CHECKLIST_SOURCE = "consultation checklist (TASK-consult-affliction-reading-20261001)";
|
||
|
||
export const CONSULTATION_CONDENSED_CHECKLISTS: Readonly<Partial<Record<ConsultationDomain, readonly string[]>>> = {
|
||
career: [
|
||
"必看:D1 10 宫与 10 宫主、AmK;卡上 d9 段确认 10 宫主与 AmK 的旺弱、Vargottama、D1/D9 反转;D10 上升与 10 宫;AL 与 A10;10 宫 SAV 与木星、土星所在宫的 SAV。",
|
||
"时间:Vimshottari(MD/AD/PD)与 Narayana 双轨同向才谈应期,看大运主与 10 宫、10 宫主、D10 的关系;每颗星先按功能吉凶定性。",
|
||
"分三层说,不得合成一句「事业机会」:①接触(消息、面试、初步接洽)②结构性机会(合同、正式职位、长期项目)③公开落地(发布、到账、公开的职位与名声)。",
|
||
"禁写:本命承诺弱时,不得因一段大运或一次行运断言「事业必成」;不得把接触窗写成落地窗。",
|
||
"AL 落第几宫要说出来(落 10 宫 = 公众形象就是事业);10 宫主、AmK 的受冲按通用读法。",
|
||
"卡外按需补取一次:Karakamsha、宫主链、D1→D9→D10 联动、Argala、Chara 大运;KP 精确宫头仍 blocked,只作参考、不作依据。",
|
||
],
|
||
marriage: [
|
||
"第一句先冻结判定对象:心动接触 / 关系成对(契约)/ 社会法律落地;对象不清就先说清楚再往下。",
|
||
"必看:D1 7 宫与 7 宫主、5 宫与 5 宫主、金星、木星、DK、UL;卡上 d9 段(D9 上升、金木与 DK 的旺弱);昼夜盘;Vivah Saham 的度数与落宫。",
|
||
"分三层说:①心动接触:5 宫、5 宫主、Punarphoo 观察 ②关系成对:7 宫主、DK、UL ③社会法律落地:D9 + UL + Vivah Saham + 双大运同向。",
|
||
"时间:Vimshottari 与 Narayana 双轨;双重过运(木星、土星同时激活 7 宫 / 7 宫主 / DK / UL)只是激活窗,不是事件日。",
|
||
CONDENSED_GENDER_LINES.unknown,
|
||
"7 宫主或金星与罗睺、计都同宫,火星照 7 宫,UL 第 2 宫有凶星,伴侣代表星落 6、8、12:受冲两个及以上就写「感情可能不止一段 / 可能有断续」,只作可能;不预设用户现在有伴侣或单身。",
|
||
"禁写:5 宫主大运 ≠ 法律婚;金星过本命月亮 ≠ 心动月;Punarphoo 不得写成结婚;土星回到本命月亮是观察项,不是结婚。",
|
||
"卡外按需补取一次:Chara 大运、KP 7 宫副主星(KP 精确宫头仍 blocked,只作参考、不作依据)。",
|
||
],
|
||
wealth: [
|
||
"必看:D1 2、11、5、9 宫及宫主,8 宫(共享资源、突然得失)与 12 宫(支出、外流);木星、金星、水星;D2、D11;2、11 宫 SAV 与最强、最弱星座;卡上 d9 段确认 2 宫主、11 宫主的旺弱。",
|
||
"时间:2、11、5、9 宫主(收入来自工作时加 10 宫主)大运是否激活,Vimshottari 与 Narayana 双轨同向;每颗星先按功能吉凶定性。",
|
||
"分三层说:①挣钱机会 ②收入或资产真实增长 ③到账变现;不得合成一句「财运好」。",
|
||
"禁写:本命承诺弱时,不得因一次行运或一段大运断言「发财」;不给投资建议、不保证收益。",
|
||
"8 宫也管版税、继承、意外之财,不只读成纠纷;2、11 宫主与 9 宫主同宫或互照是财富组合。",
|
||
"卡外按需补取一次:收入来自工作时补取 D10;Argala、KP 到账类(KP 精确宫头仍 blocked,只作参考、不作依据)。",
|
||
],
|
||
// The lists below are the final wording of TASK-consult-affliction-reading-20261001
|
||
// §5 T2 (decision D5); field names were adapted to the card's real placement only.
|
||
parents: [
|
||
"父亲:9 宫、9 宫主、太阳、PiK(卡上有才看);母亲:4 宫、4 宫主、月亮、MK;D12 同号宫及其宫主(roles.*.d12_house)。看 roles.father/mother 的 lord_rows、significator_rows。父亲、母亲各自判断,依据不混用。",
|
||
"先判断「在不在身边、近不近」,再谈性格:受冲信号两个及以上,这一段第一句写「爸爸(妈妈)可能不常在你身边 / 很早就有距离 / 关系断断续续」,不得写成「有分量」「站得住」。",
|
||
"4 宫、4 宫主、月亮都落双体星座(双子、处女、射手、双鱼),且有受冲信号:可以提「照顾你长大的可能不止一位」,只作可能。",
|
||
"不拿太阳、月亮的旺弱代替关系好坏。",
|
||
"禁写:凭单一信号断定父母离婚、去世、生病。",
|
||
"时间:9 宫主、4 宫主、太阳、月亮的大运子运,配 Narayana 当前段。",
|
||
],
|
||
children: [
|
||
"必看:5 宫、5 宫主、木星、PK;D7 上升、D7 的 5 宫与 5 宫主落 D7 第几宫。",
|
||
"先分清问的是「有没有、来得顺不顺」还是「和孩子怎么相处」。前者看受冲信号(5 宫主落 6、8、12;D7 的 5 宫主落 D7 的 6、8、12;木星落陷、燃烧、受冲),只能说「可能晚、可能要费些周折」。",
|
||
"孩子性别不写,统一写「孩子」。",
|
||
"禁写:断言不孕、流产、孩子性别、孩子的健康诊断。",
|
||
],
|
||
education: [
|
||
"必看:4 宫(正规学业)、5 宫(理解力、考试)、9 宫(高等教育)及宫主;水星、木星;D24 上升与 4、5、9 宫。",
|
||
"学历路和真本事分开说:4、9 宫受冲而 5 宫、水星有力,常见「学历这条路不顺,本事不靠学历」。",
|
||
"分盘行只有星座:旺弱以卡上 d9 段和本命 status 为准,不自己推分盘旺弱。",
|
||
"禁写:断言考不上、拿不到学位。",
|
||
],
|
||
migration: [
|
||
"必看:4 宫(家乡、住处)、12 宫(远方、异地居住)、9 宫(远行)及宫主;罗睺;D4。",
|
||
"先说这张盘一生迁动多不多(包括早年),再说现在的时间。",
|
||
"禁写:只凭一次行运断言搬家、出国。",
|
||
],
|
||
family: [
|
||
"先分清问的是谁(父母、兄弟姐妹、伴侣家人、孩子),按人分开,各自取宫:父母见父母清单,兄弟姐妹 3 宫、3 宫主、火星,家里整体 2 宫、4 宫。",
|
||
"受冲读法同通用读法。",
|
||
],
|
||
annual: [
|
||
"年盘(年主、Muntha、年运)只作当年层;一生的底子仍以本命为准。",
|
||
"必看:当前大运、子运的星主管哪几宫、和谁同宫、被谁照;Narayana 当前段所在宫;土星、木星行运所在宫;saturn_from_moon_house 为 12、1、2 时是土星压月亮那几年,只说压力大、节奏慢,不说灾。",
|
||
"罗睺、计都主事的大运要点出来:落哪宫、和谁同宫。",
|
||
"禁写:凭一次行运断言具体事件或日期。",
|
||
],
|
||
general: [
|
||
"命宫、命主、月亮、太阳的强弱与受冲是底子,先讲。",
|
||
"入旺或入庙的星坐 1、4、7、10 宫是大力量,要说出来;落陷的星,卡上瑜伽有取消才说取消。没上卡的格局不得自造名字。",
|
||
"起步与后劲分开说;不得因一颗星落陷就说「起步慢、没天赋」。",
|
||
],
|
||
// Replaces the English health-timing-strict route in the web consultation
|
||
// only; reports keep the router's route.
|
||
health: [
|
||
"先讲体质底子:命宫、命主、月亮、太阳的强弱与受冲。命主兼 6、8 宫主,或与 6、8 宫主同宫,底子偏弱、需要长期照顾。",
|
||
"必看:6 宫(疾病)、8 宫(慢性、手术)、12 宫(住院)及宫主;土星、火星;D6、D8、D30 上命主、6 宫主、8 宫主落第几宫、和谁同宫。",
|
||
"宫位对应的身体部位只作提示(如 4 宫胸、心、肺),不写成诊断。",
|
||
"分三层:一生底子;压力窗(当前大运子运激活 1、6、8、12 宫主);恢复窗。",
|
||
"禁写:诊断、病名、治疗建议、手术或死亡的断言;保留「这不是医疗意见」。",
|
||
],
|
||
};
|
||
|
||
/**
|
||
* The condensed list for one domain, or null when the domain keeps its full
|
||
* route. `gender` is the current subject's optional gender: the gender-unknown
|
||
* line is swapped for the female / male line only when it is filled.
|
||
*/
|
||
export function condensedConsultationChecklist(
|
||
domain: ConsultationDomain,
|
||
options: Readonly<{ gender?: ProfileGender | null }> = {},
|
||
): string | null {
|
||
const lines = CONSULTATION_CONDENSED_CHECKLISTS[domain];
|
||
if (!lines) return null;
|
||
const genderLine = options.gender ? CONDENSED_GENDER_LINES[options.gender] : CONDENSED_GENDER_LINES.unknown;
|
||
return lines
|
||
.map((line) => (line === CONDENSED_GENDER_LINES.unknown ? genderLine : line))
|
||
.map((line, index) => `${index + 1}. ${line}`)
|
||
.join("\n");
|
||
}
|