VALIDATE · RECORD · REVIEW
Agent feedback UI: record a versioned, actionable signal
Edit a fictional draft, test duplicate submission and inspect a local review queue.
Last operation
Per-version active counts
Exact local queue
Scope and references
This is an editable teaching fixture, not a feedback service. A rule requiring twelve characters cannot assess whether a reason is useful. Queued text is rendered as text, never HTML. See W3C form notifications for accessible errors and OWASP input validation for input constraints and server-side validation. Browser-only policies are not a security boundary.
Create a versioned record
This experiment runs a small feedback queue entirely in browser memory. Answer version selects either a fictional fourteen-day return answer or its thirty-day revision. Rating is positive or negative; Category classifies the report as accuracy, usability or other. Reason is editable text, not a preset transcript. Submission key identifies one intended submission. Permission allows this fictional draft to enter the queue; it is an explicit teaching policy, not a claim about legal consent. Use invented text only. No feedback leaves this page and reloading clears the queue.
Make validation visible
Require reason applies only to negative ratings. With it enabled, a trimmed reason needs at least twelve UTF-16 code units; both policies cap reasons at 240. The limit measures JavaScript string units, so some characters count twice. These thresholds are illustrative form rules and do not establish that a complaint is meaningful. Clear Reason, keep Negative and submit: the form shows a reason-specific error and inserts nothing. Disable Require reason and submit again to record a low-context signal. Positive ratings may have no reason under either policy. Field errors are text, associated with their controls and announced after submission.
Distinguish retries from new feedback
At the initial values, Submit draft creates feedback-1 for answer-v1 with one negative rating. Submit the identical draft again: status becomes duplicate, the same receipt returns, and the queue still contains one row. Change Reason while retaining the key: status becomes conflict and the stored record stays unchanged. Change the key to demo-2 to record a separate intention. This protects against accidental double submission in one local queue, not distributed exactly-once delivery. A real server would need atomic key ownership and authenticated resource access; browser controls cannot provide that boundary.
Separate review from withdrawal
Queue record selects an actual stored receipt. Resolve marks a queued item resolved without erasing its rating. Withdraw changes a queued item to withdrawn and removes it from the active aggregate, but retains its local record as a teaching tombstone. This is not personal-data erasure. Both actions are terminal in this simplified state machine: a resolved or withdrawn item cannot transition again. Clear queue discards every local record and starts fresh. The queue holds at most ten entries so its capacity boundary is directly testable. These operations take effect immediately; playback never submits, resolves or withdraws a record.
Compare versions without overstating evidence
Submit one negative item for answer-v1, then choose answer-v2, select Positive, use a new key and submit. The per-version counts show one negative out of one for v1 and zero out of one for v2. Withdraw the second queued record and its active count becomes zero. A resolved first record remains in its aggregate. Counts describe only the hand-entered sample; they do not estimate model accuracy or show that the revision caused an improvement. There is no random assignment, sampling correction, sentiment inference, moderation or production identity here.
Inspect the last operation
Play reveals the computed last-submission trace across sixty inspection seconds. Pause freezes it; Restart rewinds without clearing records, Next step advances ten seconds and pauses, Timeline seeks, and Speed changes only teaching pace. Editing a draft does not change a stored record or the last receipt. Submit starts a new paused trace; queue actions also pause. Hidden tabs pause automatically. Export queue downloads the current records and counts immediately. Capture baseline saves visible outcomes for comparison; Replace baseline and Clear baseline manage that snapshot. Notebook text persists locally and Export notes downloads it. Expand experiment offers fullscreen inspection. The serialized queue is selectable text and wraps at phone widths.