- server-side employee position resolution (org snapshot) with hard
position gate for EXPERIENCE/CASE sources; formal sources unaffected;
unresolvable position fails closed to general-scope only
- merge published experiences (aihr_case_record, CASE_EXP) and moderated
best answers (COMMUNITY, no submitter identity) into the citation pool
as REFERENCE tier; auxiliary sources never alter formal answers and
fail without breaking the main chain; grading re-grades ROUTE into
GUIDANCE when only auxiliary evidence exists
- case recall endpoints enforce the same position gate
- moderator endpoint to promote a best answer into a CANDIDATE case
record (idempotent via source_ref unique key, never auto-published)
- migration aihr_20260822_case_source_ref_and_best_answer_index_mysql8.sql
- COMMUNITY citations carry community-question:{id} in detailRef for
direct navigation
- narrow amount-semantics clarification to adjudicative intents only
- persist pending clarification on conversation and resolve follow-up
replies as ANSWERED/GAVE_UP/NEW_TOPIC (max one round per field)
- add AihrEvidenceGradingService: FULL/PARTIAL/GUIDANCE/ROUTE arbitration,
policy-claim post-validation, reference answers labeled as non-formal
- unblock retrieval source gating; tag citations with evidence tier,
keep PUBLISHED/HUMAN_VERIFIED/effective-date authorization gates
- replace operator-facing no-evidence copy with actionable route exits
(human help, direct finance channel, web research)
- allow fragment-less down feedback for own NO_EVIDENCE queries so
ROUTE answers can escalate to human help (fragment_id nullable)
- migrations: aihr_20260804_pending_clarification_mysql8.sql,
aihr_20260804_feedback_fragment_nullable_mysql8.sql
The planner falls back to CLARIFY whenever no keyword matches and the model
plan is unavailable or malformed. Mid-conversation that produced a dead end:
a follow-up such as "如果我要报销,一般需要查哪几个文件?" was answered with a
clarification request even though the previous turn had established context.
When a non-media request carries a conversationId and a contextVersion above
zero (i.e. at least one turn has completed), route CLARIFY to KNOWLEDGE_QA
with a grounded knowledge search.
Tradeoff: this also suppresses the deliberate CLARIFY for explicitly vague
phrasing ("你看着办", "帮我处理一下") from the second turn onward, which will
now run a knowledge search instead of asking back. Blank input is still
rejected earlier by requireQuestion.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>