Skip to content

feat(chat): per-row pin (Phase 3d) + archived-search#267

Merged
blove merged 1 commit into
mainfrom
claude/trusting-kalam-a63308
May 12, 2026
Merged

feat(chat): per-row pin (Phase 3d) + archived-search#267
blove merged 1 commit into
mainfrom
claude/trusting-kalam-a63308

Conversation

@blove
Copy link
Copy Markdown
Contributor

@blove blove commented May 12, 2026

Summary

  • Adds per-thread pin/unpin to @ngaf/chat: new Thread.pinned?: boolean, ThreadActionAdapter.pin?/unpin?, pin-aware kebab menu (active mode only), and a small pin icon prepended in the title when pinned.
  • Framework stays dumb about ordering — consumers pre-sort pinned threads to the top. Example wires LangGraph metadata.pinned and sorts on refresh.
  • Bundles the archived-search freebie: demo-shell.searchResults now matches both active and archived threads (archived results carry a "Archived" subtitle).

Out of scope

Drag-to-reorder pinned, pin from archived view, per-pin timestamps, optimistic pin-icon flip.

Test plan

  • nx run chat:test — 568 tests pass (22 original + 6 new pin tests in chat-thread-list spec)
  • nx run chat:build && nx lint chat — clean
  • nx run examples-chat-angular:build — clean
  • API docs regenerated
  • Browser-verified: pinned thread renders pin icon, lifts to top after consumer refresh, menu shows "Unpin" on pinned row + "Pin" on unpinned row

🤖 Generated with Claude Code

- Add Thread.pinned typed field and ThreadActionAdapter.pin/unpin.
- Pin-aware menu in chat-thread-list (active mode only); pin icon
  prepended in the title when pinned.
- Framework stays dumb about ordering; consumers pre-sort pinned-first.
- Wire ThreadsService.pin/unpin against metadata.pinned and sort
  active threads pinned-first on refresh.
- Bundle archived-search freebie in demo-shell so palette matches
  active + archived (archived marked with "Archived" subtitle).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cacheplane Ready Ready Preview, Comment May 12, 2026 11:06pm

Request Review

@blove blove merged commit 3d56792 into main May 12, 2026
14 checks passed
@blove blove deleted the claude/trusting-kalam-a63308 branch May 12, 2026 23:11
blove added a commit that referenced this pull request May 12, 2026
Pin (Phase 3d, PR #267) landed first. Updates Task 6's chat-thread-list
patches so "Move to project" inserts alongside existing pin/unpin
entries instead of replacing them. Tasks 1, 7, 8, 10-13 remain valid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
blove added a commit that referenced this pull request May 12, 2026
…rk (#271)

Brings the canonical smoke checklist current with 29 PRs that landed
between Phase 7 (#239) and today without checklist updates. Specifically:

Updated sections:
- chat-debug devtools — replaced bottom-drawer model with floating
  launcher + status pill + switch (PRs #249, #251)
- Control palette — palette v2 (status pill, shadcn-styled panel, PR #244)
- Generative UI / A2UI surfaces — single-bubble invariant (PR #255),
  parent-emits-envelopes architecture (PR #259), wrapped-content +
  tool_calls coexistence (PR #255), envelope reorder
- Server-side wire format — tool_calls preserved on the final AI
- Replaced 'Multi-thread' section with 'Sidenav (thread management)'
  reflecting the permanent semantic <nav> + Active/Archived sections
  (PR #253) and removing the old palette-toggled drawer model

Added sections:
- Cmd+K history search — palette open/search/select/close, archived
  result subtitle, keyboard navigation (PR #253)
- Per-row thread actions — kebab menu order per state (active, pinned,
  archived), rename + pin/unpin + archive/unarchive + delete flows
  (PRs #258, #260, #267)
- Thread titles — first-user-message derivation, idempotent writes,
  manual rename precedence (PR #242)
- Progressive A2UI streaming — per-component fallback transition
  observable during streaming window (PRs #252, #261, #262, #268, #269)
- Inline checkpoint markers — render between messages during multi-step
  runs (PR #243)
- Responsive sidenav — viewport breakpoints, auto-collapse behavior (PR #240)

Total: ~58 new check items across 6 new sections, plus rewrites to 5
existing sections. Original 333-line checklist → 391 lines / 237 check
items.
blove added a commit that referenced this pull request May 13, 2026
Pin (Phase 3d, PR #267) landed first. Updates Task 6's chat-thread-list
patches so "Move to project" inserts alongside existing pin/unpin
entries instead of replacing them. Tasks 1, 7, 8, 10-13 remain valid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
blove added a commit that referenced this pull request May 13, 2026
Pin (Phase 3d, PR #267) landed first. Updates Task 6's chat-thread-list
patches so "Move to project" inserts alongside existing pin/unpin
entries instead of replacing them. Tasks 1, 7, 8, 10-13 remain valid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
blove added a commit that referenced this pull request May 13, 2026
* docs(specs): chat projects — Phase 4 design

Full Projects scope: Project type + ProjectActionAdapter; new
chat-project-list primitive; chat-sidenav Projects section with
"+ New project"; thread-project association via Thread.projectId?;
"Move to project" thread row action via a second overflow-menu
submenu. Example wires localStorage-backed ProjectsService.
Defers per-project instructions / files / sharing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(plans): chat projects — Phase 4 implementation plan

14 tasks across type extensions, new chat-project-list primitive
(styles + component + spec), chat-thread-list move-to-project
submenu, chat-sidenav Projects section, ProjectsService
(localStorage), ThreadsService projectId mapping, demo-shell
wiring, API docs regen, and manual browser verification.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* docs(plans): rebase Projects plan onto post-pin chat-thread-list

Pin (Phase 3d, PR #267) landed first. Updates Task 6's chat-thread-list
patches so "Move to project" inserts alongside existing pin/unpin
entries instead of replacing them. Tasks 1, 7, 8, 10-13 remain valid.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(chat): Thread.projectId + ThreadActionAdapter.moveToProject

* feat(chat): Project + ProjectActionAdapter types; chat-project-list skeleton

* feat(chat): chat-project-list styles

* feat(chat): chat-project-list component

* test(chat): chat-project-list coverage

* feat(chat): chat-thread-list Move-to-project submenu

* feat(chat): chat-sidenav Projects section + forwards projects to thread list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(chat): chat-sidenav Projects section coverage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(chat): export chat-project-list + Project + ProjectActionAdapter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(examples-chat): ProjectsService (localStorage-backed)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(examples-chat): ThreadsService projectId mapping + moveToProject

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(examples-chat): wire projects + project filtering + move-to-project

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs(chat): regenerate API docs for Projects (Phase 4)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <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