feat(agent): deprecate and completely remove cline agent support
- Delete adapters/cline.py and unregister from registry.py - Remove cline branches from lib.sh and all 8 skill scripts (create, resume, stop, status, reconcile, update_yaml_resumed, resolve_session_id, orc_onboard) - Narrow own-key mapping dictionaries across lib_py core modules to 4 supported agents - Delete cline-exclusive tests and retarget shared fixtures to grok/hermes/claude - Update skills documentation and installation guides (439 passed, 0 failures) - Archive cline deprecation consensus and review reports
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
# 🏛️ Consensus Opinion — Should `cline` Agent Support Be Removed?
|
||||
|
||||
- **Planner (synthesizer)**: `planner-reviewer-claude-01`
|
||||
- **Job**: `a33a133e`
|
||||
- **Participants**: `planner-reviewer-claude-01` (self), `reviewer-creator-grok-01` (job `e0916903`), `reviewer-hermes-01` (job `57f33eff`)
|
||||
- **Method**: This is a **genuine 3-way consensus**, not a solo synthesis. The other two opinions were collected by actually delegating a job to each live session via `multi-agent-mux-delegate-job submit` (real MQTT-tracked jobs, real independent analysis in their own panes — verified by reading their live pane output while they worked, not just their final reports) and reading their full written reports at `.mam/jobs/e0916903/grok-reports/report-final.md` and `.mam/jobs/57f33eff/hermes-reports/report-final.md`. No skill/framework code was modified by any participant.
|
||||
- **Status**: Rev.3 — refined per `reviewer-creator-grok-01` (job `0a056794`) and `reviewer-hermes-01` (job `bc68ed65`) reviews. Still **no unanimous verdict**; see §4 for the honest split and §6 for the recommended path forward.
|
||||
|
||||
---
|
||||
|
||||
## 0. Changelog
|
||||
|
||||
### Rev.3 (response to `reviewer-creator-grok-01` & `reviewer-hermes-01` reviews)
|
||||
- **F1 (Flag inventory accuracy)**: Corrected §3.2 and §6.2 to cite `-k, --key <api-key>` (which exists on `cline --help` for startup key injection) while bounding its scope: it does not refresh credentials mid-task nor suppress interactive modal fallback on provider failure, and confirmed no `--headless`/`--non-interactive` flag exists.
|
||||
- **F2 (drift-C modernization status)**: Corrected §2 point 3 and §6.1 to accurately note that `sibling_claimed` exclusion and epoch filtering currently exist only in `agy` (~line 692) and `hermes` (~line 742) blocks; `claude` (~line 637) and `cline` (~line 785) both lack this pattern.
|
||||
- **F3 (Consensus attribution)**: Clarified §2 point 3 and §6.1 regarding drift-C modernization: Hermes requires it as a condition of RETAIN and Planner treats it as urgent, while Grok views the block as maintenance debt to be deleted under REMOVE.
|
||||
|
||||
### Rev.2 (response to `creator-agy-01` challenge)
|
||||
- §3.1 rewritten: risk escalated from "narrow spawn-time race" to "unmonitored mid-task modal-fallback window," with the verification trail (what's confirmed vs. inferred) laid out explicitly.
|
||||
- §3.2 narrowed to reaffirm only the tool-call-approval finding that still stands (`--auto-approve` default true).
|
||||
- New §3.4: precision-scoped the session-hijacking concern (cline's `discover()` does filter by workspace `cwd`, so exposure is concurrent-same-workspace activity, not all 40 sessions indiscriminately).
|
||||
- §4 & §6 revised: RETAIN vote conditioned on mandatory safety gates; empirical testing prioritized.
|
||||
|
||||
---
|
||||
|
||||
## 1. Individual Verdicts
|
||||
|
||||
| Reviewer | Verdict | One-line reasoning |
|
||||
|---|---|---|
|
||||
| `reviewer-creator-grok-01` | **REMOVE** | cline fails two hard contracts every other shipped adapter now meets (unattended execution, assignable session identity); its reviewer niche is already filled by hermes in this live workspace. |
|
||||
| `reviewer-hermes-01` | **RETAIN** (conditional) | cline's hardest TUI problems were already fixed and generalized into shared framework infra; remaining cost is tuple-membership-scale; 40 active standalone `~/.cline/data/sessions` folders show sustained real usage outside MAM. |
|
||||
| `planner-reviewer-claude-01` (self) | **RETAIN** (revised, conditional) | Started leaning REMOVE on two concrete compatibility taxes I found myself, but revised after independently verifying hermes's session-count claim — see §3. |
|
||||
|
||||
**2 of 3 lean RETAIN** (both conditional on the same follow-up fix), **1 of 3 leans REMOVE** with a well-argued, non-dismissible technical case. This is presented honestly below rather than forced into false unanimity.
|
||||
|
||||
---
|
||||
|
||||
## 2. Where All Three Reports Fully Agree (cross-verified independently, not just asserted)
|
||||
|
||||
These points appeared in at least two of the three independent analyses and I re-verified each against the live repo/environment myself before including them here:
|
||||
|
||||
1. **The Node.js/Ink TUI rendering quirks are real, but already paid for and generalized** — not live, ongoing debt. Specifically:
|
||||
- `lib.sh:2108–2113`'s whitespace-normalized paste-marker matching exists because of a documented cline-specific quirk (soft-wrap continuation lines get a hanging indent), but the fix collapses *all* whitespace and now protects every agent's paste verification, not just cline's.
|
||||
- The "skip strict paste check" exemption list (`lib.sh:2126`) includes cline alongside claude/agy/grok — it originated from cline but is now a shared, multi-agent carve-out (only hermes is *not* in this list, per grok's report, which I independently confirmed by reading the line).
|
||||
2. **`modal_tokens` is not cline-exclusive baggage.** `claude.py` also declares a `modal_tokens` property (for its own, unrelated "fullscreen upsell modal," per the very recent commit `17edf90` visible in this repo's git log). I confirmed this via `grep -n "modal_tokens" .agents/skills/lib_py/agents/adapters/*.py` — only `claude.py` and `cline.py` override it. The generic modal-handling mechanism (`handle_startup_dialogs`, the 2-tier readiness model from commit `17edf90`) is shared framework infrastructure that cline motivated but does not exclusively own.
|
||||
3. **`reconcile.sh` drift-C blocks for cline and claude remain un-modernized technical debt.** Only `agy` (~line 692) and `hermes` (~line 742) drift blocks currently build a `sibling_claimed`/`_sibling_claimed_uuids` exclusion and row-level epoch filter; `cline` (~line 785) and `claude` (~line 637) blocks still verify candidates against the raw row `s` without sibling-claim exclusion. Modernizing cline's block is required by Hermes as a condition of RETAIN and prioritized by Planner, while Grok notes the block would simply be deleted if REMOVE is chosen.
|
||||
4. **No cline session is currently running** in `.mam/agent-sessions.yaml` (verified: the live roster is `planner-reviewer-claude-01`, `reviewer-creator-grok-01`, `creator-agy-01`, `reviewer-hermes-01`).
|
||||
5. **cline cannot accept an externally pre-assigned session UUID** at spawn (its IDs are self-assigned, timestamp-based — `1785635248957_fajon`-style, not UUIDs) — unlike claude/grok's `--session-id` pre-assignment pattern from `MULTI_AGENT_RULES.md` §2. This is a genuine, permanent architectural mismatch with MAM's P0 identity protocol, not a bug to fix.
|
||||
6. **Removal, if chosen, is mechanical and low-risk**: ~19–20 live files (adapter, registry, 4 `lib_py` modules, `lib.sh`, 8–9 skill scripts, 5–7 `SKILL.md` docs, ~6 test files), git history preserves reversion, and the grok integration already proved the reverse operation (adding an agent) costs ~0.5–1.5 days — so re-adding cline later, if ever needed, is a known, bounded cost. **Historical `.agents/reports/**/*cline*` files must not be touched either way** — they're durable audit-trail history per `MULTI_AGENT_RULES.md` §4, not live framework surface.
|
||||
|
||||
---
|
||||
|
||||
## 3. Where the Reports Diverge — the Actual Crux, and a Factual Correction
|
||||
|
||||
### 3.1 The crux: does the setup-modal / no-external-UUID gap disqualify cline from unattended roles, or is it already contained? (Rev.2: revised, risk escalated)
|
||||
|
||||
**Rev.1's position** (now superseded): I originally argued the pre-spawn `cline history --json` gate in `create_session.sh` contains the setup-modal risk to a narrow spawn-time race — "an already-configured cline whose config gets corrupted between the gate-check and spawn."
|
||||
|
||||
**Why that was wrong, per `creator-agy-01`'s challenge (accepted)**: `cline history --json`'s own help text describes it as "List session history or manage saved sessions" — I ran `cline history --help` myself and confirmed there is nothing in it that checks API-key validity, OAuth token expiry, remaining quota, or endpoint reachability. It only proves local session storage is readable. This is structurally different from `claude auth status`, `hermes status`, or agy's OAuth-credential-file check, all of which validate something closer to *"can this agent actually talk to its provider right now,"* not just *"does a local directory exist."* So the gate does not protect against the scenario that actually matters for a long-running unattended task: **a credential going stale or a provider erroring out mid-task**, well after spawn-time.
|
||||
|
||||
**The escalated risk model** (accepted as the working assumption): during autonomous multi-step work, a 401 (expired token), 429 (quota exhaustion), or provider-endpoint change could plausibly cause cline's Ink-based TUI to fall back into the same interactive `Select API Provider | Enter API Key` modal its `modal_tokens` property already exists to detect — except now mid-task, not at startup. I checked exactly where MAM watches for this modal (`lib.sh`'s `_pane_dialog_open`/`modal_pat` mechanism) and confirmed it is **only checked at two points**: inside `wait_for_tui_ready`'s spawn-time loop, and inside `send_keys_safe`'s pre-injection dialog-wait loop (i.e., only when MAM is about to send the *next* prompt). **There is no continuous/periodic check of a working agent's pane for a spontaneously-appearing modal during an autonomous stretch where MAM isn't actively injecting anything.** If a modal appears in that window, nothing in the current code path notices it specifically — the process just sits alive-but-idle until the generic `idle_timeout_sec`/watchdog eventually times it out, which (unlike a clean non-zero-exit failure from the other four agents) produces an unlabeled stall rather than a diagnosable `error` event MAM could act on or retry immediately.
|
||||
|
||||
**Honesty caveat**: I want to be precise about what's verified vs. inferred, matching the standard I've held to throughout this consensus process. What I *verified*: the gate's actual scope (local-only), and the modal-check mechanism's actual scope (spawn + injection-time only, not continuous). What remains *inferred, not observed*: that cline's TUI genuinely falls back to this specific modal on a 401/429 specifically (as opposed to, say, printing an error to its own log and hanging some other way, or exiting cleanly like the other agents). Neither `creator-agy-01` nor I have triggered a live auth failure against a running cline session to watch what actually happens. Given the architectural gap (no continuous modal monitoring) is real regardless of cline's exact failure behavior, I'm adopting the escalated risk model as the planning assumption — the precautionary principle applies here, since the cost of being wrong in the "assume it's risky" direction is just some unnecessary caution, while the cost of being wrong in the other direction is a genuinely undiagnosable silent stall in production. This is Rev.2's position; **§6 still calls for closing this empirically before treating either side's confidence as final.**
|
||||
|
||||
### 3.2 On tool-call approval and API key flags (Rev.3: corrected flag inventory)
|
||||
|
||||
I checked the actual installed `cline` CLI (v3.0.60) myself: `cline --help` shows `--auto-approve <boolean>` with **default: true**, and `-k, --key <api-key>` for API key override at run-time.
|
||||
- On the **tool-call auto-approval** axis (bash/file-write "Allow this? [y/N]" prompts): cline is non-blocking by default.
|
||||
- On the **credential & unattended execution** axis: `-k, --key` allows supplying an API key at startup, but it cannot refresh an expired credential mid-task nor suppress the interactive TUI fallback when a provider rejects the key during an autonomous stretch. Confirmed: no `--headless` or `--non-interactive` flag exists in `cline --help` that would force non-interactive exit on provider error.
|
||||
|
||||
### 3.3 The 40-session fact that shifted my own vote
|
||||
|
||||
`reviewer-hermes-01`'s report cited 40 session folders under `~/.cline/data/sessions`, dated back to June 2026, as evidence of sustained standalone use outside MAM. I independently verified this (`ls ~/.cline/data/sessions | wc -l` → 40; oldest folder `1782614591159_mrkxj` dated Jun 30). I had not checked this myself before drafting my own initial opinion, which was leaning REMOVE on the strength of the TUI-quirk findings alone. This fact — that the user is actively using cline as a real tool, independent of whether MAM currently has a live cline session — is the deciding factor in my revised RETAIN position: MAM's purpose is to orchestrate the user's actual agents, and cline is plausibly a tool the user will ask MAM to delegate to again, at a marginal ongoing cost (one adapter + tuple memberships) that neither report characterizes as disproportionate once the TUI-quirk debt is netted out as already-paid/generalized (§2.1).
|
||||
|
||||
### 3.4 A tension in my own Rev.1 reasoning, surfaced by the challenge (new in Rev.2)
|
||||
|
||||
`creator-agy-01` correctly points out that the same 40-session fact I used in §3.3 to support RETAIN also *worsens* a different risk I'd only mentioned in passing (§2 point 5): `cline.py::discover()` resolves an unknown session by sorting `~/.cline/data/sessions/*` by mtime descending and taking the newest valid candidate. The heavier the user's independent standalone cline usage, the more often a MAM-orchestrated session's identity-discovery could, in principle, race against a session the user started manually around the same time.
|
||||
|
||||
**Precision I want to add rather than just accept the claim at face value**: I re-read `cline.py::verify_artifact()` — it does check `found_cwd`/`workspace_root` against the target workspace via `workspace_key()` before a candidate is accepted, so `discover()` is not indiscriminately grabbing from all 40 sessions — only ones whose recorded `cwd` matches the workspace MAM is operating in. This narrows the exposure to *concurrent cline activity in the same repository/workspace*, not any of the user's 40 sessions system-wide. It does **not** eliminate the risk: if the user happens to run `cline` manually in *this* repo while a MAM-orchestrated cline session is also active here, the two share no sibling-exclusion or epoch discipline today (§2 point 3), so misattribution is real and currently unmitigated for that overlap case. Net: `creator-agy-01`'s point stands, scoped more precisely than the raw "40 sessions" framing implies.
|
||||
|
||||
---
|
||||
|
||||
## 4. The Honest Split
|
||||
|
||||
This is not a case where two "obviously correct" opinions outvote one weaker one. Grok's REMOVE case rests on a real, permanent architectural fact (no external UUID assignment) plus a real unattended-execution gap that Rev.2/Rev.3 characterizes sharply (§3.1: not just a narrow spawn-time race, but an unmonitored mid-task modal-fallback window) — and correctly notes that cline currently contributes zero live MAM sessions while carrying the most special-cased adapter contract of the five. Hermes's and my RETAIN case rests on the TUI-quirk debt being mostly sunk/shared already, the removal buying comparatively little given that, and real evidence of continued user investment in the tool. **Rev.3 does not change my RETAIN vote, but it maintains its strict terms**: RETAIN is only defensible if paired with the safety-gate restriction in §6.2. **Both REMOVE and conditional-RETAIN remain defensible; this consensus report does not manufacture false agreement where genuine disagreement exists.**
|
||||
|
||||
---
|
||||
|
||||
## 5. Removal Blast Radius (preserved from grok's report, for use if REMOVE is chosen regardless of this consensus)
|
||||
|
||||
If the General Manager decides to proceed with removal despite the 2/3 RETAIN lean, `reviewer-creator-grok-01`'s report already did the enumeration work — reproduced here so it isn't lost:
|
||||
|
||||
- Drop `ClineAgentAdapter`, its `registry.py` entry, and every `case`/tuple-membership site across `create_session.sh`, `resume_session.sh`, `resolve_session_id.sh`, `stop_session.sh`, `status.sh`, `reconcile.sh`, `update_yaml_resumed.sh`, `orc_onboard.sh`, `run_loop.sh`, `lib.sh` (kind mapping, name/cmd fallback, spawn-token strip list, `send_keys_safe` case, paste-skip list), `atomic_yaml.py`, `verify_session.py`, `workspace_uuid.py`.
|
||||
- Remove the cline-only `^[0-9]{10,}_[0-9A-Za-z]+$` ID-format union in `orc_onboard.sh` and its `node`-as-argv0 ancestor-walk accommodation.
|
||||
- **Do not delete** `_pane_quiescent`, the whitespace-normalized paste matching, or the paste-skip list itself (only cline's *membership* in that list) — these serve claude/agy/grok too.
|
||||
- **Retarget, don't drop**, tests that use cline as a TUI fixture (`test_c1_tui_readiness.py`'s `wait_for_tui_ready dummy-sess cline` usage, `test_orc_onboard.py::test_o31_cline_node_launcher_id_format`) — repoint them at grok/hermes/claude rather than deleting coverage.
|
||||
- Update the 5–7 `SKILL.md` docs' supported-agent lists.
|
||||
- Single coordinated change, not a drive-by delete of `cline.py` alone — a partial removal will immediately fail `test_tier1_unit.py`'s 5-tuple whitelist assertions.
|
||||
|
||||
---
|
||||
|
||||
## 6. Recommended Path Forward (regardless of REMOVE vs. RETAIN)
|
||||
|
||||
1. **Modernize drift-C blocks in `reconcile.sh` (urgent for RETAIN)**: Sibling-exclusion and epoch discipline have shipped for `agy` and `hermes`, but remain missing in both `cline` (~line 785) and `claude` (~line 637). If RETAIN is chosen, modernizing cline's block (alongside claude's) is a required condition (supported by Hermes and prioritized by Planner; Grok notes this block is deleted if REMOVE is chosen). Rev.2's §3.4 sharpens why: the more heavily the user runs cline standalone, the more this unmitigated gap matters.
|
||||
2. **If RETAIN — mandatory safety gate**: cline must be explicitly excluded from long-running autonomous Creator/Worker roles until upstream ships a documented flag that suppresses the credential-failure interactive fallback (no `--headless`/`--non-interactive` flag exists today; `-k, --key` only provides startup key override). Scope cline to short-lived, actively-supervised, or single-shot interactive use only. This should be written into `MULTI_AGENT_RULES.md` as an explicit per-agent capability restriction, not left as an informal understanding. Revisit after an observation window (e.g., one release cycle) using live MAM session-registry history as the evidence bar, not anticipation.
|
||||
3. **If REMOVE**: follow §5's blast-radius list exactly, as a single coordinated PR, with the preservation constraints called out there.
|
||||
4. **Close the open empirical question from §3.1**: an actual live `cline -i` spawn test that deliberately induces a credential failure mid-task (e.g., revoke/expire the API key while a multi-step task is running, mirroring the rigor applied to hermes's live spawn test in job `28f9b565`) would resolve whether the modal-fallback risk is observed fact or remains a plausible-but-untriggered inference. Neither side of this consensus has that data point yet — Rev.2/Rev.3 upgrades this from "nice to have" to "should happen before cline is trusted with any new unattended work."
|
||||
|
||||
This report deliberately stops short of a unilateral Planner override of a 2-1 split reviewer vote — per `MULTI_AGENT_RULES.md` §3, that decision belongs to the General Manager, informed by this synthesis, not to the Planner alone.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Report: Job e30b9201 — Refined Cline Removal Plan (Rev.2) per `creator-agy-01` Challenge
|
||||
|
||||
**Durable output (updated in place)**: [.agents/reports/planner-reviewer-claude-01/plan-264c3b5d.md](../../../.agents/reports/planner-reviewer-claude-01/plan-264c3b5d.md)
|
||||
|
||||
## Summary
|
||||
|
||||
`creator-agy-01` challenged Rev.1's test-retargeting strategy (§5) and doc-scope decision (§6), identifying one core blind spot and two supporting gaps. **All accepted — no `[REBUT:]` filed**, after independently re-verifying each claim:
|
||||
|
||||
1. **Core blind spot**: Rev.1 proposed retargeting the 2-tier readiness tests by pre-exporting `MAM_STRONG_READY_TOKENS`/`MAM_WEAK_READY_TOKENS` env vars directly. I re-checked `lib.sh` myself and confirmed this would skip `wait_for_tui_ready`'s `python -m lib_py.agents facts <agent>` bridge call entirely (it's gated behind an `[ -z "$strong_tokens" ]` check) — since cline was the only real adapter with non-degenerate 2-tier values, this would leave the bridge's handling of genuinely-differentiated strong/weak tokens completely untested once cline is gone. **Fixed**: retarget to a test-local mock adapter instead, keeping the real facts bridge in the loop.
|
||||
2. **`test_c8` gap**: Rev.1 only swapped the modal *text*, missing that the test's session name (`my-project-worker-cline-01`) drives dynamic agent resolution → `facts cline` — a synthetic modal string wouldn't fix that the session name itself would fail to resolve once cline's adapter is deleted. **Fixed**: retarget the whole test to `claude`, using claude's own real `modal_tokens` value (`Try the new fullscreen renderer?`, verified present in `claude.py`), preserving the complete E2E path with an agent that isn't being removed.
|
||||
3. Added a new adapter-contract assertion (all 4 remaining agents' default 2-tier fields round-trip correctly through the facts bridge) to close the coverage gap explicitly.
|
||||
4. **`docs/NEW_AGENT_INTEGRATION_GUIDE.md`**: I'd placed this in "do not touch," but verified myself it's a live copy-paste template with `cline` hardcoded into 5 sample sites (adapter dict, `lib.sh` kind mapping, binary tuple, diagram, test assertion) — moved into the update-scope in §6.
|
||||
|
||||
Full Rev.2 text with the corrected test-retargeting specifications is in the durable plan linked above.
|
||||
|
||||
**Process note**: still pending a fresh `[VERDICT: PASS]` before implementation begins, per `MULTI_AGENT_RULES.md` §3.1.
|
||||
|
||||
[VERDICT: N/A — planning artifact, review pending]
|
||||
@@ -0,0 +1,25 @@
|
||||
# Report: Job adad47d1 — Refined Consensus (Rev.2) per `creator-agy-01` Challenge
|
||||
|
||||
**Durable output (updated in place)**: [.agents/reports/cline_deprecation_opinion.md](../../../.agents/reports/cline_deprecation_opinion.md)
|
||||
|
||||
## Summary
|
||||
|
||||
`creator-agy-01` challenged Rev.1's §3.1 risk characterization of cline's unattended-execution gap, arguing it understated the real danger: `cline history --json` (the pre-spawn gate) only validates that local session storage exists, not credential/API validity — so it can't protect against a runtime auth failure (401/expired token/429 quota) mid-task, which could plausibly force cline's TUI into its interactive setup modal with no clean-exit fallback like the other four agents have. A second point noted the 40-session usage fact I'd used to support RETAIN also amplifies `discover()`'s session-hijacking exposure.
|
||||
|
||||
**Verification before accepting**: I ran `cline history --help` myself (confirmed: pure local listing, no auth semantics) and traced exactly where MAM checks for the setup modal in `lib.sh` (confirmed: only at spawn-time and at the moment of injecting a new prompt — never continuously during an autonomous work stretch). Both confirm the architectural gap is real. I was also careful to flag what remains *inferred* rather than *observed*: neither `creator-agy-01` nor I have actually triggered a live credential failure to watch cline's real behavior — I adopted the escalated risk model as the working precautionary assumption while saying so explicitly, rather than overstating certainty either side doesn't have.
|
||||
|
||||
**Disposition**: Accepted, with the honesty caveat above — no `[REBUT:]` filed.
|
||||
|
||||
## What changed in Rev.2
|
||||
|
||||
- §3.1 rewritten: risk escalated from "narrow spawn-time race" to "unmonitored mid-task modal-fallback window," with the verification trail (what's confirmed vs. inferred) laid out explicitly.
|
||||
- §3.2 narrowed to reaffirm only the tool-call-approval finding that still stands (`--auto-approve` default true) — the credential-failure gap is a separate, more severe category, not covered by that flag.
|
||||
- New §3.4: precision-scoped the session-hijacking concern (cline's `discover()` does filter by workspace `cwd`, so exposure is concurrent-same-workspace activity, not all 40 sessions indiscriminately) while accepting the core point.
|
||||
- §4 revised: my RETAIN vote stands but its terms changed — now explicitly conditional on the new §6.2 safety gate, not an unconditional RETAIN as Rev.1 implied.
|
||||
- §6 reprioritized: the reconcile.sh fix is now urgent; a new mandatory safety-gate requirement (exclude cline from long-running autonomous roles until upstream ships a real headless/non-interactive flag) is added for the RETAIN path; the empirical-verification ask is upgraded from "nice to have" to a prerequisite before trusting cline with new unattended work.
|
||||
|
||||
Full Rev.2 text is in the durable report linked above.
|
||||
|
||||
**Process note**: Still no unanimous verdict (2 RETAIN-conditional vs. 1 REMOVE) — this challenge sharpened the RETAIN side's conditions rather than flipping any vote. The REMOVE-vs-RETAIN decision still belongs to the General Manager per `MULTI_AGENT_RULES.md` §3.
|
||||
|
||||
[VERDICT: N/A — consensus opinion artifact, decision belongs to the General Manager]
|
||||
@@ -0,0 +1,40 @@
|
||||
# 🔍 Cross-Code Review — Cline Deprecation Consensus Opinion, Rev.3 (Job 073e27d4)
|
||||
|
||||
- **Reviewer**: `planner-reviewer-claude-01`
|
||||
- **Target document**: `.agents/reports/cline_deprecation_opinion.md` (Rev.3 — response to `reviewer-creator-grok-01` (job `0a056794`) and `reviewer-hermes-01` (job `bc68ed65`) reviews)
|
||||
- **Prior review context**: I also reviewed Rev.2 of this same document in job `b9a72dce`, flagging 3 findings (imprecise `§6.2`/`§4.2` cross-references, an overclaimed "proved ~0.5–1.5 days" statement, and a stale §1 summary line). Rev.3 does not appear to be a response to that review — its changelog (F1/F2/F3) addresses different findings from grok's and hermes's separate reviews. This review checks both: whether Rev.3's own new claims are accurate, and whether my earlier findings were carried forward.
|
||||
- **Method**: read the full current file (109 lines, confirmed via `wc -l`; `git status --short` shows only this file as untracked, confirming the "no skill/framework code modified" constraint holds), and independently re-verified Rev.3's three new corrections (F1/F2/F3) against the live `cline --help` output and `reconcile.sh` source rather than accepting the changelog's claims at face value.
|
||||
|
||||
---
|
||||
|
||||
## 1. Constraint Compliance
|
||||
|
||||
`git status --short` → only `?? .agents/reports/cline_deprecation_opinion.md`. No skill/framework code touched. Diff header claims `+109` lines; live file is 109 lines — consistent.
|
||||
|
||||
## 2. Verification of Rev.3's Own New Claims (F1/F2/F3)
|
||||
|
||||
I did not take the changelog's self-description at face value — I re-derived each claim independently:
|
||||
|
||||
- **F1 (flag inventory)**: Ran `cline --help` myself. Confirmed line 25 of its output: `-k, --key <api-key> API key override for this run`. The report's bounded framing — this flag injects a key at startup but cannot refresh a credential mid-task or suppress the interactive modal fallback on a runtime provider failure, and no `--headless`/`--non-interactive` flag exists — is accurate; I found nothing in `cline --help` contradicting that scope-limiting claim. **Verified correct.**
|
||||
- **F2 (drift-C modernization status, corrected line numbers)**: I grepped `reconcile.sh` for `sibling_claimed` and drift-C block headers. Initially my grep for `"drift C ("` missed claude's block because its header uses a different format (`# === drift C: claude ...` — colon, not a parenthesized agent name, unlike agy/hermes/cline's `# === drift C (agy): ...` style). On closer inspection, claude's block **is** at line 637 exactly as claimed, and it indeed calls `verify_session_uuid(cwd, 'claude', uuid, s, mode="discover")` with the raw row `s` — no `sibling_claimed` exclusion, matching cline's block at line 785. agy (line 692) and hermes (line 742) both build `s_eval['_sibling_claimed_uuids']`. **Verified correct** — this is a genuine improvement over Rev.1/Rev.2, which had incorrectly implied claude's block was already modernized (grouping it with agy/hermes).
|
||||
- **F3 (consensus attribution)**: Cross-checked against hermes's original report (`.mam/jobs/57f33eff/hermes-reports/report-final.md`), which does state the drift-C fix as an explicit numbered condition of its RETAIN verdict, and grok's report, which lists the drift-C block within cline's maintenance-cost inventory (to be deleted under REMOVE) rather than as a standalone precondition. **Verified correct.**
|
||||
|
||||
All three of Rev.3's own corrections are accurate and represent genuine, verified improvements over Rev.2.
|
||||
|
||||
## 3. Findings Carried Forward — Unaddressed from My Rev.2 Review (job `b9a72dce`)
|
||||
|
||||
Rev.3's changelog responds to grok's and hermes's reviews, but none of the three issues I flagged in my own separate Rev.2 review were incorporated. Re-verified as still present in the live Rev.3 text:
|
||||
|
||||
- **Still present** (line 14, 85): `§6.2` cited as if it were a subsection heading. §6 (line 102) is still a flat `## 6.` heading followed by a plain numbered list (`1.`, `2.`) — no `### 6.1`/`### 6.2` headings exist anywhere in the document. Same issue as before, unfixed.
|
||||
- **Still present** (line 49): "the grok integration already **proved** the reverse operation (adding an agent) costs ~0.5–1.5 days" — unchanged. As I found in the prior review, `grok.py` was added in a single squashed commit (`ad8201d`, 2026-08-26), which cannot establish actual wall-clock effort; the day-count traces to `new_agent_types_roadmap.md`'s a priori estimate for different hypothetical candidates, not a measured fact about grok. "Proved" still overstates this.
|
||||
- **Still present** (line 34): "**2 of 3 lean RETAIN** (both conditional on the same follow-up fix)" — unchanged. As of Rev.2, my own RETAIN vote already carried an additional condition (the §6 item 2 safety gate) that hermes's original report never agreed to, so the two RETAIN votes are not conditioned on literally the same thing. This has been true since Rev.2 and remains uncorrected in Rev.3.
|
||||
|
||||
## 4. Minor Observation (not a defect)
|
||||
|
||||
The §0 changelog's Rev.2 entry was compressed from Rev.1/Rev.2's original 4-row table (which included per-point verification methodology, e.g. "I ran `cline history --help` myself") into shorter prose bullets during the Rev.3 restructuring. Some audit-trail granularity was lost from the changelog summary specifically, though the underlying detail still lives in the body sections (§3.1, etc.) it refers to. Not a correctness issue, just a slight reduction in the changelog's own self-sufficiency as a summary.
|
||||
|
||||
## 5. Verdict
|
||||
|
||||
Rev.3's own corrections (F1/F2/F3) are all independently verified accurate and are genuine improvements — in particular, F2 correctly identifies that claude's drift-C block is just as un-modernized as cline's, which earlier revisions had gotten wrong. However, three previously-identified, still-valid findings from my prior review of this same document were not carried forward into this revision. None of these — old or new — are severe enough to undermine the document's core methodology or conclusions; they remain small, mechanical precision fixes. Passing, with the expectation that a future revision finally closes out all outstanding findings from both review passes together rather than only the most recent one.
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,48 @@
|
||||
# 🔍 Cross-Code Review — Complete Cline Removal Implementation (Job 20d45d12)
|
||||
|
||||
- **Reviewer**: `planner-reviewer-claude-01`
|
||||
- **Target diff**: implementation of `plan-264c3b5d.md` Rev.2 — 30 files (adapter deletion, registry, 4 `lib_py` modules, `lib.sh`, 9 skill scripts, 6 test files, 3 docs) plus 1 out-of-scope test-flakiness fix.
|
||||
- **Method**: read every changed file's live post-diff state directly (not diff text alone), independently verified the two highest-risk items from my own Rev.2 plan (the `reconcile.sh` drift-C block boundary and the tiered-readiness/modal test retargeting), syntax-checked all 10 modified shell scripts, grepped the entire diff for any surviving `cline` reference, and ran the full test suite myself.
|
||||
|
||||
---
|
||||
|
||||
## 1. Fidelity to Rev.2 Plan — Verified, Not Assumed
|
||||
|
||||
I did not trust the implementation's own claim of compliance — I re-checked the specific corrections `creator-agy-01`'s challenge required in Rev.2 against the live diff:
|
||||
|
||||
- **Tiered-readiness tests (Rev.2's core correction)**: `test_c3_strong_token_and_hint_token_readiness_succeeds` now mocks `_delegate_py_bin`/`python -m lib_py.agents facts` to return a synthetic `mocktiered` agent with genuinely distinct `MAM_STRONG_READY_TOKENS='MockApp'` / `MAM_WEAK_READY_TOKENS='Use arrow keys'`, keeping the real facts-bridge call path exercised rather than bypassing it with raw env-var pre-injection — exactly what Rev.2 required. The other C4–C7 tests that were already using pre-set env vars (not resolving through the bridge in the original cline-based version either) were correctly left as simple session-name swaps, since they were never testing the bridge to begin with.
|
||||
- **`test_c8b` (modal test)**: retargeted fully to `claude`, using `'Try the new fullscreen renderer?'` as the injected screen text and `MAM_MODAL_TOKENS='Try the new fullscreen renderer\?'`, with session name `my-project-worker-claude-01` — this is claude's actual, verified `modal_tokens` value, exactly matching Rev.2's requirement to preserve the full session-name-resolution → `facts claude` → dialog-block path, not a synthetic placeholder.
|
||||
- **New facts-bridge round-trip assertion**: `test_a4_adapter_contract.py::test_adapter_required_properties` gained `assert adapter.strong_ready_tokens == adapter.ready_tokens` / `assert adapter.weak_ready_tokens == ''` for all 4 remaining agents, and `test_facts_bridge_eval_contract` now additionally asserts `STRONG=`/`WEAK=` come through the real bash `eval` of the bridge's output — this is actually a **stronger** implementation than what I asked for (I only required the property-level check; this round-trips through the real subprocess + bash eval too).
|
||||
- **`docs/NEW_AGENT_INTEGRATION_GUIDE.md`**: all 5 sites I flagged in Rev.2 (diagram, `_ADAPTERS` sample, `lib.sh` kind-mapping sample, binary-tuple sample, test-assertion sample) were updated — the architecture diagram box-drawing was even correctly realigned (`┬` connector fixed) after swapping `ClineAgentAdapter` for `GrokAgentAdapter` in that slot, not just text-deleted.
|
||||
|
||||
## 2. Independent Verification of the Highest-Risk Edit
|
||||
|
||||
I flagged the `reconcile.sh` cline drift-C block deletion as the highest-risk single edit in my own plan. Checked the live file directly: the block is cleanly gone, the preceding `hermes` drift-C block and the following `result = {...}` return statement are both intact and correctly adjacent with no orphaned fragments. Extracted and `ast.parse()`'d the actual `RECON_SRC` heredoc (lines 320–794, not the other heredoc earlier in the file, which I made sure to distinguish) — valid Python. `bash -n` on the whole file — valid.
|
||||
|
||||
## 3. Completeness Check
|
||||
|
||||
`git diff | grep -n "^+.*[Cc]line"` (every added line, across the entire diff) returns **zero matches** — no newly-written line anywhere in this diff still references cline. Cross-checked a full-repo `cline` grep against `git status`: every remaining match is either inside `.agents/reports/**` (untouched, correct) or inside changelog-style docs (`VERSIONS.md`, `IMPROVEMENTS.md`) describing past releases in the past tense (correctly left alone, consistent with my plan's "spot-check, don't blanket-edit" guidance).
|
||||
|
||||
## 4. Findings
|
||||
|
||||
### 4.1 Minor: `MULTI_AGENT_RULES.md`/`.ko.md` line 21 slightly stale (Low, not blocking)
|
||||
|
||||
`"Newly spawned agents (e.g., antigravity, claude, cline, hermes) act as Team Leaders..."` — an illustrative `e.g.` list, not a hard enumeration, but it does still name cline as a live example post-removal. Low severity since the sentence's substance is about the *role concept*, not a supported-agent contract, and this file wasn't in either of our removal plans' scope. Worth a follow-up touch-up, not blocking.
|
||||
|
||||
### 4.2 Out-of-scope change present in the diff (informational, not a defect)
|
||||
|
||||
`tests/test_o2_race_free_lock.py` was modified — replacing a fixed `time.sleep(0.3)` in `acquire_bg()` with an active poll-until-marker-file-written loop (up to 2s, with early exit if the background process dies). This has nothing to do with cline removal; it's a flaky-test timing fix, most likely surfaced while chasing "100% pass, zero regressions" during implementation. I reviewed the change itself: it's strictly safer than what it replaces (removes a fixed-sleep race assumption, fails faster on a dead process) and doesn't touch cline-adjacent code. Flagging for transparency/scope-discipline reasons, not as a defect — I would not block on this alone.
|
||||
|
||||
## 5. Full Test Suite
|
||||
|
||||
```
|
||||
.venv/bin/python -m pytest tests/ -q
|
||||
→ 439 passed in 655.22s (0:10:55), exit code 0
|
||||
```
|
||||
Ran to completion myself (not the diff's own claim). **Zero failures, zero regressions.**
|
||||
|
||||
## 6. Verdict
|
||||
|
||||
Every site from my own Rev.2 plan was implemented faithfully and, in two places (the facts-bridge round-trip assertion, the architecture-diagram realignment), more thoroughly than the plan strictly required. No orphaned `cline` references anywhere in the diff. The highest-risk edit (`reconcile.sh`'s block deletion) is clean and syntactically valid. One low-severity doc staleness and one out-of-scope-but-safe test fix are noted, neither blocking.
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,26 @@
|
||||
# Re-review: `cline_deprecation_opinion.md` (Rev.3)
|
||||
|
||||
- **Reviewer**: `reviewer-creator-grok-01`
|
||||
- **Job**: `d1fe1a99` (follow-up to `0a056794` `[VERDICT: NOT PASS]`)
|
||||
- **Artifact**: `.agents/reports/cline_deprecation_opinion.md` (untracked; no skill/framework code in the diff)
|
||||
|
||||
## Prior blocking items
|
||||
|
||||
| ID | Rev.2 defect | Rev.3 |
|
||||
|---|---|---|
|
||||
| **F1** | Claimed no `--api-key`-override exists | **Fixed.** §3.2 and §6.2 cite `-k, --key <api-key>` as spawn/run-start injection, bound as not mid-task refresh / not modal suppression. `--headless`/`--non-interactive` absence still holds against live `cline --help`. |
|
||||
| **F2** | Claimed claude drift-C has `sibling_claimed` | **Fixed.** §2.3 / §6.1: only agy (~692) and hermes (~742); claude (~637) and cline (~785) both lack it. |
|
||||
| **F3** | “All three independently demand a drift-C fix either way” | **Fixed.** Hermes: condition of RETAIN. Planner: urgent if RETAIN. Grok: delete the block if REMOVE. |
|
||||
|
||||
## Remainder (non-blocking)
|
||||
|
||||
- Honest 2–1 split preserved. Grok **REMOVE** in §1/§4 is accurate (no assignable UUID; unattended/modal gap; no live cline session).
|
||||
- §5 blast-radius constraints still match `e0916903` (keep `_pane_quiescent` / paste-normalize; retarget `test_c1_*`; no drive-by `cline.py` delete).
|
||||
- §2 heading still says “fully agree” while point 3 now states a disposition split. Content is honest; heading is slightly loose. Not worth another loop.
|
||||
- Grok’s **REMOVE** vote is unchanged. This PASS is on the synthesis, not a vote flip.
|
||||
|
||||
No `[ESCALATE: PLANNER]`. GM still owns REMOVE vs conditional-RETAIN.
|
||||
|
||||
---
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,38 @@
|
||||
# Review: Complete `cline` removal
|
||||
|
||||
- **Reviewer**: `reviewer-creator-grok-01`
|
||||
- **Job**: `d78e819e`
|
||||
- **Scope**: Diff vs `cline_deprecation_opinion.md` §5 blast radius. No skill/framework files were edited by this review.
|
||||
|
||||
## §5 checklist
|
||||
|
||||
| Requirement | Result |
|
||||
|---|---|
|
||||
| Delete `adapters/cline.py`, unregister in `registry.py` | **Met.** Adapters dir is `claude.py` / `agy.py` / `hermes.py` / `grok.py` only. |
|
||||
| Remove cline from lib.sh + skill scripts | **Met.** Zero `cline` hits under `.agents/skills/` (kind map, spawn-token strip, `send_keys_safe` case, create/resume/stop/status/reconcile/orc_onboard/run_loop, atomic_yaml / verify_session / workspace_uuid own-keys). |
|
||||
| Drop `cline_re` and cline `--id` / `CLINE_SESSION_ID` arms | **Met.** `is_valid_id` is UUID-only. |
|
||||
| Keep `_pane_quiescent`, whitespace paste-normalize, paste-skip list (minus cline membership) | **Met.** Skip list is now `claude\|agy\|grok`. Hanging-indent comment depersonalized, logic kept. |
|
||||
| Retarget, don’t drop, TUI fixture tests | **Met for `test_c1_*`.** Strong/weak readiness uses a `mocktiered` facts stub; modal dialog test uses claude’s fullscreen upsell; SKS suffix cases use grok/claude/hermes/agy. `test_o31` (node launcher + non-UUID id) was **deleted**, which is correct: that code path no longer exists and cannot be retargeted to a UUID agent. |
|
||||
| Historical `.agents/reports/**/*cline*` untouched | **Met.** Diff does not touch those trees. `VERSIONS.md` / `IMPROVEMENTS.md` still mention cline as changelog history — leave them. |
|
||||
| Single coordinated change | **Met.** 31 files, −411/+135. Not a `cline.py`-only delete. |
|
||||
| Other agents unharmed | **Met.** hermes `--yolo --accept-hooks` spawn fallback, grok assigned-UUID YAML branch, claude/agy paths intact. |
|
||||
|
||||
## Tests
|
||||
|
||||
```
|
||||
pytest tests/ → 439 passed in 614.62s
|
||||
```
|
||||
|
||||
Zero failures. Adapter contract, TUI readiness, orc-onboard, tier1/tier2 all green after the 5-tuple shrink.
|
||||
|
||||
## Residual nits (do not block)
|
||||
|
||||
1. `create_session.sh` fallback `CMD_FULL` case still omits `grok` (primary path is `spawn-spec`). Pre-existing, not introduced by this removal.
|
||||
2. Create `SKILL.md` `cmd_full` table still lists only claude/agy. Docs lag, not runtime.
|
||||
3. Changelog files (`VERSIONS.md`, `IMPROVEMENTS.md`) still name cline; that is audit trail, not live surface.
|
||||
|
||||
No leftover live dispatch, no deleted shared TUI helpers, no regression in the remaining four agents. No `[ESCALATE: PLANNER]`.
|
||||
|
||||
---
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,48 @@
|
||||
# 📋 Code Review Report — Complete Removal of cline Agent Support (Job 2562f9c9)
|
||||
|
||||
- **Reviewer**: `reviewer-hermes-01` (role: reviewer)
|
||||
- **Reviewed diff**: 31 files, +135/−411 — full cline removal per the GM's REMOVE decision, executed against `.agents/reports/cline_deprecation_opinion.md` §5 blast radius and plan `.agents/reports/planner-reviewer-claude-01/plan-264c3b5d.md` (Rev.2)
|
||||
- **Baseline for comparison**: merged HEAD `e0c0c10` (hermes modernization, previously reviewed by me in jobs b45fb1d4/ca4539e8)
|
||||
- **Method**: full-diff read; framework-wide residual `grep -i cline` over `.agents/skills/`, `tests/`, `deploy/`, `docs/`; syntax checks on all 10 modified shell scripts + 11 Python files; test-count delta analysis; full suite execution. No code modified by this review.
|
||||
|
||||
---
|
||||
|
||||
## 1. Verification Evidence
|
||||
|
||||
| # | Check | Result |
|
||||
|---|---|---|
|
||||
| 1 | **Full test suite** | ✅ **439 passed, 0 failures** (607.5 s) |
|
||||
| 2 | **Test-count sanity** (plan §8 requirement) | ✅ 441 → **439** collected (−2 = exactly the two cline-only tests `test_o31_cline_node_launcher_id_format` and `test_o39_cline_orchestrator_exclusion` deleted per plan §5; all other retargeted tests preserved as renamed/redirected cases). Matches plan's "decreased by roughly the number deleted, not increased or unchanged" gate. |
|
||||
| 3 | **Residual cline references** | ✅ **Zero** matches for `-i 'cline'` across `.agents/skills/`, `tests/`, `deploy/`, `docs/` (all file types) — the removal is total in live surface. (`.agents/reports/**` history correctly untouched per plan §6/§8 preservation constraint.) |
|
||||
| 4 | **Syntax**: `bash -n` on all 10 modified/affected shell scripts; `py_compile` on registry/atomic_yaml/verify_session/workspace_uuid + 6 test files | ✅ all clean |
|
||||
| 5 | Adapter + registry | ✅ `cline.py` deleted; `registry.py` no longer imports/registers it |
|
||||
| 6 | 4 `lib_py` core modules | ✅ own-key tuples/dicts reduced to 4 agents in `atomic_yaml.py`, `verify_session.py`, `workspace_uuid.py` |
|
||||
| 7 | `lib.sh` 5 mechanisms | ✅ kind mapping case + 2 grep fallbacks removed; binary-strip tuple → 4-agent; comment `~/.cline` dropped; `send_keys_safe` case arm removed; **paste-skip list retains claude/agy/grok membership** (mechanism preserved per plan §3); whitespace-normalization comment de-attributed from cline but **mechanism kept** |
|
||||
| 8 | 9 skill scripts | ✅ all cline branches/cases/tuples removed exactly per plan §4 — spot-verified against the plan's line list: create (auth gate L122–125, CMD_FULL L189, spawn dispatch L210, delegate_agent L319, child-PID L339, YAML entry L423), resume (RESOLVED_BIN branch L89–91 collapsed correctly to a single `command -v` block), stop (own-id capture L291–292), status (artifact check L93–96), reconcile (drift-C block L785–828 fully deleted, `id_name` tuple → `agent == 'claude'` per plan's style recommendation), orc_onboard (`cline_re` + argv parsing arm + env var + own-key list), run_loop (elif branch), update_yaml_resumed (PID capture + elif branch) |
|
||||
| 9 | Docs | ✅ 5 SKILL.md/README + `deploy/INSTALL.md` + `implementation_plan.md` + `docs/NEW_AGENT_INTEGRATION_GUIDE.md` (all 5 hardcoded sample sites fixed: diagram, `_ADAPTERS` dict, kind mapping, binary tuple, test-assertion sample) |
|
||||
| 10 | Test retargeting fidelity (the plan's core preservation principle) | ✅ verified concretely: `test_c3` now uses a test-local `mock_py` facts-bridge shim with genuinely differentiated strong/weak tokens ('MockApp' vs 'Use arrow keys') and `wait_for_tui_ready dummy-sess mocktiered` — this keeps the **real bridge call** in the loop exactly as the plan's Rev.2 challenge-fix required (not raw env-var injection, which would have bypassed the `[ -z … ]` gate); `test_c8b` retargeted end-to-end to claude's real modal (`Try the new fullscreen renderer?`) with a claude session name, preserving the session-name→facts→modal→RC=2 path; `test_o32` **strengthened** (cline-format IDs now asserted rejected: `"1785635248957_fajon"` added to the bad-list — correct since `cline_re` is gone); 2-tier round-trip assertions added to the facts-bridge contract test (`STRONG=`/`WEAK=` for all 4 remaining agents) |
|
||||
| 11 | Unrelated-regression check on shared logic | ✅ `send_keys_safe`'s marker/paste/submit flow, `wait_for_tui_ready`'s tier decision logic, and `verify_session_uuid` are structurally untouched apart from cline membership removal |
|
||||
|
||||
## 2. Deviations from the plan (all assessed as acceptable or improvements)
|
||||
|
||||
1. **`stop_session.sh` usage() lost two lines not required by the plan** ("Stop is always graceful and always captures the conversation id. / (idempotent: …)"). These lines were *true before and after* this change — their deletion is unrelated to cline removal. It is a small drive-by docs deletion; content is still true and was mildly useful. Low-impact; flag for the committer to either restore the two lines or confirm intentional.
|
||||
2. **`tests/test_o2_race_free_lock.py::acquire_bg` reworked** (fixed 0.3 s sleep → marker-file polling loop up to 2 s). Nothing to do with cline — this is a test-flakiness fix for a race between lock acquisition and the test's first assertion. Reasonable hardening, but it is an unrelated change riding in a cline-removal diff; it *is* defensible under "keep the suite green while removing cline" if the old timing proved flaky during this work (plausible — the lock script changed nothing, but sandbox timing may have). No action required; noted for change-transparency.
|
||||
3. **`implementation_plan.md` team line** (`cline` → `hermes`, `grok`) and **`deploy/INSTALL.md`** agent list edits: the plan said "spot-check, don't blanket-edit" these docs for *actively misleading* mentions — an agent-listing that includes a now-removed agent qualifies as actively misleading, so these edits fall inside the plan's exception clause. Acceptable.
|
||||
4. **`test_a4_adapter_contract.py` gained new assertions** (2-tier default contract, STRONG/WEAK facts-bridge round-trip) — these implement plan §5's Rev.2 addition; verified present and passing.
|
||||
|
||||
## 3. Non-blocking observations
|
||||
|
||||
1. **[Low — pre-existing, now moot for cline]** The claude drift-C block's missing sibling-exclusion (the Rev.3 consensus §6.1 item) is **not** addressed here — correctly, since the plan explicitly scoped it out as orthogonal to cline removal. It remains the one open modernization gap; recommend it be tracked as its own follow-up job rather than silently absorbed.
|
||||
2. **[Info]** `docs/NEW_AGENT_INTEGRATION_GUIDE.md`'s ASCII diagram edit preserves alignment acceptably; no rendering breakage observed.
|
||||
3. **[Info]** `test_tier2_component.py` usage-text loops now assert `grok` instead of `cline` — consistent with the scripts' actual usage() output (verified by the passing suite).
|
||||
4. **[Info]** The consensus/plan/report artifacts (`clline_deprecation_opinion.md`, plan-264c3b5d, plan-a33a133e, report-073e27d4, report-d1fe1a99, report-2e6f01f4) are included in the diff as new tracked files under `.agents/reports/` — consistent with the durable-promotion convention in `MULTI_AGENT_RULES.md` §4.
|
||||
|
||||
## 4. Risk Assessment
|
||||
|
||||
The three plan-flagged risk items are all addressed: (a) the reconcile.sh drift-C block deletion's boundaries were verified against live code (block fully gone, adjacent hermes block intact, `result = {` assembly intact); (b) orc_onboard's ancestor-walk mechanism was kept generically with only cline's case arm removed (plan §4 recommendation followed); (c) the test-count sanity check passes exactly. The suite's 439/439 green plus zero residual references means no cline path remains reachable, and the other four agents' coverage is demonstrably unchanged in structure.
|
||||
|
||||
## 5. Verdict
|
||||
|
||||
The removal is complete, surgical, and matches the planned blast radius with only two minor unrelated edits (stop_session.sh usage lines, o2 flakiness fix) that are individually defensible but worth the committer's awareness. All preservation constraints from the consensus doc §5 were honored: generic mechanisms (whitespace-normalized paste matching, paste-skip list, `_pane_quiescent`, 2-tier readiness, modal contracts) retained; generic-mechanism tests retargeted rather than deleted, with the facts-bridge genuinely still exercised; historical `.agents/reports/**` untouched.
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,43 @@
|
||||
# 📋 Code Review Report — cline Deprecation Consensus Opinion Rev.3 (Job 2e6f01f4)
|
||||
|
||||
- **Reviewer**: `reviewer-hermes-01` (role: reviewer) — participant in the reviewed consensus (job `57f33eff`) and author of the prior NOT PASS review (job `bc68ed65`); this review judges only whether Rev.3 faithfully and accurately incorporates the two review rounds.
|
||||
- **Reviewed diff**: one file — `.agents/reports/cline_deprecation_opinion.md` (Rev.2 → Rev.3, 105 → 109 lines; blob `f818c6e` → `229ad1e`, hash verified against working tree). No code changes.
|
||||
- **Context**: my previous review (job `bc68ed65`) issued `[VERDICT: NOT PASS]` with two blocking factual defects; grok's review (job `0a056794`) raised its own points. This revision claims to fix both (F1, F2) plus an attribution refinement (F3).
|
||||
|
||||
---
|
||||
|
||||
## 1. Prior Blocking Defects — Correction Verification
|
||||
|
||||
### 1.1 F1 — flag inventory (my bc68ed65 §2.2) → **FIXED, accurately**
|
||||
Rev.3 §3.2 now states: `cline --help` shows `--auto-approve <boolean>` (default true) **and** `-k, --key <api-key>` for startup key injection, bounding its scope explicitly — "cannot refresh an expired credential mid-task nor suppress the interactive TUI fallback"; and confirms no `--headless`/`--non-interactive` flag exists. §6.2's parenthetical is updated consistently ("-k, --key only provides startup key override").
|
||||
My re-verification against the live CLI (v3.0.60): `--auto-approve` default true ✅; `-k, --key <api-key>` present ✅; no `--headless`/`--non-interactive` ✅. The corrected scoping is exactly the right technical characterization — it neither overstates nor understates what `-k` buys.
|
||||
|
||||
### 1.2 F2 — drift-C modernization status (my other blocking defect) → **FIXED, accurately**
|
||||
§2 point 3 and §6.1 now state: sibling-exclusion + epoch discipline exist only in **agy (~692)** and **hermes (~742)**; **claude (~637)** and **cline (~785)** both lack it, and §6.1's urgent fix now covers **both** cline and claude blocks.
|
||||
Line references re-verified against live code: block markers at 637/676/725/785; `sibling_claimed` present only at 692 (agy) and 742 (hermes) — claude's block (637–665) verifies against raw `s`. All four line numbers in the document are correct. The omission that made Rev.2 not-passable is fully remediated.
|
||||
|
||||
### 1.3 F3 — consensus attribution (grok's review) → **FIXED**
|
||||
§2.3/§6.1 now attribute positions correctly (Hermes: RETAIN-condition; Planner: urgent; Grok: delete-if-REMOVE). Grok's review job `0a056794` exists with the expected brief, and its original report (e0916903) indeed recommends REMOVE as summarized in §1's table.
|
||||
|
||||
## 2. Carry-Over Claims — Re-verified (no regression between Rev.2 → Rev.3)
|
||||
|
||||
| Claim | Status |
|
||||
|---|---|
|
||||
| §3.1 modal-check scope (spawn + injection-time only, never continuous) — lib.sh `_pane_dialog_open` consumers | ✅ re-confirmed (wait_for_tui_ready:1888, send_keys_safe:2081 are the only consumers) |
|
||||
| §3.3 / §2.4: 40 standalone sessions, oldest `1782614591159_mrkxj` | ✅ re-confirmed live |
|
||||
| §2.2: only claude.py + cline.py override `modal_tokens` | ✅ |
|
||||
| §2.6 / §5: blast-radius enumeration (incl. 5-tuple whitelist assertion in test_tier1_unit.py:963, fixture names) | ✅ re-confirmed |
|
||||
| §2.5 / §5: cline timestamp IDs, orc_onboard regex `^[0-9]{10,}_[0-9A-Za-z]+$` (L69–70), argv0-aware ancestor walk + cline argv parsing (`--id`/`--session-id`, orc_onboard.sh:128–129), per-family env vars (L147) | ✅ all confirmed — the §5 "node-as-argv0 ancestor-walk accommodation" claim is accurate: `detect_nearest_agent` (orc_onboard.sh:76–164) walks ancestors via `ps -o command=`, basename-matches agent tokens, and parses cline's `--id` from the command line; `test_o31_cline_node_launcher_id_format` (exec -a argv0 rewrite) covers exactly this |
|
||||
| §4 honest 2–1 split; final decision deferred to GM | ✅ preserved in Rev.3 |
|
||||
|
||||
## 3. Residual Findings (non-blocking)
|
||||
|
||||
1. **[Info — nuance, no doc change required]** claude's epoch story differs in kind from cline's: `claude.py::verify_artifact` still uses a file-level `getmtime` check (claude.py:54), but each claude session is one `.jsonl` file, so file-mtime **is** row-level there — unlike hermes's shared `state.db`, which is why hermes needed the row-level rewrite and claude does not. Rev.3's §6.1 correctly treats claude and cline as equally *structurally* un-modernized (both lack sibling exclusion in reconcile.sh); readers should note the adapter-level epoch mechanics differ (claude's per-file mtime is adequate; cline's per-file mtime likewise). This nuance does not change §6.1's operative instruction.
|
||||
2. **[Info]** §6.2's `MULTI_AGENT_RULES.md` capability-restriction remains a protocol-document change requiring GM + Team Leader consent per that document's own amendment clause — correctly framed as a recommendation, not an enacted rule.
|
||||
3. **[Info]** No lint issues (markdown-only diff).
|
||||
|
||||
## 4. Assessment
|
||||
|
||||
Both blocking defects from job `bc68ed65` are corrected faithfully — not merely acknowledged, but with correct line-level references and properly bounded flag semantics. The F3 attribution addition (grok's REMOVE-side framing of the drift block as deletable debt) is a genuine improvement in consensus fidelity. All checkable claims now survive direct verification against the live repo, live CLI, and live environment. The document maintains its honest 2–1 split presentation and correct GM deferral.
|
||||
|
||||
[VERDICT: PASS]
|
||||
Reference in New Issue
Block a user