Repository navigation
Conversation
aakhter
force-pushed
the
pr/grouped-rail-placement
branch
from
October 5, 2026 00:31
e16af49 to
42ee7aa
Compare
Contributor
Author
aakhter
force-pushed
the
pr/grouped-rail-placement
branch
from
October 5, 2026 13:51
42ee7aa to
287321e
Compare
New sessions, spawned child sessions and saved web tabs now land in tab
groups instead of always starting in Ungrouped.
New session in a group:
- The group menu gains "New session" (first item). It expands a collapsed
group and runs ONE launch with the current case and run mode; a launch
already in flight is reported, not queued.
- run({ count, tabGroupId }) threads the group through every launch path
(local POST /api/sessions, remote/docker and external-CLI
/api/quick-start). The count overrides the steppers for that launch only.
- Server: POST /api/sessions and /api/quick-start accept an optional
tabGroupId (Zod, 1-100 chars; null/empty is a 400). The routes pass it to
addSession(), and TabLayoutService.sessionCreated() places the session at
the end of that group in the SAME versioned write that first records it.
The session is added to the live map inside the owner lock (with a
rollback when the write fails), so no queued layout edit can commit it
first. The group is looked up in the creating owner's own layout, so an
unknown, deleted or foreign id is ignored instead of failing the spawn. An
explicit group is a hand placement: a child placed this way is manual.
- The create response carries the committed tabLayout (only when tabGroupId
was sent), adopted before the new tab is drawn. Responses without the
field are unchanged.
Child sessions (parentSessionId / X-Codeman-Parent-Session):
- A child nobody placed follows its parent: the server's existing
normalization already puts it after the parent's rows; the browser now
draws a not-yet-stored child there too (project({ parents })) and, while
groups exist, adopts the server's order instead of echoing its own append
back through PUT /api/session-order (which pinned every child manual).
- The row menu says where a child sits (follows, placed by hand, parent
closed, parent loop) and offers "Follow parent again" only to a hand-placed
child. A child whose parent is gone stands on its own and is never
re-adopted.
Saved web tabs:
- Web tabs are layout refs like sessions; openness stays per device. A
grouped web tab shows (and takes an Alt+N slot) only while open here and
reopens where the layout keeps it. Pinned by tests; no behaviour change.
Unchanged: the flat rail and header strip (markup, HTML5 drag, append and
save on create), the tree semantics and single tab stop, sessionOrder and
Alt+N, and every request that does not send tabGroupId.
Contributor
Author
|
Rebased onto master (1.35.0), so this is now one commit on top of the shipped rail, keeping your 737a252 and 566365e behaviour as is. The only textual conflict was the Owner tab layouts paragraph in CLAUDE.md: I kept yours, including the pagehide keepalive exception, and added this PR's sentences after it. "New session" in the group menu adds a tab rather than a group, so it stays offered at the 32-group cap, while "New group" stays behind |
aakhter
force-pushed
the
pr/grouped-rail-placement
branch
from
October 6, 2026 01:24
287321e to
be4f849
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Based on master (the grouped-rail stack #517, #519, #525 and #526 shipped in 1.34.0 and 1.35.0). One commit.
This lets new, spawned and saved-web tabs land in tab groups.
New session in a group. A group's menu gains "New session": it expands the group and launches one session with the current case and run mode.
tabGroupIdonPOST /api/sessionsand/api/quick-start).TabLayoutService.sessionCreated()places the session at the end of that group in the same versioned write that first records it. The session joins the live map inside the owner lock, so nothing queued can commit it first, and a failed write rolls the registration back.Children follow their parent. A session spawned by another one follows its parent into the parent's group until it is moved by hand.
PUT /api/session-order. That echo used to pin every child in place.Web tabs. Saved web tabs keep per-device openness: a grouped web tab shows only while it is open on this device, and reopens where the layout keeps it.
Unchanged: the flat rail, the header strip, the tree semantics,
sessionOrderand Alt+N. NoTabLayoutmodel changes;normalizeTabLayoutalready handled child follow.Tests cover the service (atomicity, owner scoping, rollback, follow vs manual), the routes (via
app.inject), the launch paths, the rail (jsdom), and end to end through a real WebServer.docs/api-reference.mddocumentstabGroupId.For review
session:createdarrives before the POST response, a grouped session can show in Ungrouped for one render until the layout read lands. I left the layout out of the SSE payload to keep the SSE contract unchanged.GET /api/webviews). They render in Ungrouped with no move actions, since they are not in the admin's layout.