feat(chat): message-level pinning with pinned messages panel - #1676
Conversation
GPT 5.6 Review (fork) — 🔴 changes requested (blocking)Reviewed BLOCKING -- website/src/hooks/useChatPins.ts:41 -- Pinning crashes on supported non-secure dashboard origins BLOCKING -- src/kiro_crew/dashboard/state.py:3755 -- Transient read failures cause destructive pin-store replacement FINDING -- website/src/hooks/useChatPins.ts:53 -- With no cached query data, |
Design Review (Fable 5, fork) — 🟡 CONCERNSAdvisory design-level review of Design-Verdict: CONCERNS Sound feature on the chat-folders precedent, but it ships "legacy" compat and an uncalled public endpoint for pin data that has never existed. Watch
Suggestions
[DESIGN-REVIEWED] 1a42a5f |
Opus 4.8 Review (fork) — ✅ no blocking findingsReviewed Review detailsI've now read the complete diff and verified the security-sensitive paths: redaction helper signatures ( Falsification of Phase A candidates:
No candidate survived Phase B. No findings. [OPUS-REVIEWED] 1a42a5f |
c3bcf7b to
5f9f2d6
Compare
UX Review (Fable 5, fork) — 🟡 CONCERNSAdvisory UX-level review of UX-Verdict: CONCERNS Solid pin flow overall, but Korean ships raw English, a failed pin-list renders as "no pins yet," and the hard 50-pin limit says "Try again." Watch
Suggestions
[UX-REVIEWED] 1a42a5f |
a85547c to
64a07a2
Compare
|
There are AI review comment and conflicts |
64a07a2 to
465d845
Compare
be861b3 to
ea2b955
Compare
ea2b955 to
2a05212
Compare
2a05212 to
af53d52
Compare
3e38f3d to
77b2522
Compare
77b2522 to
157dcf8
Compare
157dcf8 to
1549640
Compare
1549640 to
bf07e1e
Compare
bf07e1e to
c4650bc
Compare
|
This PR is otherwise ready. New translation changes merged into main and introduced merge conflicts, so I’m resolving those and refreshing the branch now. No functional changes to the message-pinning feature are inbound. |
|
Confirmed this was the same upstream catalog-parity failure independently seen on PR #2299: the Korean |





Closes #1662
What
Users can now pin individual messages (user or agent) in a chat session and review them in a dedicated Pinned messages panel.
How
chat_pins.jsonJSON store onDashboardStatewith atomic writes and startup load; new/api/chat/pinsroutes (GET list by slot, POST create — idempotent per(slot_key, message_ts), DELETE by id or by slot+ts).ts.useChatPinshook +PinnedMessagesPanelcomponent; wiring inChatPagekeeps new props minimal on the memoized message components to avoid re-render pressure in the virtualized list.Testing
test_dashboard_chat.pysuite passes (504 tests).UserMessage(27) andAssistantMessage(52) suites pass; i18n catalog parity passes.ContextBreakdownPanel.test.tsx, also fails on cleanorigin/mainwith these changes stashed, i.e. pre-existing),npm run buildclean,eslint src/0 errors,./scripts/docs-lint.shclean.Screenshot Evidence
Live-tested on a real gateway serving the built dist: