feat: communication voice as a new fingerprint domain#49
feat: communication voice as a new fingerprint domain#49daveh-beep wants to merge 1 commit intoblock:mainfrom
Conversation
Proposes extending the fingerprint format to support communication voice alongside visual. Four new dimension blocks (tone, structure, register, boundaries) parallel palette/spacing/typography/surfaces. Adds: - docs/communication-voice.md — domain spec with dimension definitions, embedding layout, and domain detection rules - comms-review recipe — scan generated copy for voice drift - comms-verify recipe — generate → review → iterate loop for copy - comms-fingerprint.template.md — starter template No code changes yet — this is the format proposal and skill recipes. Schema changes (making visual dimensions optional so comms-only fingerprints validate) would follow in a separate PR. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
On measuring distance between subjective descriptionsThe hard question for comms fingerprints isn't whether two fingerprints differ — Ghost's visual side dodges this by grounding in numbers — Three layers to make subjective descriptions machine-comparable: 1. Ground subjective labels in observable behavior"Warm" is subjective. "Uses contractions, second-person pronouns, sentences under 15 words, and acknowledges the reader's situation before stating the action" is measurable. The fingerprint's prose layer ( Distance between two fingerprints is computed on the structured layer, not the prose. If fingerprint A says 2. Calibrate with objective resultsSubjective descriptions are hypotheses. Objective results validate them. The fingerprint could track:
The fingerprint becomes a living document — subjective decisions get annotated with objective evidence over time. A decision that says "we chose action-first information order" gets grounded with "support tickets dropped 12% after switching from context-first." This is the 3. Semantic embedding for the prose layerGhost already supports The 20-dim structured vector handles the measurable distance. The semantic embedding handles the interpretive distance. Together they answer: "these two brands are 0.04 apart structurally but 0.31 apart in how they describe themselves — which means they execute similarly but think about it differently." That gap is where interesting design conversations live. The splitSubjective language becomes machine-comparable when you split it into two layers — what you say the brand is (prose, embedded semantically) and what you do (structured dimensions, computed arithmetically). Distance between descriptions is cosine similarity. Distance between behaviors is vector math. The gap between the two is the most interesting measurement — it tells you where a brand's self-image doesn't match its output. |
Summary
Proposes extending Ghost's fingerprint format to support communication voice as a first-class domain, parallel to visual (palette/spacing/typography/surfaces).
Why
Ghost captures visual brand identity and detects when generated UI drifts from it. The same problem exists for generated copy — a brand's voice drifts when AI authors notifications, error messages, or any user-facing text without a structured quality bar. Ghost's architecture (fingerprint as contract, review for drift detection, verify for iteration, ack/adopt/diverge for remediation) already handles this. The only thing missing is the dimension set.
What's proposed
Four communication dimension blocks, parallel to the four visual blocks:
palettetonespacingstructuretypographyregistersurfacesboundariesA fingerprint can be visual-only, communication-only, or both. Domain detection is based on which dimension blocks are present.
Files added
docs/communication-voice.md— full domain spec with dimension definitions, embedding layout (20-dim), partition rules, and domain detectionpackages/ghost-drift/src/skill-bundle/references/comms-review.md— review recipe adapted for copy drift detectionpackages/ghost-drift/src/skill-bundle/references/comms-verify.md— generate → review → iterate loop for copypackages/ghost-drift/src/skill-bundle/assets/comms-fingerprint.template.md— starter template with all comms dimensionsWhat's NOT included (next PR)
schema.ts(making visual dimensions optional so comms-only fingerprints validate)compare.tsDesign decisions
ack/adopt/divergework unchanged for voice decisionsghost-drift comparecomputes distance over whichever dimensions both fingerprints shareTest plan
🤖 Generated with Claude Code