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)
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
# Report: Job ec388212 — Refined Version Upgrade Plan (Rev.2) per `creator-agy-01` Challenge
|
||||
|
||||
**Durable output (updated in place)**: [.agents/reports/version_upgrade_recommendation.md](../../../.agents/reports/version_upgrade_recommendation.md)
|
||||
|
||||
## Summary
|
||||
|
||||
`creator-agy-01` challenged Rev.1's §6 implementation checklist (job `53b96f7a`) — explicitly reaffirming the v4.0.0 consensus itself, not disputing it. Two blind spots identified. **Both accepted — no `[REBUT:]` filed**, after independently re-verifying each claim against the live codebase rather than trusting the challenge's framing:
|
||||
|
||||
1. **`VERSIONS.md:24` prose desync**: verified `tests/test_version_consistency.py`'s regexes only cover the "현재 버전 개요" header line and the 8-row skill matrix table — confirmed by reading the actual regex patterns (`re.search(r"...프레임워크 버전...")`, `re.findall(r"\|\s*\*\*\`([^\`]+)\`\*\*...")`). Line 24's free-text sentence ("...`v3.1.0`으로 동기화되어 배포됩니다.") is untouched by either regex. **Fixed**: §6 item 2 now names this line as an explicit edit target.
|
||||
2. **Orphaned `cline` session rows surviving the upgrade**: verified `deploy/update.sh` (lines 111–166) explicitly backs up and restores `.mam/agent-sessions.*` across an update — nothing is wiped. Verified `registry.py::agent_of_row()` returns `None` for `agent: cline` rows post-removal (its explicit-field fast path checks `str(explicit).lower() in _ADAPTERS`, and `cline` is no longer a key). Verified `resume_session.sh` hard-rejects `--agent cline` with `exit 2`. Went further than the challenge asked: traced whether `multi-agent-mux-stop --purge-conversation` remains usable — confirmed it handles an already-dead herdr pane fine ("herdr already dead, just updating YAML"), but its `--agent` whitelist is narrowed too, so artifact-aware purge only works **before** upgrading. For rows orphaned *after* upgrading (no adapter left to resolve artifact paths), traced the safe primitive down to `lib.sh::atomic_dump_yaml` / `atomic_yaml.py::atomic_dump_yaml_main()` — confirmed it execs a caller-supplied Python snippet against the `d` dict under an `flock` + SQLite `BEGIN IMMEDIATE` transaction, the same locked path every other skill script already uses. **Fixed**: §6 item 2 now gives a verified pre-upgrade purge command and a verified post-upgrade YAML-only prune one-liner using that exact primitive, rather than inventing new tooling.
|
||||
|
||||
Full Rev.2 text is in the durable plan linked above (new "Rev.2 Changelog" section at the top, plus the rewritten §6 item 2).
|
||||
|
||||
[VERDICT: N/A — planning artifact, review pending]
|
||||
@@ -0,0 +1,61 @@
|
||||
# 🔍 Cross-Code Review — v4.0.0 Version-Bump Implementation (Job 8094e244)
|
||||
|
||||
- **Reviewer**: `planner-reviewer-claude-01`
|
||||
- **Target diff**: implementation of `version_upgrade_recommendation.md` Rev.2's §6 checklist — 9 files (`lib.sh`'s `MAM_VERSION`, 8× `SKILL.md` frontmatters, `VERSIONS.md`) plus 1 new report file.
|
||||
- **Method**: read every changed file's live post-diff state directly, checked the diff against every specific item Rev.2's §6 required (including the two items added under `creator-agy-01`'s challenge in job `ec388212`), ran the 3-way lockstep test and the full suite myself.
|
||||
|
||||
---
|
||||
|
||||
## 1. Fidelity to Rev.2's §6 Checklist
|
||||
|
||||
- **Item 1 (`lib.sh:32`)**: `MAM_VERSION="4.0.0"` — confirmed live in the file, matches exactly.
|
||||
- **Item 2, header**: `**프레임워크 버전**: \`v4.0.0\`` — done.
|
||||
- **Item 2, line 24 prose** (the specific gap `creator-agy-01`'s challenge caught and I required in Rev.2): confirmed live — `"...v4.0.0으로 동기화되어 배포됩니다."` — correctly updated, not left stale.
|
||||
- **Item 2, 8-row skill matrix table**: all 8 cells read `4.0.0`.
|
||||
- **Item 2, new `### v4.0.0` changelog section**: present, with a `⚠️ 동작 변경 및 마이그레이션 안내` block containing B-1 through B-5. Checked each against my Rev.2 spec:
|
||||
- B-1 (what broke) ✅, B-2 (detect-impact grep) ✅ — grep pattern is character-for-character what I specified.
|
||||
- B-3 (pre-upgrade `--purge-conversation` cleanup) ✅ — command matches exactly.
|
||||
- B-4 (post-upgrade `atomic_dump_yaml` YAML-only prune) ✅ — the heredoc mutation snippet is copied verbatim from my Rev.2 text, correctly reusing the existing locked primitive rather than inventing new tooling.
|
||||
- **Gap**: my Rev.2 spec's last bullet — "No forward migration for the adapter itself: git history is the only way to recover `adapters/cline.py`" — did not make it into B-1…B-5. See Finding 4.1 (minor, non-blocking).
|
||||
- **Item 3 (8× `SKILL.md` frontmatter)**: all 8 confirmed at `version: 4.0.0` (`create`, `stop`, `resume`, `status`, `monitor`, `delegate-job`, `loop`, `orc-onboard`).
|
||||
- **Item 4 (lockstep test)**: ran `tests/test_version_consistency.py` myself — `2 passed`.
|
||||
- **Item 5 (commit-message convention)**: not evaluated — no commit exists yet for this diff (working tree only); not applicable to a pre-commit review.
|
||||
|
||||
## 2. Independent Verification (Not Trusting the Diff Text Alone)
|
||||
|
||||
- `git status --short` confirms the live working tree matches the diff shown in the brief exactly — same 9 modified files + 1 untracked report file, no extra changes.
|
||||
- `bash -n .agents/skills/lib.sh` — syntactically valid.
|
||||
- Grepped the whole of `VERSIONS.md` for residual `3.1.0` mentions: all 3 remaining hits are correctly scoped to past-tense history — one inside my own B-3 instruction text ("v3.1.0 상태에서 ... 실행 전"), and two inside the preserved `### v3.1.0` historical changelog section itself. No stray current-version leakage.
|
||||
- Ran the full test suite myself (not the diff's own claim): `439 passed in 656.03s (0:10:56)`, exit code 0. Zero regressions.
|
||||
|
||||
## 3. Finding: Silent Content Loss in the "핵심 아키텍처" Bullet List (유실)
|
||||
|
||||
**`VERSIONS.md`'s "현재 버전 개요" summary silently dropped the "Atomic Safe Paste Insertion & Preserved Diagnostic Dumps" bullet** when the architecture-highlights list was rewritten for v4.0.0. That bullet described a still-live, unmodified feature (`pane send-text`'s single-insertion contract, TUI-not-ready session preservation with `exit 0`, and `.mam/diagnostics/` dump generation on `create_session.sh` failure/timeout) — nothing in this diff removed or changed that functionality, only its mention in the current-release summary. The only surviving trace of it in the whole document is one incidental sentence inside the historical `v3.1.0` changelog body (line 113), not the current-release overview.
|
||||
|
||||
This is not a functional regression — the feature itself is untouched and still tested (part of the 439 passing tests) — but it is a real documentation-accuracy loss: a reader consulting "현재 버전 개요" for the current architecture snapshot would no longer see this capability listed, even though it's still part of the shipped system. **Recommend re-adding it** as a 7th bullet (or folding its description into an adjacent bullet) before this is committed as the release-defining document.
|
||||
|
||||
**Severity: Low-Moderate, not blocking.** Doc-only, no runtime impact, easily fixed in a follow-up edit.
|
||||
|
||||
## 4. Other Findings
|
||||
|
||||
### 4.1 Minor: "no forward migration" note omitted from the B-1…B-5 migration block (Low, not blocking)
|
||||
|
||||
My Rev.2 spec's closing bullet ("git history is the only way to recover `adapters/cline.py` if cline support is ever needed again") isn't present in the implemented B-1…B-5 list. Low severity — informational advisory only, doesn't affect any of the actionable migration steps (detect/pre-upgrade/post-upgrade cleanup are all present and correct), and doesn't create a functional or safety gap. Worth a follow-up touch-up, not blocking.
|
||||
|
||||
## 5. Test Results
|
||||
|
||||
```
|
||||
.venv/bin/python -m pytest tests/test_version_consistency.py -q
|
||||
→ 2 passed
|
||||
|
||||
.venv/bin/python -m pytest tests/ -q
|
||||
→ 439 passed in 656.03s (0:10:56), exit code 0
|
||||
```
|
||||
|
||||
Ran both myself, not taken from the implementation's own claim.
|
||||
|
||||
## 6. Verdict
|
||||
|
||||
Every load-bearing item in my Rev.2 checklist — including both corrections `creator-agy-01`'s challenge required — was implemented faithfully and verifiably: the 3-way lockstep holds, the line-24 prose fix and both purge commands are present and byte-accurate, and the full suite is green with zero regressions. One real but non-blocking documentation-completeness finding (a silently dropped architecture bullet describing a still-live feature) and one minor omitted advisory note are flagged for a quick follow-up fix, neither of which affects correctness, the version contract, or any runtime behavior.
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,37 @@
|
||||
# Review: v4.0.0 bump + version-upgrade consensus
|
||||
|
||||
- **Reviewer**: `reviewer-creator-grok-01`
|
||||
- **Job**: `fc37a38a`
|
||||
- **Artifacts**: `MAM_VERSION` / 8× `SKILL.md` / `VERSIONS.md` lockstep to `4.0.0`; `.agents/reports/version_upgrade_recommendation.md`
|
||||
|
||||
## Consensus document
|
||||
|
||||
Grok’s independent SemVer job `e0838148` (**v4.0.0**, `--agent cline` is a §8 break; hermes-only would be 3.2.0; highest-severity governs) is recorded accurately in §3. The 3/3 table, the internal-tool counter-argument rejection, and the deprecation-window miss all match what this session verified. No vote dilution.
|
||||
|
||||
Rev.2 of the recommendation (line-24 prose + orphan YAML rows) is reflected in the landed `VERSIONS.md` v4.0.0 B-1…B-4 notes.
|
||||
|
||||
## Lockstep implementation
|
||||
|
||||
| Surface | Status |
|
||||
|---|---|
|
||||
| `lib.sh` `MAM_VERSION="4.0.0"` | Met (not env-overridable) |
|
||||
| `VERSIONS.md` current header `v4.0.0` | Met |
|
||||
| Matrix prose + 8 skill cells `4.0.0` | Met (the line-24 sentence Rev.2 called out is updated) |
|
||||
| 8 `SKILL.md` frontmatters `version: 4.0.0` | Met (create/stop/resume/status/monitor/delegate-job/loop/orc-onboard) |
|
||||
| Historical `v3.1.0` changelog left at `MAM_VERSION="3.1.0"` | Correct |
|
||||
|
||||
`pytest tests/test_version_consistency.py` → **2 passed**.
|
||||
|
||||
v4.0.0 changelog states the actual break (`--agent cline` → exit 2), detection grep, pre-upgrade stop+purge, post-upgrade `atomic_dump_yaml` prune, and hermes additive work. That matches §6 of the recommendation.
|
||||
|
||||
## Residual nits (do not block)
|
||||
|
||||
1. **B-3 command spelling.** `multi-agent-mux-stop --session …` is not a PATH binary. Real entry is `bash .agents/skills/multi-agent-mux-stop/scripts/stop_session.sh` (as `deploy/INSTALL.md` already documents). Flags `--purge-conversation --yes --agent cline` are correct for v3.1.0-era stop.
|
||||
2. The recommendation file still headers “Current version: v3.1.0” as a planning snapshot. Fine as an archived consensus; it is not the runtime source of truth.
|
||||
3. “~14 releases since v1.2.0” is loose counting. Not load-bearing.
|
||||
|
||||
Grok’s **v4.0.0** recommendation is unchanged. No `[ESCALATE: PLANNER]`.
|
||||
|
||||
---
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,41 @@
|
||||
# 📋 Code Review Report — v4.0.0 Version Bump & Consensus Report (Job 47e488ee)
|
||||
|
||||
- **Reviewer**: `reviewer-hermes-01` (role: reviewer) — note: I am also a participant in the reviewed consensus (my independent SemVer opinion was job `baeb9f1c`, which recommended v4.0.0); this review judges the *implementation* of the bump and the *fidelity* of the consensus synthesis.
|
||||
- **Reviewed diff**: 10 files, +59/−24 — the 3-way version lockstep bump to v4.0.0 (lib.sh `MAM_VERSION`, 8 SKILL.md frontmatters, VERSIONS.md) plus the new consensus document `.agents/reports/version_upgrade_recommendation.md` (Rev.2, 94 lines)
|
||||
- **Method**: lockstep verification, full-diff read, live verification of the B-4 prune-command's claimed mechanics against `atomic_dump_yaml`, lockstep test execution, full suite run. No code modified by this review.
|
||||
|
||||
---
|
||||
|
||||
## 1. Verification Evidence
|
||||
|
||||
| # | Check | Result |
|
||||
|---|---|---|
|
||||
| 1 | **Full test suite** | ✅ **439 passed, 0 failures** (604.8 s) |
|
||||
| 2 | **Lockstep tests** (`tests/test_version_consistency.py`) | ✅ `test_three_way_version_lockstep` PASSED, `test_mam_version_is_not_env_overridable` PASSED — the release gate the consensus §6.4 required is green |
|
||||
| 3 | 3-way lockstep live state | ✅ `lib.sh:32 MAM_VERSION="4.0.0"`; all 8 SKILL.md frontmatters `version: 4.0.0`; `VERSIONS.md` header (L9) `v4.0.0`; skill matrix 8 rows all `4.0.0`; **L25 prose sentence updated too** ("...v4.0.0으로 동기화되어 배포됩니다") — the exact line the consensus Rev.2 changelog identified as not regex-covered by the lockstep test, i.e. the known desync trap was manually closed |
|
||||
| 4 | New `v4.0.0` changelog section | ✅ Present with the project's `⚠️ 동작 변경 및 마이그레이션 안내` convention (B-1…B-5), following the v3.1.0 precedent format |
|
||||
| 5 | B-4 prune command technical accuracy | ✅ Verified end-to-end against live code: `atomic_dump_yaml <yaml> <<MUT ... MUT` matches the real signature (`lib.sh:1517–1549` — first arg `yaml_path`, mutation read from stdin via `$(cat)` into `AGENT_SESSIONS_MUTATION`); the mutation body executes at module scope inside `atomic_dump_yaml_main()` (atomic_yaml.py:122–125) where `d` is pre-populated from the SQLite-backed state and the mutated `d` is read back from the namespace after `exec` — so the list-comprehension filter in B-4 is exactly the supported mutation idiom. `flock` + `BEGIN IMMEDIATE` + WAL/NFS fallback confirmed at atomic_yaml.py:56–90 |
|
||||
| 6 | B-4's prune filter correctness | ✅ `s.get('agent') != 'cline' and not str(s.get('name','')).endswith('-cline')` — matches `row_agent`/`agent_of_row` semantics (explicit agent field first, then name suffix); the `endswith('-cline')` arm correctly mirrors `derive_session_name`'s `-<role>-<agent>` convention without colliding with the other 4 agent suffixes |
|
||||
| 7 | B-2 detection grep | ✅ Pattern `agent: cline\|cline_conversation_id_own\|--agent cline` covers the YAML row key, the own-id key, and the CLI flag — the three surviving artifact classes after the removal |
|
||||
| 8 | Consensus document fidelity | ✅ Spot-checked against my own archived opinion (`.mam/jobs/baeb9f1c/hermes-reports/report-final.md`): §3 table's summary of my argument ("no deprecation window… MINOR-for-deprecation escape hatch never used; v1.2.0-precedent mirroring") is an accurate paraphrase, not a distortion; job ID `baeb9f1c` correctly cited |
|
||||
| 9 | Consensus doc's process claims | ✅ The three cited participant jobs (`e0838148`, `baeb9f1c`, `05d8432b`) and the removal review job `20d45d12` all exist in `.mam/jobs/` with briefs/reports; the Rev.2 changelog's two accepted challenge points (line-24 prose, orphaned-row purge) both verified actionable against live code as described |
|
||||
| 10 | No other version literals | ✅ Remaining `3.1.0` mentions in VERSIONS.md are all inside the historical v3.1.0 changelog entry (correct — history must stay frozen); no other file hardcodes the version |
|
||||
|
||||
## 2. Findings
|
||||
|
||||
No blocking defects. Non-blocking observations:
|
||||
|
||||
1. **[Low — cosmetic]** In the new VERSIONS.md v4.0.0 entry, the "핵심 아키텍처" bullet list retains the 2-Tier/Modal-Contract/Fail-Closed bullets that were already the v3.1.0 highlights alongside the two new v4.0.0 bullets. Defensible as "current architecture" (not a per-release diff), and the two v4.0.0-specific bullets are listed first, but a reader skimming the section could attribute v3.1.0 features to v4.0.0. Cosmetic; no action required.
|
||||
2. **[Info]** B-3's pre-upgrade purge example (`multi-agent-mux-stop --agent cline --purge-conversation --yes`) is correctly ordered *before* `deploy/update.sh` in the doc — this ordering matters and the consensus doc's Rev.2 analysis (pre-upgrade purge is the only artifact-aware window) is faithfully reflected.
|
||||
3. **[Info]** B-4's heredoc prune does not delete on-disk cline conversation artifacts — the document says so explicitly ("orphaned, not corrupting anything") — an honest scoping statement, and the right trade given no artifact-resolution path exists post-removal.
|
||||
4. **[Info]** The consensus doc's `[VERDICT: N/A — consensus/planning artifact]` footer is consistent with how the project handled the analogous cline-deprecation consensus report.
|
||||
|
||||
## 3. Risk Assessment
|
||||
|
||||
The change surface is documentation + one runtime constant, with the lockstep test as the guardrail — and it passes. The one mechanical risk of this change class (partial lockstep update) is ruled out by both the lockstep test result and my independent live grep of all three version surfaces. The migration content (B-1…B-5) is technically accurate where I could verify it against live code (atomic_dump_yaml contract, agent_of_row behavior, stop's pre-upgrade purge window, update.sh's registry preservation). The consensus document accurately represents the three participant opinions including mine, with correct job citations and no manufactured unanimity beyond what genuinely existed (3/3 v4.0.0).
|
||||
|
||||
## 4. Verdict
|
||||
|
||||
The bump is complete, lockstep-consistent, test-verified (439/439 + both consistency tests), and the consensus document accurately synthesizes the three independent recommendations with a technically sound, verified implementation checklist. No regression, no omission found.
|
||||
|
||||
[VERDICT: PASS]
|
||||
@@ -0,0 +1,94 @@
|
||||
# 📦 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 111–166) — 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:32`** — `MAM_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:
|
||||
```bash
|
||||
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.0` → `version: 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]
|
||||
Reference in New Issue
Block a user