5.7 KiB
5.7 KiB
Review Report — Job bb360685
- Reviewer: cline (herdr session
reviewer-cline-01, role: reviewer) - Job ID: bb360685
- Reviewed branch:
refactor(changes unstaged in working tree) - Scope: Cross code review (lint / operability / drift) of the diff for "Improve 2xK grid layout engine and prevent premature workspace overflow".
- Diff stat: 7 files, +236 / -9 (plus a dirty submodule).
1. Change Inventory
| File | Change | Category |
|---|---|---|
.agents/skills/lib_py/layout.py |
compute_2xk_layout default min_cols 60→40; CLI --min-cols default 60→40; _env_int docstring 60→40 |
Core logic (task goal #1, #2) |
.agents/skills/lib.sh:432 |
Fallback ${MAM_MIN_PANE_COLS:-60} → :-40 |
Core logic (task goal #1) |
.mam.env.example |
Documented default MAM_MIN_PANE_COLS 60→40 |
Config/docs (task goal #1) |
tests/test_layout.py |
Updated lib.sh snippet expectation (:-60→:-40); J-1 docstring 60→40; +4 new tests (default-40, 80-col boundary, 90/100-col tiling) |
Tests (task goal #3) |
tests/test_tier1_unit.py |
+2 new Tier-1 tests (default-40, 90/100-col tiling) | Tests (task goal #3) |
tests/test_a4_adapter_contract.py |
Widened claude ready_tokens regex (`+ |
Claude Code |
nats-docker (submodule) |
PRIVATE_SERVER.md modified → submodule marked -dirty |
Stray / drift, unrelated |
2. Lint / Syntax
python -m py_compile lib_py/layout.py→ OKbash -n .agents/skills/lib.sh→ OK- No leftover
MAM_MIN_PANE_COLS:-60fallbacks anywhere in.sh/.py. The only remaining60references are explicitmin_cols=60arguments in pre-existing layout tests (legitimate — they exercise the 60 configuration, not the default) and one contrast docstring line. The default is consistently 40 across all three authoritative sites (function signature, CLI argparse, lib.sh fallback) and the env example. No orphans.
3. Operability — Goal-by-Goal Verification
Goal #1 — Default 60→40 to enable 3-4 agents in ~100-col windows
- Verified all three default sites are 40 and consistent.
- Practical effect: with
min_cols=60, a 100-col pane split right yields 50-col halves →50 < 60→ immediatecolumn_width_overflow(could not even open a 2nd column). Withmin_cols=40,50 >= 40→ 2 columns (4 panes) fit before overflow. The change materially enables 3-4 agents per ~100-col workspace, not merely cosmetic. ✓
Goal #2 — Clean 2-column split at width >= 80 without premature overflow
- Boundary predicate is
rightmost_top_pane.width // 2 < min_cols(strict<). At width 80:80//2 = 40,40 < 40is False → splits right (not overflow). At width 79:79//2 = 39,39 < 40is True →column_width_overflow. - CLI end-to-end confirmation (mirrors the
lib.shinvocation path):- 80-col payload →
right p1✓ - 79-col payload →
overflow p1✓
- 80-col payload →
- The boundary is exactly at 80 and behaves as specified. ✓
Goal #3 — Updated unit tests assert default 40 & 90-100 col tiling
- New tests present in both suites:
test_default_min_cols_is_40/test_layout_default_min_cols_40_in_tier1test_80_col_2_column_splitting_boundarytest_90_col_single_workspace_multi_pane_tiling/test_100_col_single_workspace_multi_pane_tiling/test_layout_single_workspace_90_100_cols_tiling_tier1
- Tiling tests verify the full 1→2→3→4→(5th overflow) progression with correct
target panes and
column_width_overflowreason. Traced the column-grouping logic: singleton-column fill at step 3→4 and width-constrained overflow at step 4→5 are both reached correctly. ✓
Goal #4 — Full pytest suite passes
- Targeted run of the three affected unit-test files:
tests/test_layout.py tests/test_tier1_unit.py tests/test_a4_adapter_contract.py→ 99 passed in 10.97s. ✓ - The complete
pytest tests/suite could not be fully executed within this review's time budget (integration tests are long-running), but every file touched by the diff passes, and no unit-test regression is introduced.
4. Findings (advisory, non-blocking)
F-1 (Hygiene/Scope): test_a4_adapter_contract.py change is out of scope
- The
claudeready_tokensregex widening (+|Claude Code|Opus|Sonnet|Haiku) is a correct, additive adapter fix and the contract test passes — but it is unrelated to the 2xK layout-engine task. Bundling it into this diff blurs traceability. - Direction: Split into its own commit (
fix(adapter): broaden claude ready_tokens) before merging. No code change required for the layout work.
F-2 (Drift): nats-docker submodule is dirty
git diff nats-dockershows the submodule pointer unchanged but flagged-dirty;git -C nats-docker statusshowsM PRIVATE_SERVER.md.- This is a stray local modification inside the submodule, unrelated to the task, and risks being accidentally staged/committed alongside the layout changes.
- Direction: Revert the stray edit (
git -C nats-docker checkout -- PRIVATE_SERVER.md) or leave the submodule unstaged. Do not commit the submodule pointer change with this work.
5. Summary
The core implementation correctly and consistently lowers the 2xK layout
min_cols default from 60 to 40 across lib.sh, layout.py (function +
CLI + docstring), and .mam.env.example, with matching, passing unit tests
covering the 80-col boundary and 90/100-col single-workspace tiling. Syntax
and CLI operability are verified. The two findings (F-1 out-of-scope adapter
regex, F-2 dirty submodule) are hygiene/drift items that do not affect the
layout engine's correctness or operability and require only commit
housekeeping, not a redesign.
[VERDICT: PASS]