Summary
Pinned threads and manual arrangement, following T3 Code's current code. Phase B2 of #535. Depends on #526.
Spec
SessionMeta.pinned_at and pin_order: Option<String>; active_order: Option<String> for manual arrangement of the active list. Order keys are fractional base-26 strings (lexicographic, arbitrary extension, no trailing a), generated by the ordering code in core; the host stores them. Normal moves write only the moved thread's key; corrupt or reversed bounds spread fresh keys while preserving hidden rows' positions.
- Pinning a settled thread promotes it to
Active (no unsettled_at stamp). Unpin does not clear Active. Settling unpins and clears the active order. Pinning does not stamp unsettled_at.
- Pinned threads are exempt from automatic settlement, both inactivity and PR routes. (Upstream's user doc says otherwise; its code and test exempt. Code wins.) Manual settle still works and unpins.
- Sidebar: pinned section first, sorted by key then newest-created for keyless rows; drag within pinned or active to reorder, drag between sections to pin / unpin / settle / un-settle, with the action shown while dragging; phone: Arrange threads with handles, plus Move up / Move down in the thread menu. New threads appear above the arranged active rows. Activity never reorders.
- Unpin shows the shared undo toast and restores the former key.
- Protocol:
PinSession {session_id, order_key?}, UnpinSession, ReorderPinned {order_key}, ReorderActive {order_key}.
Reference
T3 Code 83a82a46b: Orchestrator.ts pin/unpin/reorder (:2822–2867), ThreadSettlementService.ts:144 (pin blocker), ThreadSettlementService.test.ts:106–126, packages/client-runtime/src/state/threadSort.ts, packages/contracts/src/orchestrationV2.ts:2690.
Summary
Pinned threads and manual arrangement, following T3 Code's current code. Phase B2 of #535. Depends on #526.
Spec
SessionMeta.pinned_atandpin_order: Option<String>;active_order: Option<String>for manual arrangement of the active list. Order keys are fractional base-26 strings (lexicographic, arbitrary extension, no trailinga), generated by the ordering code incore; the host stores them. Normal moves write only the moved thread's key; corrupt or reversed bounds spread fresh keys while preserving hidden rows' positions.Active(nounsettled_atstamp). Unpin does not clearActive. Settling unpins and clears the active order. Pinning does not stampunsettled_at.PinSession {session_id, order_key?},UnpinSession,ReorderPinned {order_key},ReorderActive {order_key}.Reference
T3 Code 83a82a46b:
Orchestrator.tspin/unpin/reorder (:2822–2867),ThreadSettlementService.ts:144(pin blocker),ThreadSettlementService.test.ts:106–126,packages/client-runtime/src/state/threadSort.ts,packages/contracts/src/orchestrationV2.ts:2690.