feat: enforce commercial rectification evidence contracts

* feat: enforce precise timing output contract

* fix: recognize package imports in fragment audit

* test: make workflow stream contract formatting-independent

* fix: preserve VedAstro evidence across async workflows

* feat: enforce commercial technique truth contract

* feat: add rectification technique receipt

* feat: extend rectification event evidence

* feat: score rectification arudha evidence

* feat: gate high rigor rectification confirmation

* feat: add controlled transit to rectification

* feat: include d11 in rectification finance scoring

* feat: add ashtakavarga rectification auxiliary

* feat: show rectification technique receipt

* feat: use verified shadbala components in rectification

* fix: trace transitive script references in fragment audit

* feat: run request-level rectification parity packet
This commit is contained in:
732642856
2026-07-19 22:23:29 +08:00
committed by GitHub
parent d9b07802a5
commit 4ceb3a5157
42 changed files with 995 additions and 85 deletions
@@ -20,6 +20,15 @@ export function BirthTimeCandidateResult({ journey, controller }: CandidateResul
const action = journey.nextAction;
const dynamic = journey.journeyProtocol === "dynamic-choice-v2";
const terminalPath = guidedTerminalPath(journey);
if (result?.eventCount === 0) {
return (
<div className="birth-time-candidate-result" aria-live="polite">
<p className="birth-time-assessment-unavailable"></p>
<p className="birth-time-evidence-boundary"></p>
{terminalPath && <button className="button-secondary birth-time-guided-action" disabled={controller.pending} type="button" onClick={controller.editBirthTimeDetails}></button>}
</div>
);
}
if (!result && action.kind === "present_low_result") {
return (
<div className="birth-time-candidate-result" aria-live="polite">
@@ -30,6 +39,7 @@ export function BirthTimeCandidateResult({ journey, controller }: CandidateResul
}
if (!result) return null;
const winner = result.winningSegment;
const receipt = result.techniqueReceipt;
return (
<div className="birth-time-candidate-result" aria-live="polite">
@@ -48,6 +58,15 @@ export function BirthTimeCandidateResult({ journey, controller }: CandidateResul
<p className="birth-time-assessment-unavailable"></p>
)}
<p className="birth-time-evidence-boundary"></p>
{receipt && (
<details className="birth-time-evidence-receipt">
<summary></summary>
<p>{[...receipt.usedDivisionalCharts, ...receipt.usedArudha, ...receipt.dashaTracks].join("、") || "无"}</p>
<p>{receipt.auxiliaryLayers.join("、") || "无"}</p>
<p>{receipt.missingLayers.join("、") || "无"}</p>
{receipt.hardBlockers.length > 0 && <p>{receipt.hardBlockers.join("、")}</p>}
</details>
)}
{action.kind === "present_low_result" && (
<div className="birth-time-candidate-terminal" role="status">
@@ -10,6 +10,7 @@ const domainLabels = {
relocation: "搬迁与长期居住地",
relationship: "重要关系",
career: "工作与身份变化",
finance: "收入、资产或资源变化",
health_pressure: "健康或生活压力",
} as const satisfies Readonly<Record<EvidenceDomain, string>>;