- {/* ONE row: message, commit, then the two bulk index moves. */}
+ {/* One row when there is room; in a narrow panel the buttons
+ wrap below rather than squeeze the message to a few
+ characters (its min width is what triggers the wrap). */}
{stagedCount > 0 && (
)}
{/* The work range splits like VS Code's Source Control: what the
diff --git a/client/src/components/lanes/__tests__/LaneChangesPanel.test.tsx b/client/src/components/lanes/__tests__/LaneChangesPanel.test.tsx
index 8097b718..d20870e6 100644
--- a/client/src/components/lanes/__tests__/LaneChangesPanel.test.tsx
+++ b/client/src/components/lanes/__tests__/LaneChangesPanel.test.tsx
@@ -1069,7 +1069,7 @@ describe("LaneChangesPanel", () => {
expect(screen.getByTestId("lane-file-editor")).toHaveValue("xy");
});
- it("unstages every staged file in one call, on the same row as Stage all and commit", async () => {
+ it("unstages every staged file in one call, in the same pinned bar as Stage all and commit", async () => {
const user = userEvent.setup();
render();
await screen.findByTestId("lane-changes-overview");
diff --git a/docs/LANES.md b/docs/LANES.md
index 7589152e..60d9b78f 100644
--- a/docs/LANES.md
+++ b/docs/LANES.md
@@ -733,9 +733,10 @@ in every panel narrow enough to sit beside a console.
**Per-file writes are the panel's, per-repo writes are the git bar's.** Staging
one file means nothing unless a commit can take the index as it stands, so the
overview grows a commit box the moment anything is staged — above the list and
-pinned while it scrolls, on ONE row with a **Stage all** that stages every listed file
-the index lacks in one call and an **Unstage all** that unstages every staged one — it sends
-`only: "staged"`, never `add -A`, and it is absent with a clean index because
+pinned while it scrolls: the message (and its suggest button), the commit button, a **Stage all** that stages every listed file
+the index lacks in one call and an **Unstage all** that unstages every staged one — one row when the
+panel has room, the buttons wrapping under the message when it is narrow. The commit sends
+`only: "staged"`, never `add -A`, and the box is absent with a clean index because
there is nothing it could mean. A file you never want committed (a local note, a scratch folder) can be marked **Never stage** (its row's eye-off button, or right-click): **Stage all** and a folder's stage button then skip it, the row is struck through, and the file is drawn orange in the Files tree (`--kept`, apart from the amber of a modified file). The list is kept in this browser per workspace (`agenthub.changes.neverStage.`) and git is never told — nothing is written to the repo, and the file's own Stage still works. It is the dashboard's ONLY commit: the git bar
above it has none, so no click can sweep the rest of the tree in with `add -A`. **Discard** is the one
irreversible action in the panel: it asks twice in the UI, and the server