Skip to content

feat(feedback): implicit signals — copy and continue (response-feedback PR-2) - #1146

Open
philmerrell wants to merge 1 commit into
developfrom
feature/feedback-implicit-signals
Open

philmerrell wants to merge 1 commit into
developfrom
feature/feedback-implicit-signals

Conversation

@philmerrell

Copy link
Copy Markdown
Contributor

docs/specs/response-feedback.md §11 PR-2, off develop after #1142 and #1145 merged.

Why

Thumbs cover a few percent of turns and skew negative. §10's implicit signals cover nearly every turn at no UI cost, and the row family has carried the signal discriminator since #1142 precisely so this could land without a backfill.

What

  • Rows: same F# family, own key — SK F#{session}#{message}#{kind}, GSI_SK F#{message}#{kind} — so a signal never collides with the thumb on the same message. signal: "implicit", kind (closed enum), an ADDed count, updatedAt, TTL. No session rollup: the rows are the read model.
  • Route POST /sessions/{id}/messages/{messageId}/signals with {kind}; 204 once accepted, same ownership check and RESPONSE_FEEDBACK_ENABLED kill switch as the thumbs.
  • SPA: the existing Copy (on clipboard success) and Continue clicks in the message actions rail call MessageFeedbackService.recordSignal, fire-and-forget, deduped per message per kind per page load. Nothing in the UI waits on it or shows a failure.
  • Admin profile: feedback.implicit = {copied, continued} as messages touched per kind (a message copied three times counts once), null when none; its own line under the Feedback tile.
  • Never summed: every thumb reader — the messages-list merge, the profile's up/down and turn-class buckets, the rollups — filters implicit rows out. Tests pin it on both sides.
  • FEEDBACK_ROW_PROJECTION gains kind and count; the content-policy walk covers them.

What this does not change

  • Two of §10's four signals are deliberately absent. Edit-and-resend has no affordance in the SPA to hook. Abandonment is deferred: a session that goes quiet after a good answer looks identical to one that goes quiet after a bad one, so it needs its own design (or §10's offline "dissatisfaction in the next message" classifier) before it earns a row. Both recorded in the spec's §13.
  • No new flag, no CDK, nothing in the inference path.
  • Eval sampling (PR-4), the author surfaces (PR-5) and the report-dialog hatch remain unbuilt.

Tests

  • Storage (moto): three rows for a thumb plus two kinds under distinct keys, count reaches 2 on a repeat, the thumb untouched, thumb readers and rollups blind to the implicit rows, unknown kind refused, other user not owned, preview sessions write nothing.
  • Routes: 204 with the call forwarded; unknown kind and free text 422; kill switch 404.
  • Profile: messages-touched per kind, unknown kinds ignored, null when none; the existing never-summed test still holds.
  • SPA (worktree run against a per-package link of the main install with the two preview libraries stubbed): message-feedback.service spec (+2: once per message per kind and failure never surfaces; no server index / unavailable short-circuits), message-actions spec (+1: Continue records and still emits), session-profile.util spec (+1), anatomy page spec — 70 passed across those files. ng build (AOT) clean.
  • Full backend suite on this tree: 9024 passed, 3 skipped.
  • Not exercised live in the browser.

🤖 Generated with Claude Code

…ck PR-2)

Spec §10: denser than thumbs, no UI cost. Copy and Continue in the message
actions rail POST a kind code to /sessions/{id}/messages/{messageId}/signals
(fire-and-forget, once per message per kind per page load). Rows share the
F# family under their own key — F#{session}#{message}#{kind} — with
signal="implicit", kind, and an ADDed count, so they never collide with the
thumb and every thumb reader keeps filtering them out. The profile reports
feedback.implicit as messages touched per kind, on its own line: explicit
and implicit are never summed.

Edit-and-resend has no SPA affordance to hook; abandonment is deferred by
design (spec §13). Spec status and §13 updated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant