Use when a user pastes an FWTI share link (`/result/<hash>`) or bare hash and asks why they got that personality, wants a psychologically grounded breakdown of the classification, or is debugging a suspicious result from the quiz. Applies only within this repo (FWTI v1/v2 codec).
A user hands you a share link. They already know the label. What they don't know is why: which answers cluster into which construct, which psychometric scale the dimension is anchored on, which hidden trigger was a near miss, and where the 16-grid boundaries actually sit. This skill defers all decoding, path reconstruction, scoring, trigger evaluation, and citation lookup to scripts/explain-result.ts, then narrates the JSON into a literature-grounded reading.
bun scripts/explain-result.ts "<url-or-hash>"
Accepts a full URL or bare hash. Needs bun on PATH (TS imported directly, no build).
| code | meaning |
|---|---|
| 0 | success — JSON on stdout |
| 1 |
| no argument |
| 2 | could not extract hash |
| 3 | hash failed to decode |
Non-zero → stop, tell the user the link is unreadable, do not fabricate.
version: 1Legacy pre-v0.4 link. Do not reclassify with v0.4 rules. Say so explicitly, optionally read answersRaw against src/data/legacy/questions-v1.ts, then stop. None of the template below applies.
One line: {code} · {personality.name}({family} 家)· {status} 语境 · {hidden 覆盖 | 无隐藏覆盖}.
Four sub-sections, ordered by |ratio| descending (most decisive dimension first — not alphabetical). Each sub-section:
### {dim 中文名} {DIM} = {ratio}({极性字}·{极性中文})· {n} 题
- **Q{id}** {anchor-or-short-tag}「{selected option text verbatim}」· {delta}
- ... (2–4 decisive entries, sorted by |delta| descending)
**学理**:<one to three sentences>
Evidence rules:
perQuestion[i].selected.text.semanticAnchor is non-null or whose |delta| ≥ 0.5.学理 rules:
citations.{DIM} (already parsed from DRAFT.md §八). Name at least one author + year.citations.{DIM} is empty (source parse failed), fall back: read DRAFT.md §八 directly. Never invent authors or years.Short technical recap. Quote the asymmetric sign table verbatim:
GD > 0 ⇒ G (losing side: D)
ZR < 0 ⇒ R (losing side: Z)
NL < 0 ⇒ L (losing side: N)
YF < 0 ⇒ F (losing side: Y)
Plug in the four ratios, derive closest16, cite the personality card's core one-liner, and say in one sentence how the card's description lands on the §2 evidence.
Two blocks.
Hidden personality · Walk hiddenPersonalityEval in order (MAD → RAT → PURE → CPU → CHAOS → E-DOG → BENCH → VOID → LIMBO).
hiddenPersonalityHit is non-null: quote the trigger's condition (copy the boolean expression from src/logic/predicates.ts), explain each clause against the observed ratios / semantic anchors, and pull the mechanism line from citations.hidden[code].Overlay titles · For each hiddenTitleEval entry: hit ones get a one-line trigger justification (cite the semantic anchors involved). Missed ones can be listed in a single compressed line. Explicitly surface any title that is structurally unrecoverable — currently just 退退退 (retreatCount is session-only, never encoded) — never claim it fired or did not.
citations.disclaimer as source and compress to one sentence. Do not expand into a paragraph. A hard upper bound — no exceptions.假设读者是一个完全不懂心理学、不懂这个测试怎么打分的普通人。 你是在用大白话给 TA 解释 TA 自己的结果。
核心原则:
expressive suppression(说人话:把情绪往肚里吞)。第二次出现可以只用中文。citations.{DIM} 为空时回读 DRAFT.md §八。citations is empty or a dimension array is missing, fall back to a live Read of DRAFT.md §八 before narrating.perQuestion entry, a semantic anchor from SEMANTIC.*, or a trigger expression in predicates.ts. No free-floating psychological speculation.src/data/ + src/logic/, not this skill.