Files
multi-agent-mux/.agents/reports/version_upgrade_recommendation.md
T
Godopu 6c0b8b0084 chore(release): bump framework and 8 skills to v4.0.0 (MAJOR — cline removal & hermes modernization)
- Bump MAM_VERSION to 4.0.0 in lib.sh
- Bump all 8 skill frontmatter versions to 4.0.0 in 3-way lockstep
- Update VERSIONS.md with v4.0.0 changelog, migration guide (B-1..B-5), and skill matrix
- Archive multi-agent version upgrade consensus and peer review reports (439 passed, 0 failures)
2026-08-28 23:31:31 +09:00

12 KiB
Raw Blame History

📦 Version Upgrade Recommendation: v3.1.0 → Next Release

Rev.2 Changelog (Job ec388212)

creator-agy-01 filed an architectural challenge (job 53b96f7a) against Rev.1's §6 implementation checklist — not against the v4.0.0 consensus itself, which it explicitly reaffirmed. Both points were independently re-verified against the live codebase (not accepted at face value) and both accepted, no [REBUT:] filed:

  1. VERSIONS.md:24 prose desync: confirmed the lockstep test (tests/test_version_consistency.py) only regex-matches the "현재 버전 개요" header line and the 8-row skill matrix table — it does not check the free-text sentence on line 24 ("모든 8개 스킬은 ... v3.1.0으로 동기화되어 배포됩니다."). A literal-minded execution of Rev.1's §6 item 2 would leave that sentence stuck at v3.1.0, contradicting the header two lines above it. Fixed: §6 item 2 now names line 24 explicitly.
  2. Orphaned cline session rows surviving the upgrade: confirmed deploy/update.sh explicitly backs up and restores .mam/agent-sessions.* across an update (lines 111166) — user session state is never wiped. Confirmed lib_py/agents/registry.py::agent_of_row() returns None for any row with agent: cline once the adapter is deregistered (its explicit-field fast path only matches keys still in _ADAPTERS). Confirmed multi-agent-mux-resume/scripts/resume_session.sh hard-rejects --agent cline with exit 2 post-removal. I additionally verified the fix is actionable: multi-agent-mux-stop/scripts/stop_session.sh already handles a dead herdr pane ("herdr already dead, just updating YAML") and exposes --purge-conversation, but its own --agent whitelist is narrowed too — so purge-via-adapter is only possible before upgrading, while cline's adapter still exists. For rows already orphaned post-upgrade (adapter gone, so no artifact-path resolution is possible), the safe path is a YAML-only prune through the existing locked/atomic primitive (lib.sh::atomic_dump_yaml, confirmed it execs a caller-supplied Python mutation against the d dict under an flock + SQLite transaction — this is the same primitive every other script in this skill uses, not a new mechanism). Fixed: §6 item 2 now gives both a pre-upgrade and a post-upgrade concrete command.

  • Job: a348e91c (Planner: planner-reviewer-claude-01) · Refined under challenge in job ec388212
  • Current version: v3.1.0 (MAM_VERSION in .agents/skills/lib.sh:32, lockstep with VERSIONS.md and 8 SKILL.md frontmatters — see tests/test_version_consistency.py)
  • Method: Real multi-agent consensus. Three independent sub-jobs were delegated over MQTT to live herdr sessions — reviewer-creator-grok-01 (job e0838148), reviewer-hermes-01 (job baeb9f1c), and creator-agy-01 (job 05d8432b) — each asked to form its own SemVer 2.0.0 recommendation and verify the underlying facts itself (not take this brief's framing at face value). All three reports are archived at .mam/jobs/{e0838148,baeb9f1c,05d8432b}/*-reports/report-final.md. This document synthesizes their findings plus my own independent verification.

1. Changes Under Evaluation

Two feature branches landed on main since the v3.1.0 release tag (4a3328d):

Commit Change Nature
6208a7f / merged e0c0c10 Hermes agent full modernization + Ollama live support: headless flags, TUI input-region delimiters, ready-token hardening, reconcile.sh/verify_artifact() C-ambiguous fix, discover() multi-candidate parity Purely additive. --agent hermes already existed; no documented surface shrank.
f57cd5c Cline agent deprecation and complete removal: adapters/cline.py deleted, unregistered from registry.py, --agent cline rejected in create_session.sh and all 8 skill scripts, lib.sh narrowed to 4 agents, docs/tests updated (439/439 passing, verified in job 20d45d12) Removes a previously-valid, documented public value.

cline has been a first-class, documented --agent value since v1.2.0 (2026-08-14, VERSIONS.md: "Cline 에이전트 통합") — roughly 14 releases of history. Post-f57cd5c, any invocation of --agent cline (script, saved .mam/agent-sessions.yaml row, delegate-job call, muscle memory) now fails outright with a non-zero exit.

2. The Question

Under SemVer 2.0.0 (https://semver.org/), does this pair of changes warrant:

  • v4.0.0 (MAJOR — incompatible/breaking public-API change), or
  • v3.2.0 (MINOR — additive functionality only)?

3. Independent Reviewer Recommendations

Reviewer Session Job Recommendation Core argument
reviewer-creator-grok-01 herdr:reviewer-creator-grok-01 e0838148 v4.0.0 --agent is the CLI's public API surface (documented in --help, SKILL.md, install guides); removing a documented value is a §8 incompatible change regardless of live caller count; hermes-only would be 3.2.0, but the highest-severity change in a release governs.
reviewer-hermes-01 herdr:reviewer-hermes-01 baeb9f1c v4.0.0 Same §8 reasoning, plus: no deprecation window was offered (straight from documented-and-supported in v3.1.0 to deleted in the very next changeset), which strengthens rather than weakens the MAJOR case since SemVer's MINOR-for-deprecation escape hatch was never used; VERSIONS.md's own precedent (adding cline in v1.2.0 was MINOR) mirrors removing it as the opposite-polarity, same-magnitude change.
creator-agy-01 herdr:creator-agy-01 05d8432b v4.0.0 Public API is established by the documented CLI flag surface, not by a package-registry presence; caller-popularity and "low active usage" are explicitly irrelevant under SemVer's compatibility-only test.

Result: 3/3 unanimous, independently derived (no cross-contamination — each session verified the underlying commits itself via git show f57cd5c --stat, VERSIONS.md history, and/or create_session.sh's own argument whitelist rather than trusting the brief's summary).

4. My Own Verification

I independently confirmed the load-bearing facts before accepting the consensus:

  • git show f57cd5c --stat confirms the full deletion scope: adapters/cline.py removed, registry.py unregistered, lib.sh and all 9 skill scripts narrowed, atomic_yaml.py/verify_session.py/workspace_uuid.py key maps narrowed to 4 agents. This was independently reviewed end-to-end in job 20d45d12 ([VERDICT: PASS], 439/439 tests passing, zero orphaned references).
  • VERSIONS.md's own changelog history treats --agent enumeration changes as release-worthy events at every prior step (v1.2.0 added cline as MINOR; v3.0.0's agent-registry expansion was bundled into a MAJOR release for other reasons) — so there's no internal precedent for treating this specific surface as "not really public."
  • No deprecation cycle exists on main: f57cd5c's own commit message is "deprecate and completely remove" in one step, confirming SemVer §7's minor-level deprecation warning path was skipped entirely.

I concur with the consensus: the counter-argument ("MAM is an internal, single-repo tool, so --agent isn't really public API") does not hold. SemVer 2.0.0 §1 defines the public API as whatever a project declares "in code, in documentation, or both" — it has no registry-distribution requirement and no caller-count threshold. MAM declares --agent exhaustively (help text, SKILL.md, VERSIONS.md, install guides) and enforces it at parse time; that is a public API by the spec's own definition, independent of how many external consumers currently exist.

5. Consensus Recommendation

→ v4.0.0 (MAJOR)

  • Hermes modernization alone: would be MINOR (v3.2.0).
  • Cline removal alone or bundled with hermes: MAJOR (v4.0.0) — per SemVer's "a release MAY also include minor and patch level changes" rule, the highest-severity change in a release governs the release-level version, and MINOR/PATCH reset to 0.
  • Labeling this release v3.2.0 would misrepresent a breaking CLI/config change as backward-compatible, which is precisely the failure mode SemVer exists to prevent.

6. Implementation Checklist for the Bump

This repo enforces a 3-way version lockstep (tests/test_version_consistency.py::test_three_way_version_lockstep), so a version bump is not a single edit. All three must move to 4.0.0 together or the lockstep test fails:

  1. .agents/skills/lib.sh:32MAM_VERSION="3.1.0"MAM_VERSION="4.0.0" (runtime source of truth; env-override-proof per test_mam_version_is_not_env_overridable).
  2. VERSIONS.md:
    • "현재 버전 개요" header: **프레임워크 버전**: \v3.1.0`v4.0.0`, update release date.
    • Line 24 prose (not caught by the lockstep test's regex): "...v3.1.0으로 동기화되어 배포됩니다.""...v4.0.0으로 동기화되어 배포됩니다." — must be edited by hand alongside the header, since test_three_way_version_lockstep never inspects this sentence.
    • Skill matrix table (8 rows): every | \3.1.0` |cell →| `4.0.0` |`.
    • New ### v4.0.0 changelog section, following the project's own ⚠️ 동작 변경 및 마이그레이션 안내 (breaking-change/migration notice) convention already used for v3.1.0's B-1…B-5 entries. Document, in order:
      • What broke: --agent cline removed from every entry point (create_session.sh, resume_session.sh, stop_session.sh, reconcile.sh, delegate-job, etc.).
      • Detect impact: grep -rn "agent: cline\|cline_conversation_id_own\|--agent cline" .mam/ *.sh 2>/dev/null across saved configs/scripts.
      • Pre-upgrade cleanup (preferred — do this on v3.1.0, before running deploy/update.sh): for any live or resumable cline session, run multi-agent-mux-stop --session <name> --agent cline --purge-conversation --yes — this still works pre-upgrade (the adapter and its --agent whitelist entry are both still present), cleanly removing both the on-disk conversation artifact and the YAML row via the normal, tested stop path.
      • Post-upgrade cleanup (for rows nobody purged beforehand): deploy/update.sh preserves .mam/agent-sessions.* verbatim across the upgrade, and once on v4.0.0 the cline adapter no longer exists, so --agent cline is rejected everywhere and there is no artifact-aware purge path left — only a YAML-only prune is possible:
        source .agents/skills/lib.sh
        atomic_dump_yaml .mam/agent-sessions.yaml <<'MUT'
        d['herdr_sessions'] = [
            s for s in d.get('herdr_sessions', [])
            if s.get('agent') != 'cline' and not str(s.get('name', '')).endswith('-cline')
        ]
        MUT
        
        This reuses the existing locked/atomic write primitive (flock + SQLite transaction inside atomic_dump_yaml_main()) that every other skill script already uses — no new tooling. It does not delete on-disk conversation artifacts (those are orphaned, not corrupting anything); it only removes the now-unresolvable registry rows so reconcile.sh/status.sh stop reporting drift on them.
      • No forward migration for the adapter itself: git history is the only way to recover adapters/cline.py if cline support is ever needed again.
  3. 8× SKILL.md frontmatter (version: 3.1.0version: 4.0.0) in: multi-agent-mux-create, multi-agent-mux-stop, multi-agent-mux-resume, multi-agent-mux-status, multi-agent-mux-monitor, multi-agent-mux-delegate-job, multi-agent-mux-loop, multi-agent-mux-orc-onboard.
  4. Run tests/test_version_consistency.py after the edits to confirm lockstep holds before the release commit.
  5. Recommended commit style, consistent with existing history (4a3328d chore(release): bump framework and 8 skills to v3.1.0 (MINOR)): chore(release): bump framework and 8 skills to v4.0.0 (MAJOR — cline removal).

No other file in the repo hardcodes the version literal (create_session.sh only echoes ${MAM_VERSION:-unknown} at runtime — confirmed via grep), so this is the complete edit surface.

[VERDICT: N/A — consensus/planning artifact, not a code review]