# Review Report — Job 4fd933af - **Reviewer**: cline (herdr session `reviewer-cline-01`, role: reviewer) - **Job ID**: 4fd933af - **Reviewed branch**: `main` (1 commit ahead of `origin/main`) - **Scope**: Cross code review (lint / operability / drift) of (a) the committed layout-engine enhancement `f3ac68f` and (b) the untracked roadmap document `.agents/reports/new_agent_types_roadmap.md`. Task goals: validate layout correctness, assess new-agent-extension roadmap feasibility, issue verdict. ## 1. Change Inventory | Item | File(s) | Status | |------|---------|--------| | Layout relax | `lib_py/layout.py`, `lib.sh:432`, `.mam.env.example`, `tests/test_layout.py`, `tests/test_tier1_unit.py` | **Committed** (`f3ac68f`) | | New-agent roadmap | `.agents/reports/new_agent_types_roadmap.md` (new, 229 lines) | **Untracked** | Commit `f3ac68f` — "feat(layout): relax MAM_MIN_PANE_COLS to 15 and remove vertical height constraints for scrollable terminal split": - `compute_2xk_layout` defaults: `min_cols` 40→**15**, `min_rows` 20→**0**. - CLI `--min-cols`/`--min-rows` argparse defaults: 15 / 0. - `lib.sh:432` fallbacks: `${MAM_MIN_PANE_COLS:-15}` / `${MAM_MIN_PANE_ROWS:-0}`. - Both height-overflow guards now short-circuit on `min_rows > 0 and ...` (single-pane and singleton-column paths), so default `min_rows=0` disables vertical constraints while a positive env value re-engages them. - `.mam.env.example` updated (default 15 / 0, terminology aligned to tmux horizontal=side-by-side / vertical=top-bottom). - Tests rewritten to assert `min_cols=15` boundary (30 split vs 29 overflow) and `min_rows=0` behavior. ## 2. Lint / Syntax / Drift - `python -m py_compile lib_py/layout.py` → **OK** - `bash -n .agents/skills/lib.sh` → **OK** - Stale-default sweep (`:-40`, `:-20`, `min_cols: int = 40`, `min_rows: int = 20`, `default=40`, `default=20`) across `.agents`/`tests` → **clean (no orphans)**. All authoritative default sites are consistently 15 / 0. - Working-tree drift: only the roadmap file is untracked; no stray/dirty submodule or out-of-scope edits this round (cleaner than the prior review). ## 3. Layout Implementation — Operability Verification ### Goal: dense tiling in compact viewports without premature overflow - **Column boundary** (`width // 2 < min_cols`, strict `<`): at width 30 → `30//2 = 15`, `15 < 15` False → splits right; at width 29 → `29//2 = 14 < 15` → `column_width_overflow`. CLI-confirmed: 30-col → `right p1`, 29-col → `overflow p1`. ✓ - **`min_rows=0` disables height checks**: a single 80×3 pane → `down p1` (splits down; scrollback rationale holds). With an explicit positive `MAM_MIN_PANE_ROWS`, the `min_rows > 0 and ...` guards re-engage the `single_pane_height_constrained` / `singleton_height_overflow` paths — so the disable is opt-out, not a hard removal. Well-designed. ✓ - **Tiling progression** (1→2 down, 2→3 right, 3→4 fill-singleton down, 4→5 overflow) unchanged in structure; only thresholds moved. The 54×23 / 90–100 col scenarios described in the roadmap now fit 4 panes per workspace where the old 60/20 defaults could not even open a 2nd column. ✓ ### Tests - `tests/test_layout.py` + `tests/test_tier1_unit.py` → **85 passed in 9.11s**. - `tests/test_a4_adapter_contract.py` → **13 passed in 0.47s**. ## 4. New-Agent-Types Roadmap — Feasibility Assessment The roadmap (`new_agent_types_roadmap.md`) is a planning/architecture document, not executable code. Its value rests on the accuracy of its codebase references and the soundness of its blueprint. Both verified: | Roadmap claim | Verification | Result | |---------------|--------------|--------| | Adapter framework `lib_py.agents` with `BaseAgentAdapter` | `lib_py/agents/{base.py,registry.py,sanitize.py,input_region.py,adapters/}` exist | ✓ | | `BaseAgentAdapter` interface (name, own_key, ready_tokens, exit_key, delegate_agent_key, identity_cache_fields, input_prompt, input_rule_pattern, artifact_path, verify_artifact, purge_artifacts, spawn_spec, resume_spec, auth_ok, discover) | All symbols present in `base.py` at the cited lines | ✓ exact | | `DiscoveryContext` used in template code | `class DiscoveryContext` at `base.py:15` | ✓ | | Step 2: add `'newagent': NewAgentAdapter()` to `_ADAPTERS` | `registry.py` `_ADAPTERS` dict registers claude/agy/hermes/cline exactly this way | ✓ proven pattern | | Step 3.1: herdr kind mapping `lib.sh:358-375` | kind dispatch at `lib.sh:357-371` (creator/planner/reviewer → kind) | ✓ (line off by ~4) | | Step 3.3: "automatic via `agent_of_row()`" | `agent_of_row()` + `matches_session_name()` in `registry.py` | ✓ | | Step 5.1: contract tests `test_agent_adapter_registry` / `test_adapter_required_properties` / `test_facts_bridge_eval_contract` | All three present in `test_a4_adapter_contract.py` (lines 28/58/79) | ✓ | | Step 5.2: `tests/test_tier2_component.py` | File exists | ✓ | **Feasibility verdict**: The 5-step blueprint (adapter class → registry → `lib.sh` dispatch → herdr `--kind` → contract/lifecycle tests) is the correct layering and is proven by the four existing adapters. The complexity matrix (Tier 1 adapter ≈ 0.5 day; Tier 2 herdr-kind/lifecycle; Tier 3 TUI readiness) is reasonable. The document is actionable as-is. ## 5. Findings (advisory, non-blocking) ### F-1 (hygiene): Roadmap file is untracked `git status` lists `.agents/reports/new_agent_types_roadmap.md` as untracked. Since it is a deliverable referenced by this job's output contract, it should be `git add`-ed and committed (e.g. `docs(roadmap): new agent types extension blueprint`) so the planning artifact persists. Content is fine; only tracking state needs action. ### F-2 (verification gap): Full-suite green not independently confirmed The roadmap §1.1 asserts "all 371 tests across 18 suites pass." This review confirmed 98 unit tests across all touched files plus the adapter-contract suite, but did not re-run the full integration suite within the time budget. **Direction**: confirm the full `pytest tests/` is green in CI before merge; no code change implied. ### F-3 (doc wording nit): `min_rows=0` is "disabled-by-default", not "removed" Roadmap §1.1 says vertical constraints were "removed." Precisely, the guards are `min_rows > 0 and ...`, so a positive `MAM_MIN_PANE_ROWS` env value re-engages height checks. The doc slightly understates this opt-in re-enablement. **Direction**: one-line wording fix ("disabled by default; re-enabled by setting MAM_MIN_PANE_ROWS>0") for operator accuracy. Non-blocking. ## 6. Summary The committed layout change correctly and consistently relaxes `min_cols` to 15 and defaults `min_rows` to 0 (disabled-by-default, re-engaged via env) with matching, passing tests (98 verified green) and clean syntax. The new-agent roadmap is a feasible, accurately-referenced blueprint grounded in the real adapter framework (every cited file, symbol, and test verified to exist). The three findings are commit-hygiene / verification-gap / wording nits that do not affect correctness, operability, or feasibility, and require no redesign. [VERDICT: PASS]