4.3 KiB
Output contract
Public output keeps the existing shape:
{
acknowledgement: string;
candidateUpdate: string | null;
limitation: string | null;
question: string | null;
}
Acknowledgement
Use at most one or two short sentences and refer to the user's concrete experience. Do not repeatedly begin with “已记录” or “我记下了”. Do not use “这个信息很有用”, “它不是单纯的……”, “而是把……”, “接下来最有价值的是……”, or “这样可以避免……”. Do not interpret an ordinary event as a confirmed life turning point.
Question
When a validated opportunity is selected, question is required; otherwise it is null. The question must:
- be 8-180 characters, at most two sentences, and contain at most one question mark;
- ask one thing only and match the opportunity's requested fields;
- include a valid anchor when
targetEventIdis present; - ask self/family/partner only for
event_subject; - ask month, approximate month, or range for
event_month; - ask start, peak, end, or formal stage for
event_stage; - ask for one new roughly dated event for
new_dated_event; - contain no internal ID/field, score, snapshot, opportunity, tool call, model name, technique trace such as
D9/D60, or unapprovedHH:MMbirth time.
Reject multi-question transitions such as “另外”, “还有”, “同时再说”, or “并且告诉我” when they introduce another request. On validation failure, use the selected opportunity's short, anchored fallbackPrompt.
Candidate update
candidateUpdate is allowed only when the current range has passed every public gate and one of these is true:
- it differs materially from the previous Snapshot's primary range; or
- it is the first Snapshot to pass the public stability gate.
The no-repeat rule takes precedence: it must be null for an unchanged range, insufficient event/domain coverage, LOEO or LODO retention below 0.8, failed date/neighbor stability, a missing active-domain required or unclassified technique layer, an internal unstable Snapshot, or a repeated equivalent calculation. In v5_agent, it must also be null when the required VedAstro primary/runner-up post-validation is missing, timed out, failed, tied, incomplete, or unable to distinguish the pair. Missing optional KP_cusps and reference-only D60 do not block by themselves. Never state or imply a unique or representative birth minute.
Do not describe LOEO/LODO as an independent holdout, prospective validation, or calibrated accuracy result. Per-Case independent holdout remains deferred until sticky partitioning and calibration exist.
Deterministic fallback
Fallback follows the same public rules as model output: acknowledge the actual event naturally, ask one anchored question, avoid repetition and over-interpretation, and never claim exact-minute certainty.
Persisted analysis process
“分析过程” is rendered beside the assistant message as a collapsible, refresh-safe server execution receipt. It is not part of the model-authored public message fields above and is never generated by the Renderer.
The public projection may contain only:
- server phases that actually started or completed;
- allowlisted labels for candidate calculation, stability diagnostics, and a Reasoner read-only diagnostic that actually ran;
- allowlisted techniques proven present in persisted execution artifacts;
- an optional provider-explicit reasoning summary accepted by the server safety filter.
Do not infer missing phases from the final Job phase, and do not label a capability as executed merely because the deployment supports it. If no safe provider summary exists, omit it; never create a substitute or expose hidden chain-of-thought.
The receipt must exclude scores, weights, contribution matrices, internal IDs and field names, candidate minutes, tool arguments or raw results, prompts, model/provider internals, raw VedAstro requests/responses, internal provider or technique traces, and sensitive user wording. It may state only that an allowlisted read-only post-validation ran and whether the public gate passed. Provenance may support audit linkage only and must never be rendered as added evidence strength. D60 is never displayed. Historical messages without a receipt remain valid, and v4_legacy/v5_shadow keep their established visible reply semantics.