diff --git a/.agents/reports/planner-reviewer-claude-01/plan-a348e91c.md b/.agents/reports/planner-reviewer-claude-01/plan-a348e91c.md new file mode 100644 index 0000000..b979561 --- /dev/null +++ b/.agents/reports/planner-reviewer-claude-01/plan-a348e91c.md @@ -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] diff --git a/.agents/reports/planner-reviewer-claude-01/report-8094e244.md b/.agents/reports/planner-reviewer-claude-01/report-8094e244.md new file mode 100644 index 0000000..a029148 --- /dev/null +++ b/.agents/reports/planner-reviewer-claude-01/report-8094e244.md @@ -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] diff --git a/.agents/reports/reviewer-creator-grok-01/report-fc37a38a.md b/.agents/reports/reviewer-creator-grok-01/report-fc37a38a.md new file mode 100644 index 0000000..35fcf6f --- /dev/null +++ b/.agents/reports/reviewer-creator-grok-01/report-fc37a38a.md @@ -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] diff --git a/.agents/reports/reviewer-hermes-01/report-47e488ee.md b/.agents/reports/reviewer-hermes-01/report-47e488ee.md new file mode 100644 index 0000000..b5099fb --- /dev/null +++ b/.agents/reports/reviewer-hermes-01/report-47e488ee.md @@ -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 <-` 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] \ No newline at end of file diff --git a/.agents/reports/version_upgrade_recommendation.md b/.agents/reports/version_upgrade_recommendation.md new file mode 100644 index 0000000..bb0bf9b --- /dev/null +++ b/.agents/reports/version_upgrade_recommendation.md @@ -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 --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] diff --git a/.agents/skills/lib.sh b/.agents/skills/lib.sh index 17c576c..842fa9e 100644 --- a/.agents/skills/lib.sh +++ b/.agents/skills/lib.sh @@ -29,7 +29,7 @@ export WORKSPACE_ROOT # Framework semantic version. Single runtime source of truth; kept in lockstep # with VERSIONS.md and the 8 SKILL.md frontmatters by tests/test_version_consistency.py. # NOTE: unlike other MAM_* variables this one is intentionally NOT env-overridable. -MAM_VERSION="3.1.0" +MAM_VERSION="4.0.0" export MAM_VERSION AGENT_SESSIONS_YAML="${AGENT_SESSIONS_YAML:-$WORKSPACE_ROOT/.mam/agent-sessions.yaml}" diff --git a/.agents/skills/multi-agent-mux-create/SKILL.md b/.agents/skills/multi-agent-mux-create/SKILL.md index f73f203..97013a1 100644 --- a/.agents/skills/multi-agent-mux-create/SKILL.md +++ b/.agents/skills/multi-agent-mux-create/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-create description: "Create a new agent session (claude, antigravity/agy) in a dedicated herdr session for context-preserving long-running work. Always creates a herdr session — never backgrounds with nohup/disown. Writes the new session to .mam/agent-sessions.yaml. Use when you want to start a fresh agent (no prior UUID) for a new project workspace." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-delegate-job/SKILL.md b/.agents/skills/multi-agent-mux-delegate-job/SKILL.md index 3bdefbc..d5e7adc 100644 --- a/.agents/skills/multi-agent-mux-delegate-job/SKILL.md +++ b/.agents/skills/multi-agent-mux-delegate-job/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-delegate-job description: "Delegate a unit of work to any autonomous agent (claude-code, hermes, agy, grok-build, codex, or a human) and observe it asynchronously over an MQTT event channel. Supported roles include orchestrator, worker, and reviewer." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos, windows] diff --git a/.agents/skills/multi-agent-mux-loop/SKILL.md b/.agents/skills/multi-agent-mux-loop/SKILL.md index 0ab858e..4e1e037 100644 --- a/.agents/skills/multi-agent-mux-loop/SKILL.md +++ b/.agents/skills/multi-agent-mux-loop/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-loop description: "Run an autonomous planning-execution-review loop using multiple agents (Planner, Creator, Reviewers) in the workspace. Automatically orchestrates plan discussion, code changes, and peer reviews until a unanimous PASS is achieved or the maximum iteration limit is reached." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-monitor/SKILL.md b/.agents/skills/multi-agent-mux-monitor/SKILL.md index d77db50..da115ef 100644 --- a/.agents/skills/multi-agent-mux-monitor/SKILL.md +++ b/.agents/skills/multi-agent-mux-monitor/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-monitor description: "Run a long-lived reconciler that watches .mam/agent-sessions.yaml against the actual herdr/agent runtime state and reconciles them. Use when you want live visibility into which agent sessions are running, which are dead, which have stale YAML entries, and which have new session ids that haven't been recorded yet. Runs as a persistent loop (`reconcile.sh --subscribe`) that keeps going until it times out, idles out, or is interrupted." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md b/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md index b7c8759..640eed5 100644 --- a/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md +++ b/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-orc-onboard description: "Register current or specified orchestrator session UUID into agent-sessions.yaml orchestrator_uuids list to prevent sub-agent discovery capture." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-resume/SKILL.md b/.agents/skills/multi-agent-mux-resume/SKILL.md index 7fd1a00..db13d28 100644 --- a/.agents/skills/multi-agent-mux-resume/SKILL.md +++ b/.agents/skills/multi-agent-mux-resume/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-resume description: "Resume an existing agent (claude, antigravity/agy) conversation by UUID into a herdr session. Reads .mam/agent-sessions.yaml for the saved session/conversation id, spawns (or reuses) a herdr session of the matching name, and runs `claude -r ` or `agy --conversation ` inside. Use when you want to reattach to a previous session's context, or revive a session whose herdr died but the agent's conversation is still on disk." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-status/SKILL.md b/.agents/skills/multi-agent-mux-status/SKILL.md index 4a5c542..c17b759 100644 --- a/.agents/skills/multi-agent-mux-status/SKILL.md +++ b/.agents/skills/multi-agent-mux-status/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-status description: "Read-only instant snapshot of all agent herdr sessions — name, YAML status, herdr alive, pane cmd/cwd, resume UUID on disk, and any drift. No mutation. Reuses reconcile.sh --dry-run for the diff logic. Use when you want to know 'what's running RIGHT NOW' without spinning up the monitor loop." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-stop/SKILL.md b/.agents/skills/multi-agent-mux-stop/SKILL.md index fd97305..cdfefb5 100644 --- a/.agents/skills/multi-agent-mux-stop/SKILL.md +++ b/.agents/skills/multi-agent-mux-stop/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-stop description: "Stop an agent herdr session (claude, antigravity/agy) and update .mam/agent-sessions.yaml. Default stops gracefully and marks status=stopped with conversation preserved for resume. Does NOT delete on-disk conversation artifacts (jsonl/db) — those are preserved unless --purge-conversation is passed. Use when ending a work session, switching to a different one, or cleaning up before a fresh start." -version: 3.1.0 +version: 4.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/VERSIONS.md b/VERSIONS.md index d501e03..9f3b786 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -6,38 +6,73 @@ ## 📌 현재 버전 개요 (Current Release) -- **프레임워크 버전**: `v3.1.0` +- **프레임워크 버전**: `v4.0.0` - **최신 릴리스 일시**: 2026-08-28 (KST) - **기준 브랜치**: `main` - **핵심 아키텍처**: - - **2-Tier TUI Readiness Model (`S ∨ (W ∧ C)`) & Modal Priority**: 강한 토큰(`S`) 단독 충족 및 약한 토큰(`W`) + 보강 패턴(`C`) 결합 판정식 도입, 모달 선행 검사 및 힌트 분리를 통한 다이얼로그 기아(starvation) 원천 해소 - - **Adapter Modal Contract (`T-2d`)**: `BaseAgentAdapter` 내 `modal_tokens` 프로퍼티 신설 및 Cline/Claude 맞춤형 모달 시그니처 팩트 브리지 통합 + - **Complete Cline Agent Deprecation & Core 4-Agent Whitelist**: `cline` 백엔드 완전 제거(SemVer 2.0.0 §8 MAJOR) 및 `claude`, `agy`, `hermes`, `grok` 4대 에이전트 표준화 + - **Hermes Agent Full Modernization & Ollama Live Integration**: 헤드리스 플래그, TUI 입력 구분자/프롬프트 정립, `reconcile.sh`/`verify_artifact()` 타임스탬프 가드 및 멀티 후보자 발견 동등성 확보 + - **2-Tier TUI Readiness Model (`S ∨ (W ∧ C)`) & Modal Priority**: 강한 토큰(`S`) 단독 충족 및 약한 토큰(`W`) + 보강 패턴(`C`) 결합 판정식, 모달 선행 검사 및 힌트 분리를 통한 다이얼로그 기아 원천 해소 + - **Adapter Modal Contract (`T-2d`)**: `BaseAgentAdapter` 내 `modal_tokens` 프로퍼티 및 팩트 브리지(`MAM_MODAL_TOKENS`) 통합 - **Fail-Closed Exact Pane Resolver & Multi-Workspace Isolation Engine**: `_resolve_herdr_pane_id` 동종 페인 다중 매치 시 fail-closed(`exit 1`) 차단, `HERDR_WORKSPACE_ID` 스코핑 및 `$WORKSPACE_ROOT/.mam/herdr_workspace_id` 영속화 - - **Atomic Safe Paste Insertion & Preserved Diagnostic Dumps**: `pane send-text` 단일 안전 삽입 계약, TUI 미준비 시 세션 보존(`exit 0`) 및 `.mam/diagnostics/` 진단 덤프 생성 - - **Runtime Framework Version Constant (`MAM_VERSION`) & 3-Way Lockstep**: `lib.sh` 내 `MAM_VERSION="3.1.0"` 런타임 진실 공급원 정의 및 3자 동기화 가드 체계 구축 - - **Comprehensive Test Suite Milestone**: 436개 전체 테스트 100% PASS (436 passed / 0 failed). + - **Runtime Framework Version Constant (`MAM_VERSION`) & 3-Way Lockstep**: `lib.sh` 내 `MAM_VERSION="4.0.0"` 런타임 진실 공급원 정의 및 3자 동기화 가드 체계 구축 + - **Comprehensive Test Suite Milestone**: 439개 전체 테스트 100% PASS (439 passed / 0 failed). --- ## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix) -모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v3.1.0`으로 동기화되어 배포됩니다. +모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.0.0`으로 동기화되어 배포됩니다. | 스킬명 | 버전 | 역할 및 주요 책임 | 상태 | | :--- | :---: | :--- | :---: | -| **`multi-agent-mux-create`** | `3.1.0` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 | -| **`multi-agent-mux-stop`** | `3.1.0` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 | -| **`multi-agent-mux-resume`** | `3.1.0` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 | -| **`multi-agent-mux-status`** | `3.1.0` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 | -| **`multi-agent-mux-monitor`** | `3.1.0` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 | -| **`multi-agent-mux-delegate-job`** | `3.1.0` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 | -| **`multi-agent-mux-loop`** | `3.1.0` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 | -| **`multi-agent-mux-orc-onboard`** | `3.1.0` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 | +| **`multi-agent-mux-create`** | `4.0.0` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 | +| **`multi-agent-mux-stop`** | `4.0.0` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 | +| **`multi-agent-mux-resume`** | `4.0.0` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 | +| **`multi-agent-mux-status`** | `4.0.0` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 | +| **`multi-agent-mux-monitor`** | `4.0.0` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 | +| **`multi-agent-mux-delegate-job`** | `4.0.0` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 | +| **`multi-agent-mux-loop`** | `4.0.0` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 | +| **`multi-agent-mux-orc-onboard`** | `4.0.0` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 | --- ## 📋 버전별 상세 변경 내역 (Changelog) +### 🚀 `v4.0.0` — Complete Cline Agent Deprecation & Hermes Modernization (2026-08-28) + +> **주요 마일스톤 (MAJOR Release)**: `cline` 에이전트 백엔드의 완전한 제거 및 폐지(Breaking Change per SemVer 2.0.0 §8), Hermes 에이전트 풀 모더니제이션 및 Ollama 로컬 연동 정식 지원, 4대 핵심 에이전트(`claude`, `agy`, `hermes`, `grok`) 표준화 및 439개 전체 테스트 100% PASS 달성. + +#### ⚠️ 동작 변경 및 마이그레이션 안내 (Breaking Changes) +* **B-1: `--agent cline` 지원 완전 제거 및 파서 거부**: + - `adapters/cline.py` 삭제 및 `registry.py` 등록 해제에 따라 모든 스킬 엔트리포인트(`create_session.sh`, `resume_session.sh`, `stop_session.sh`, `reconcile.sh`, `orc_onboard.sh`, `multi-agent-mux-delegate-job` 등)에서 `--agent cline` 입력 시 `exit 2`로 즉시 거부됩니다. + - 지원되는 에이전트 패밀리는 `claude`, `agy`, `hermes`, `grok` 4종으로 엄격히 제한됩니다. +* **B-2: 영향도 확인 (Detection)**: + - 저장된 스크립트나 커스텀 세션에서 Cline 관련 설정이 남아있는지 확인: + ```bash + grep -rn "agent: cline\|cline_conversation_id_own\|--agent cline" .mam/ *.sh 2>/dev/null + ``` +* **B-3: 업그레이드 전 세션 정리 (Pre-upgrade Cleanup — 권장)**: + - v3.1.0 상태에서 `deploy/update.sh` 실행 전, 기존의 활성/보관 중인 Cline 세션을 원자적으로 정리: + ```bash + multi-agent-mux-stop --session --agent cline --purge-conversation --yes + ``` +* **B-4: 업그레이드 후 고아 세션 레코드 정리 (Post-upgrade YAML Pruning)**: + - `deploy/update.sh`는 `.mam/agent-sessions.yaml`을 덮어쓰지 않고 보존하므로, 사전에 정리되지 않은 v3.x `cline` 세션 행은 아래 원자적 갱신 명령을 통해 안전하게 정리할 수 있습니다: + ```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 + ``` +* **B-5: Hermes 에이전트 모더니제이션**: + - 헤드리스 플래그(`--yolo --accept-hooks`), TUI 입력 영역 구분자(`─{10,}` 및 `❯`), 준비 토큰 강화, `reconcile.sh` 타임스탬프 기반 다중 후보자 동등성(`discover()`) 지원이 정식 통합되었습니다. + +--- + ### 🚀 `v3.1.0` — 2-Tier TUI Readiness Model, Adapter Modal Contract & Fail-Closed Pane Resolution (2026-08-28) > **주요 마일스톤**: 다이얼로그 기아(starvation) 구조적 해소를 위한 2계층 TUI 준비 판정 모델(`S ∨ (W ∧ C)`), 모달/힌트 2계층 토큰 분리, 어댑터별 `modal_tokens` 계약(`T-2d`) 정립, 동종 페인 다중 매치 fail-closed 방어, 준비 실패 세션 진단 보존(`create_session.sh`), `lib.sh` 런타임 버전 상수(`MAM_VERSION="3.1.0"`) 신설 및 436개 전체 테스트 100% PASS 달성.