Skip to content

Commit 4107762

Browse files
committed
docs(inspector): reconcile plan with PR TableProApp#1463 collapseBehavior pivot and conflict resolution
1 parent a2f1ced commit 4107762

7 files changed

Lines changed: 142 additions & 96 deletions

File tree

.docs/inspector/README.md

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,35 @@ Scope: `fix(inspector)`
66

77
Toggling inspector pane (right panel) trong cửa sổ nhỏ gây nội dung tràn ra ngoài frame. Ba pane có tổng `minimumThickness` (~954pt) vượt `window.minSize.width` (720pt).
88

9-
## Fix
10-
11-
`MainSplitViewController` recompute `window.minSize.width` động mỗi khi pane visibility thay đổi. Nếu cửa sổ đang nhỏ hơn min mới, cửa sổ tự expand.
9+
> **Reconcile 2026-06-09 (verified vs PR thật).** PR đã PIVOT. Commit `58cd1102`
10+
> ("refactor(inspector): grow the window via NSSplitViewItem.collapseBehavior instead of
11+
> custom min-size code") **bỏ hẳn** toàn bộ cơ chế recompute: xóa `recomputeWindowMinSize()`,
12+
> xóa override `splitViewDidResizeSubviews`, không còn `PaneMinimum`/`resolvedContentMinSize`/
13+
> `originalContentMinSize`, và **không còn** test `MainSplitViewControllerWindowMinimumSizeTests`.
14+
> Cách cuối: set `inspectorSplitItem.collapseBehavior = .preferResizingSplitViewWithFixedSiblings`
15+
> để AppKit tự nới window khi inspector bật. Floor 720×480 vẫn nằm tĩnh ở `TabWindowController`.
16+
> Toàn bộ kế hoạch "GỘP vào recomputeWindowMinSize" + ADR-006/007/010 bên dưới là **moot**
17+
> (xem `decisions.md` ADR-011).
18+
>
19+
> Conflict đã resolve (merge `upstream/main` vào `fix/inspector`, commit local `69e3555e`):
20+
> hết conflict, net diff vs main = chỉ `MainSplitViewController.swift` (collapseBehavior) + 1
21+
> dòng `CHANGELOG.md`. 3 fix kèm theo (mcp/connections/editor) bị bản trên main (#1587) thay hết.
22+
> **Push đang chờ**: bị GitHub chặn vì commit mang email `longnn@senprints.com` (account bật
23+
> block push lộ email). Build/lint **chưa verify cục bộ** (máy không có Xcode/swiftlint) → CI là cổng.
24+
25+
## Fix (cách cuối — collapseBehavior)
26+
27+
`inspectorSplitItem.collapseBehavior = .preferResizingSplitViewWithFixedSiblings`: khi inspector
28+
bật, AppKit nới window thay vì ép detail pane co lại. Bỏ toàn bộ code recompute `window.minSize`
29+
thủ công. Floor cố định 720×480 vẫn do `TabWindowController` set.
1230

1331
## Status
1432

15-
**OPEN-fork — PR [#1463](https://github.com/TableProApp/TablePro/pull/1463)**, branch `fix/inspector`. Chưa merge.
16-
17-
> Verified 2026-05-30: "DONE — 2026-05-25" trước đây là **superseded**. PR vẫn open.
33+
**OPEN — PR [#1463](https://github.com/TableProApp/TablePro/pull/1463)**, branch `fix/inspector`.
34+
Conflict đã resolve cục bộ; chờ push (email-privacy block) + CI build.
1835

19-
**Blocker (CONFLICTING logic thật)**: main đã có `recomputeWindowMinSize()`
20-
(`MainSplitViewController.swift:516`, call site `:185,:217,:478,:484`); PR thêm
21-
`recomputeWindowMinimumSize()` (tên mới) + `PaneMinimum`/`resolvedContentMinSize`/
22-
`originalContentMinSize`/`setCollapsed`. **CRITICAL fix**: GỘP logic PR vào method cũ
23-
`:516`, không tạo method thứ hai; không thêm override `splitViewDidResizeSubviews()`
24-
(đã có `:183`). Commit atomic. Plus drop noise (`.gitignore` + `CLAUDE.md:171`).
25-
Chi tiết: `context.md` mục "Open fork PR #1463", `tasks.md` agent checklist.
36+
> Verified 2026-05-30: "DONE — 2026-05-25" trước đây là **superseded**.
37+
> Reconcile 2026-06-09: kế hoạch merge "GỘP vào recomputeWindowMinSize" cũng **superseded** — PR pivot sang collapseBehavior.
2638
2739
## Files trong folder này
2840

@@ -40,5 +52,5 @@ Chi tiết: `context.md` mục "Open fork PR #1463", `tasks.md` agent checklist.
4052

4153
| File | Vai trò |
4254
|---|---|
43-
| `TablePro/Core/Services/Infrastructure/MainSplitViewController.swift` | `recomputeWindowMinSize()` (def `:516`), `showInspector()` (`:474`), `hideInspector()` (`:481`), `splitViewDidResizeSubviews` (`:183`), `viewWillAppear` (`:194`); call sites `:185,:217,:478,:484` (verified 2026-05-30) |
44-
| `TablePro/Core/Services/Infrastructure/TabWindowController.swift` | `window.minSize` baseline (720×480) |
55+
| `TablePro/Core/Services/Infrastructure/MainSplitViewController.swift` | `inspectorSplitItem.collapseBehavior` (cách cuối), `setCollapsed(_:for:)` helper, `showInspector()`, `hideInspector()`. `recomputeWindowMinSize()` + `splitViewDidResizeSubviews` đã **bị xóa** trong commit `58cd1102`. |
56+
| `TablePro/Core/Services/Infrastructure/TabWindowController.swift` | `window.minSize` baseline 720×480 (`:75`) — floor tĩnh duy nhất sau khi bỏ recompute |

.docs/inspector/brief.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Inspector pane overflow — brief
22

3+
> **Reconcile 2026-06-09.** Cách fix cuối của PR đã đổi sang native `NSSplitViewItem.collapseBehavior`
4+
> (commit `58cd1102`), **bỏ hẳn** mọi thứ về `recomputeWindowMinSize`/`PaneMinimum`/
5+
> `resolvedContentMinSize`/`originalContentMinSize` và geometry test. Mục "Open fork PR #1463",
6+
> "Kết quả", và bảng pane-sum bên dưới mô tả cách CŨ, nay **superseded**. Floor 720×480 vẫn tĩnh ở
7+
> `TabWindowController:75`. Chi tiết: `README.md`, `decisions.md` ADR-011, `tasks.md`.
8+
39
## Vấn đề
410

511
Khi user toggle inspector pane (panel bên phải) trong một cửa sổ hẹp (~720pt), nội dung và toolbar bị tràn ra ngoài viền window. AppKit cố gắng fit 954pt content vào 720pt frame.

.docs/inspector/changelog.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# inspector — changelog
22

3+
## 2026-06-09 — PR pivot sang collapseBehavior + conflict resolved
4+
5+
| Date | Event |
6+
|---|---|
7+
| ~2026-06 | PR pivot: commit `58cd1102` ("refactor(inspector): grow the window via NSSplitViewItem.collapseBehavior instead of custom min-size code") **xóa hẳn** `recomputeWindowMinSize()`, override `splitViewDidResizeSubviews`, `PaneMinimum`/`resolvedContentMinSize`/`originalContentMinSize`, và test `MainSplitViewControllerWindowMinimumSizeTests`. Thay bằng `inspectorSplitItem.collapseBehavior = .preferResizingSplitViewWithFixedSiblings` + helper `setCollapsed(_:for:)`. |
8+
| 2026-06-09 | Resolve conflict: merge `upstream/main` vào `fix/inspector` (commit local `69e3555e`). Hết conflict. 3 conflict file: `SQLContextAnalyzer.swift` + `PasswordSourceResolver.swift` lấy bản main (bị #1581/#1587/#1601 thay), `CHANGELOG.md` giữ wording main + chèn lại dòng inspector. Net diff vs main = `MainSplitViewController.swift` (collapseBehavior) + 1 dòng CHANGELOG. |
9+
| 2026-06-09 | Cập nhật PR description cho khớp collapseBehavior (bỏ mô tả recomputeWindowMinimumSize + test cũ). |
10+
| 2026-06-09 | Push **chưa xong**: GitHub chặn vì commit mang email `longnn@senprints.com` (account bật block push lộ email). Build/lint chưa verify cục bộ (không có Xcode/swiftlint) → CI là cổng. |
11+
12+
> Supersede note: toàn bộ timeline 2026-05-25/28/30 bên dưới dựa trên cách `recomputeWindowMinSize`
13+
> (recompute `window.minSize` thủ công). PR đã pivot sang collapseBehavior nên các fix đó **moot**.
14+
> Giữ lại để tham chiếu lịch sử.
15+
316
## 2026-05-30 — Reconcile vs main (verified)
417

518
| Date | Event |

.docs/inspector/context.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Inspector pane overflow — case study chi tiết
22

3+
> **Reconcile 2026-06-09.** Toàn bộ phần "Fix" (snippet `recomputeWindowMinSize`, 4 call site,
4+
> bảng scenario minSize) và mục "Open fork PR #1463 — code review & conflict resolution" bên dưới
5+
> mô tả cách CŨ. PR đã pivot sang `NSSplitViewItem.collapseBehavior = .preferResizingSplitViewWithFixedSiblings`
6+
> (commit `58cd1102`) và **xóa hết** code recompute + `PaneMinimum`/`resolvedContentMinSize`/
7+
> `originalContentMinSize` + geometry test. Bug Codex P2 "base-min-size chỉ tăng" cũng **moot** (không
8+
> còn code đọc `window.minSize` mutate). Symptom + root cause (TabWindowController set minSize tĩnh,
9+
> các pane minimumThickness) vẫn đúng. Chi tiết cách cuối: `decisions.md` ADR-011.
10+
311
## Symptom
412

513
Toggle inspector pane khi window width ~720pt → content area bị squeeze/tràn, toolbar controls bị che.

.docs/inspector/decisions.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565

6666
# Open fork PR #1463 — decisions (2026-05-30)
6767

68+
> **Superseded 2026-06-09 bởi ADR-011.** ADR-005..010 thiết kế quanh việc gộp logic vào
69+
> `recomputeWindowMinSize`. PR đã pivot sang `collapseBehavior` (commit `58cd1102`) và xóa
70+
> hết code recompute, nên ADR-006/008/010 moot, ADR-007 bị đảo. Giữ để tham chiếu lịch sử.
71+
6872
## ADR-005: Drop noise `.gitignore` / `CLAUDE.md`
6973
**Context**: upstream/main đã có entries; PR add lại = conflict giả.
7074
**Decision**: reset 2 file về upstream khi rebase.
@@ -109,3 +113,28 @@ không bị overwrite bởi giá trị widen). Body `recomputeWindowMinSize()` s
109113
**Verify khi fix**: confirm `originalContentMinSize` của PR capture đúng base gốc; test cycle
110114
show → hide phải relax về 720pt (fail nếu base đọc từ minSize mutate).
111115
**Trade-off**: không — đây là điều kiện đúng đắn của tính năng, không phải optional.
116+
117+
---
118+
119+
## ADR-011: Dùng `NSSplitViewItem.collapseBehavior` native, bỏ toàn bộ recompute thủ công (supersede ADR-001/002/006/007/008/010)
120+
**Date**: 2026-06-09
121+
**Context**: ADR-001..010 thiết kế quanh việc tính `window.minSize` thủ công
122+
(`recomputeWindowMinSize` + `PaneMinimum`/`resolvedContentMinSize`/`originalContentMinSize` +
123+
4 call site + override `splitViewDidResizeSubviews`). Cách này phức tạp, có bug "floor chỉ
124+
tăng" (ADR-010), và cần geometry test riêng. Commit `58cd1102` của PR chọn hướng khác:
125+
AppKit đã có sẵn `NSSplitViewItem.collapseBehavior` để xử lý đúng tình huống này.
126+
**Decision**: set `inspectorSplitItem.collapseBehavior = .preferResizingSplitViewWithFixedSiblings`.
127+
Khi inspector mở rộng, AppKit nới chính cửa sổ (resize split view với fixed siblings) thay vì ép
128+
detail pane co. **Xóa hẳn** `recomputeWindowMinSize()`, override `splitViewDidResizeSubviews`,
129+
`PaneMinimum`, `resolvedContentMinSize`, `originalContentMinSize`. Floor 720×480 vẫn do
130+
`TabWindowController:75` set tĩnh. Helper `setCollapsed(_:for:)` chỉ còn nhiệm vụ animate collapse
131+
khi `window.isVisible` (dùng chung cho sidebar + inspector).
132+
**Lý do**: native hơn (đúng nguyên tắc "Native only" của CLAUDE.md); ít code hơn; không còn bug
133+
floor-chỉ-tăng vì không còn đọc `window.minSize` mutate; bỏ được geometry test dễ vỡ.
134+
**Hệ quả với các ADR cũ**:
135+
- ADR-001 (dynamic minSize), ADR-002 (4 call site), ADR-006 (gộp method), ADR-008 (commit atomic gộp), ADR-010 (baseline immutable): **moot** — không còn recompute.
136+
- ADR-007 (giữ geometry test): **đảo** — test bị xóa cùng code; không có unit test mới (resize/animation không deterministic dưới test harness).
137+
- ADR-009 (`setCollapsed` pre-hook): **đổi vai**`setCollapsed` vẫn còn nhưng chỉ animate-when-visible, không còn pre-widen/pre-shrink.
138+
- ADR-003 (dùng `minSize` không `contentMinSize`): vẫn đúng — floor tĩnh dùng `window.minSize`.
139+
**Trade-off**: dựa vào hành vi AppKit thay vì geometry tự tính → khó unit-test; bù lại đơn giản và
140+
đúng native. Cần manual UI verify + CI build (chưa verify cục bộ: máy không có Xcode).

.docs/inspector/flow.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Inspector pane overflow — flow
22

3+
> **Reconcile 2026-06-09.** Các diagram bên dưới mô tả luồng `recomputeWindowMinSize` (cách CŨ) và
4+
> "merged sizing flow" (kế hoạch GỘP). PR đã pivot sang `collapseBehavior` (commit `58cd1102`), bỏ
5+
> hết recompute → các diagram đó **superseded**. Luồng thực tế hiện tại:
6+
>
7+
> ```mermaid
8+
> flowchart TD
9+
> A[Setup: inspectorSplitItem.collapseBehavior<br/>= .preferResizingSplitViewWithFixedSiblings] --> B[User toggle inspector]
10+
> B --> C[showInspector / hideInspector]
11+
> C --> D[setCollapsed _:for_:<br/>animate isCollapsed CHỈ khi window.isVisible]
12+
> D --> E[AppKit tự nới/thu window<br/>để fit, không ép detail pane]
13+
> E --> F[Floor 720×480 tĩnh từ TabWindowController:75]
14+
> ```
15+
316
## Luồng toggle inspector
417
518
```mermaid

0 commit comments

Comments
 (0)