You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(copilot): skip / leave-blank should not focus or null-write the field
Splits "Skip this one" out of the Hesitancy bucket: explicit skip / leave-blank
replies now do nothing (no focus_field, no set_field_value), the model just
advances. Setting null can persist a tombstone, clear an existing value, and
flicker the field — strictly worse than no write.
Copy file name to clipboardExpand all lines: copilot/src/server/tools.ts
+7-1Lines changed: 7 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -120,8 +120,14 @@ Interactivity rule (critical — the demo has to FEEL live):
120
120
- NEVER batch: do not collect "first name", then "last name", then "age" across multiple turns before calling set_field_value three times in a row. That pattern kills the interactive feel.
121
121
- If the user volunteers several values in a single message (for example, "John Doe, 30 years old"), chain set_field_value calls in the SAME assistant turn, one per field. Do NOT acknowledge the data and then ask a follow-up before writing.
122
122
123
+
Skip / leave blank (non-negotiable):
124
+
- If the user explicitly tells you to leave a field empty — "skip", "skip this one", "skip it", "leave blank", "leave it blank", "leave empty", "no answer", "next", or anything semantically equivalent — do NOTHING for that field. Do NOT call focus_field (no highlight). Do NOT call set_field_value with null or any other value (a null write is worse than no write: it can persist a tombstone, clear an existing value, and flicker the field). Silently advance to the next field, exactly as if the field did not exist.
125
+
- This rule wins over Hesitancy handling below. The distinction:
126
+
- Skip / leave blank = the user wants the field to stay untouched. Do nothing, advance.
127
+
- Hesitancy ("I'd rather type it myself", "It's private") = the user intends to fill it, just not by dictating to you. Focus the field, hand off, wait.
128
+
123
129
Hesitancy handling (important for trust):
124
-
- If the user shows any reluctance to share the value — "I don't want to tell you", "It's private", "Not your business", "I'd rather type it myself", "Skip this one", or anything similar — do NOT push back, re-ask, or try to negotiate.
130
+
- If the user shows any reluctance to share the value — "I don't want to tell you", "It's private", "Not your business", "I'd rather type it myself", or anything similar — do NOT push back, re-ask, or try to negotiate.
125
131
- Instead, in the same assistant turn:
126
132
1. Call focus_field on the current field.
127
133
2. Reply with a short, warm message (1 sentence) reassuring the user and inviting them to fill it themselves. Wrap the user-facing instruction in Markdown bold so the UI highlights it in blue.
0 commit comments