---
title: 'Sprint Log — 2026-03-01 (1W Mar 2026)'
date: 2026-03-01
status: completed
---

# Sprint Log — 1W Mar 2026

## SP Status Overview

| SP   | Title                                         | Status                         |
| ---- | --------------------------------------------- | ------------------------------ |
| SP10 | Skill Mention / `@type:name` Reference System | `[x]` **completed 2026-03-01** |
| SP12 | Session Bookmark Support                      | `[x]` **completed 2026-03-01** |

---

## 2026-03-01

### SP12 — Session Bookmark Support ✅

**Problem:** No way to surface important sessions from a long history list.

**Solution:** `is_bookmarked` column on sessions table with a toggle command,
optimistic UI update in `AgentSessionListContext`, bookmark icon on `SessionCard`,
and a "Bookmarked" filter toggle in `SessionHistoryPanel`.

**Key decisions:**

- Optimistic UI: flip local state immediately, revert on backend error.
- Pattern follows `toggle_playbook_bookmark` established by SP-playbook work.
- `is_bookmarked` serializes to `isBookmarked` via SeaORM `rename_all = "camelCase"`.

**See:** `docs/features/session-bookmarks.md`

---

### SP10 — Skill Mention / `@type:name` Reference System ✅

**Problem:** Skills could not be referenced from the chat input in a way that
stayed current across edits and didn't pollute the stored message.

**Initial (rejected) approach:** Chip-based early binding — JS collected skill
content at submit time and prepended as a message prefix. Discarded because:

- Stored message lost the reference signal.
- Skill updates not reflected until user re-selects.
- Chips added UI complexity with no semantic benefit.

**Final approach:** Late-binding `@type:name` references.

- User types `@skill:docx` in the textarea — text stored as-is in DB.
- Rust `ReferenceRegistry` + `ReferenceResolver` trait system parses tokens at
  LLM call time and prepends resolved content to the `CompletionRequest` payload.
- Frontend provides type-first dropdown UX: `@` → type list → arg list.
- `useInputToken` state machine hook (idle → typing-type → typing-arg).
- `InputTokenDropdown` replaces `SkillMentionDropdown`.
- No chips. No `getMessagePrefix`. No early binding.

**Extensibility:** New resolver = one Rust struct + one line in `build_default_registry()`.
Frontend candidate source wired in `useInputToken`.

**Deferred:** `@file:`, `@tool:` resolvers; `/command` system.

**See:** `docs/features/skill-mention-reference-system.md`

---

## Bug Fixes

### `playbook_integration_test.rs` — missing `is_bookmarked` field

SP12 added `is_bookmarked` to `session::ActiveModel`. Two test fixtures in
`tests/playbook_integration_test.rs` were missing the new required field,
causing a Rust compile error. Fixed by adding `is_bookmarked: Set(false)` to
both initializers.
