void acceptCandidate(candidateId)}
+ />
+ )}
);
})}
{candidateResult?.houseTable && (
-
- )}
- {candidateResult?.selectionAllowed && (
-
-
- 当前可能的出生时间
- 这次校正的结果是采用一个代表性时间作当前排盘。相邻分钟目前分不开,还不能确认唯一分钟。可以先采用,也可以继续补充事件或改选;新增证据后,候选和相对支持度会重新计算。
- 相对支持度不是统计概率;采用不等于确认出生时间,也不会覆盖原始填报时间。
-
-
- {candidateResult.candidates.map((candidate) => {
- const selected = candidateResult.selectedTime === candidate.time;
- const recommended = isRecommendedRectificationCandidate(candidateResult, candidate);
- return (
-
- );
- })}
-
-
+
+
+
)}
{savedTime && (
diff --git a/frontend/src/components/rectification-house-table.tsx b/frontend/src/components/rectification-house-table.tsx
index 08f613a7..aa860f13 100644
--- a/frontend/src/components/rectification-house-table.tsx
+++ b/frontend/src/components/rectification-house-table.tsx
@@ -6,12 +6,13 @@ export function RectificationHouseTableView({
table,
}: Readonly<{ table: RectificationHouseTable }>) {
return (
-
+
- 本命宫位
+ 当前本命宫位
- 按 {table.time} 排出,上升{table.lagna}。这是当前代表性时间下的盘面,不是已确认出生盘。
+ 按 {table.time} 排出,上升{table.lagna}。补充经历后会按新线索重算。
+ 这是当前代表性时间下的盘面,不是已确认出生盘。
diff --git a/frontend/tests/rectification-agentic-entry.test.ts b/frontend/tests/rectification-agentic-entry.test.ts
index 1ed80bb2..b8210add 100644
--- a/frontend/tests/rectification-agentic-entry.test.ts
+++ b/frontend/tests/rectification-agentic-entry.test.ts
@@ -227,7 +227,7 @@ test("Agentic rectification scrolls the conversation container as streamed messa
assert.match(chat, / {"),
- chat.indexOf("{candidateResult?.selectionAllowed"),
+ chat.indexOf("{savedTime &&"),
);
const replyIndex = messageRender.indexOf(" {"),
- chat.indexOf("{candidateResult?.selectionAllowed"),
+ chat.indexOf("{savedTime &&"),
);
const replyIndex = messageRender.indexOf(" {
+ const houseTable = readFileSync(
+ new URL("../src/components/rectification-house-table.tsx", import.meta.url),
+ "utf8",
+ );
+ const messageLoop = chat.slice(
+ chat.indexOf("{messages.map((message) => {"),
+ chat.indexOf("{candidateResult?.houseTable &&"),
+ );
+ const snapshot = chat.slice(
+ chat.indexOf("{candidateResult?.houseTable &&"),
+ chat.indexOf("{savedTime &&"),
+ );
+ const rowIndex = messageLoop.indexOf("= 0);
+ assert.ok(snapshotIndex >= 0 && houseIndex > snapshotIndex);
+ assert.doesNotMatch(snapshot, / \{/);
+ assert.match(houseTable, /aria-live="polite"/);
+ assert.match(houseTable, /当前本命宫位/);
+ assert.match(houseTable, /补充经历后会按新线索重算/);
+ assert.doesNotMatch(houseTable, / {
+ const messageLoop = chat.slice(
+ chat.indexOf("{messages.map((message) => {"),
+ chat.indexOf("{candidateResult?.houseTable &&"),
+ );
+ const actionsIndex = messageLoop.indexOf("= 0 && cardsIndex > actionsIndex);
+ assert.match(chat, /candidateResult\?\.selectionAllowed/);
+ assert.match(chat, /latestOfferMessageKey/);
+ assert.match(chat, /showSelectionCards = Boolean\(\s*candidateResult\?\.selectionAllowed[\s\S]*!busy[\s\S]*regeneratingMessageKey === null/);
+ assert.match(messageLoop, /showSelectionCards && message\.renderKey === latestOfferMessageKey/);
+ assert.doesNotMatch(messageLoop, /className="rectification-snapshot"/);
+});
+
test("rectification keeps the composer but never renders generated suggestion chips", () => {
assert.match(chat, /