From e1ad6804756e730288b90cd96baf4e65c06952b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Fri, 21 Aug 2026 19:30:06 +0000 Subject: [PATCH] a commander opens in /chat, where you were already reading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clicking one in the Live list navigated to /command-hq — out of the screen, into a different route with a different layout, having lost your place in the list you were scanning. I argued for that in the commit before this one: /chat renders the transcript without the category, cost, watcher state or the disarm control. It loses to a simpler argument. A commander IS a chat — same harness, same transcript, resumable by the same route — and being thrown out of the page you are reading costs more than metadata you did not ask for. Command HQ is where you go to MANAGE a commander, which is a separate errand from reading what it just said. Verified rather than assumed, because a commander's cwd is not one of /chat's directory groups: the default-group load misses, and GET /chat/sessions/:id falls through to the by-id scan, which returns all six messages and the real cwd with it. So the detail panel resumes it with no cwd hint at all. Co-Authored-By: Claude Opus 5 --- .../src/apps/ChatHistory/SessionList.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/workspaces/officerdev/src/apps/ChatHistory/SessionList.tsx b/src/workspaces/officerdev/src/apps/ChatHistory/SessionList.tsx index b93c4d5c..63a2d13f 100644 --- a/src/workspaces/officerdev/src/apps/ChatHistory/SessionList.tsx +++ b/src/workspaces/officerdev/src/apps/ChatHistory/SessionList.tsx @@ -9,7 +9,6 @@ import { useChatPwds, useClaudeSessions } from 'state/useClaudeSessions'; import type { LiveSession } from 'state/useLiveSessions'; import { useLiveSessions } from 'state/useLiveSessions'; import { useSelectedChatSession } from '../../channels'; -import { commandHqSessionPath } from '../CommandHQ/command-hq-routes'; import { chatNewPath, chatSessionPath, cwdFromSplat } from './chat-routes'; import { DirPickerModal } from './DirPickerModal'; import { LiveMarker, SessionRow, shortenPath, useScrollActiveIntoView, useSessionRowActions } from './SessionRow'; @@ -368,16 +367,17 @@ const LiveView = ({ activeId, home }: { activeId?: string; home: string | null } */ const LiveRow = ({ session, activeId, home }: { session: LiveSession; activeId?: string; home: string | null }) => { const transcriptId = session.claudeSessionId; - // A commander opens in Command HQ. `/chat/` would render the same transcript with none of what makes - // it a commander legible — no category, no cost, no watcher state, and no way to disarm it. - const to = transcriptId - ? session.isCommander - ? commandHqSessionPath(transcriptId, undefined) - : chatSessionPath(transcriptId) - : undefined; + // A commander opens HERE, in /chat, like any other row. + // + // This briefly linked to Command HQ, on the argument that /chat renders the transcript without the + // category, cost, watcher state or the disarm control. That argument loses to a simpler one: sending + // somebody out of the screen they are reading, into a different route with a different layout, is a + // bigger loss than the metadata they did not ask for. A commander IS a chat — the same harness, the same + // transcript, resumable by the same route. Command HQ is where you go to MANAGE one, which is a separate + // errand from reading what it just said. return (