Skip to content

Commit 9581286

Browse files
committed
docs(sync): add post-merge QA checklist and document LAC-163 regressions
- Post-merge QA checklist with 6 items covering borders, keybinds, mode indicator, shell mode, cwd display, and typecheck - Document row-layout pattern for double border (fixes nested-border height bug) - Add keybinds.ts as a recurring conflict file (agent_cycle = shift+tab) - Update sync history with LAC-163 QA findings
1 parent 9d7ac27 commit 9581286

1 file changed

Lines changed: 76 additions & 1 deletion

File tree

UPSTREAM_SYNC.md

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,9 +207,45 @@ See commit `e95356aec` for the full diff of these changes.
207207
13. Working directory display in footer fallback
208208
14. Mode toggle hint in footer hints area
209209

210+
**Double left border** — upstream only has a single border. Add the execution mode inner border using a **row layout** (not nested borders — see below):
211+
212+
```tsx
213+
<box border={["left"]} borderColor={borderHighlight()} customBorderChars={{...SplitBorder.customBorderChars, bottomLeft: ""}}>
214+
<box flexDirection="row">
215+
<box
216+
width={1}
217+
alignSelf="stretch"
218+
border={["left"]}
219+
borderColor={modePrefixColor()}
220+
customBorderChars={{ ...SplitBorder.customBorderChars }}
221+
/>
222+
<box paddingLeft={2} paddingRight={2} paddingTop={1} flexShrink={0} backgroundColor={theme.backgroundElement} flexGrow={1}>
223+
{/* textarea + footer */}
224+
</box>
225+
</box>
226+
</box>
227+
```
228+
229+
> **Why row layout?** Nesting `border={["left"]}` boxes causes the inner border to appear 1–2 rows shorter than the outer because Yoga sizes each box independently. Using `width={1}` + `alignSelf="stretch"` in a row container guarantees both bars span identical rows.
230+
231+
---
232+
233+
### 12. `packages/opencode/src/config/keybinds.ts`
234+
235+
**Pattern**: Upstream may reassign `agent_cycle` to `tab`. Lash remaps Tab to shell autocomplete.
236+
237+
**Resolution**: Ensure `agent_cycle` is on `shift+tab`, NOT `tab`:
238+
239+
```typescript
240+
agent_cycle: keybind("shift+tab", "Next agent"),
241+
agent_cycle_reverse: keybind("none", "Previous agent"),
242+
```
243+
244+
Tab is handled in `onKeyDown` in `prompt/index.tsx` via `handleShellTabCompletion()`.
245+
210246
---
211247

212-
### 11. `bun.lock`
248+
### 13. `bun.lock`
213249

214250
**Resolution**: Always regenerate after resolving all `package.json` conflicts:
215251
```bash
@@ -219,6 +255,42 @@ git add bun.lock
219255

220256
---
221257

258+
## Post-Merge QA Checklist
259+
260+
Run through this visually after every merge commit, before closing the sync issue.
261+
262+
### Prompt border
263+
- [ ] Two left border bars visible: outer bar = agent color, inner bar = execution mode color
264+
- [ ] Both bars are the **same height** — no gap at top or bottom of the inner bar
265+
- [ ] Outer bar shows a `` connector at the bottom join
266+
267+
### Keybinds
268+
- [ ] **Tab** → triggers shell autocomplete (shows completions or cycles them)
269+
- [ ] **Shift+Tab** → cycles agents (Build → Plan → …)
270+
- [ ] **Ctrl+Space** → cycles execution modes (agent → shell → auto)
271+
- [ ] **Enter** → submits prompt; **Shift+Enter** → inserts newline
272+
273+
### Execution mode indicator
274+
- [ ] Footer shows mode name in execution mode color (e.g. `ctrl+space agent`)
275+
- [ ] Switching modes updates both the inner border color and the footer label
276+
277+
### Shell mode
278+
- [ ] Typing `!` at start of prompt switches to shell mode (blue border)
279+
- [ ] Pressing Escape from shell mode returns to normal mode
280+
- [ ] Running a command in shell mode updates the working directory in the footer
281+
282+
### Working directory
283+
- [ ] Footer left side shows shortened cwd (e.g. `~/repo/lash`)
284+
- [ ] Running `cd <dir>` in shell mode updates the displayed cwd
285+
286+
### Typecheck
287+
```bash
288+
cd packages/opencode && bun run typecheck
289+
```
290+
Zero errors required before closing the sync issue.
291+
292+
---
293+
222294
## What Lash Preserves (invariants)
223295

224296
These features must always be preserved through upstream merges:
@@ -234,6 +306,8 @@ These features must always be preserved through upstream merges:
234306
| `determineRouting()` | `plugin/tui-integration/hooks.ts` | Shell vs agent routing |
235307
| `cwd sentinel` in bash | `src/session/prompt.ts` | Cwd tracking after cd |
236308
| `mode_toggle` keybind | `src/config/config.ts` | ctrl+space default |
309+
| `agent_cycle` keybind | `src/config/keybinds.ts` | shift+tab (NOT tab) |
310+
| Double left border | `component/prompt/index.tsx` | Row layout, not nested |
237311
| `EventCwdUpdated` | `sdk/js/src/v2/gen/types.gen.ts` | SDK type for cwd event |
238312
| cwd in `path.*` field | `src/session/prompt.ts` | Shows cwd in messages |
239313

@@ -282,3 +356,4 @@ For conflict-free or simple merges, this can be fully automated. Conflicted merg
282356
| Date | Upstream commits merged | Conflicts | Notes |
283357
|------|------------------------|-----------|-------|
284358
| 2026-04-02 | 673 (cf7ca9b2f → 92e820fdc) | 28 files | Major Effect rewrite of prompt.ts |
359+
| 2026-04-28 | (QA only — no new merge) | — | LAC-163: found 3 regressions post-merge: missing double border, wrong Tab keybind, border height mismatch. Fixed in commits bde00fa30, 85faf49fc, 9d7ac27c1. Added this QA checklist. |

0 commit comments

Comments
 (0)