release(v4.6.0): bump framework and eight skills to 4.6.0 in lockstep; archive PR #22 merge-side reviews
Issue #21 phase-1 prerequisites (PR #22) add loop runner options and the
control-plane module: MINOR. VERSIONS.md gains the v4.6.0 entry, the
archived design reviews lose their markdown trailing whitespace so
`git diff --check` is clean, and the three merge-side PASS reports
(claude, agy, codex @ 4a81d15) are archived under .agents/reports/.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
4a81d15d95
commit
d34b532ccf
21 files changed
+426
-38
No files matched your search
@@ -1,11 +1,11 @@
|
||||
# Design Review Report: Worktree Creator Operating Model
|
||||
|
||||
**Reviewer**: Antigravity (`herdr:reviewer-agy-01`)
|
||||
**Job ID**: `fd384d6b`
|
||||
**Target Document**: `docs/design/worktree-creator-model.md`
|
||||
**Branch / Commit**: `design/worktree-model` @ [`fe96db1`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/design-worktree-model/docs/design/worktree-creator-model.md)
|
||||
**Date**: 2026-09-14
|
||||
**Status**: Review Complete
|
||||
**Reviewer**: Antigravity (`herdr:reviewer-agy-01`)
|
||||
**Job ID**: `fd384d6b`
|
||||
**Target Document**: `docs/design/worktree-creator-model.md`
|
||||
**Branch / Commit**: `design/worktree-model` @ [`fe96db1`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/design-worktree-model/docs/design/worktree-creator-model.md)
|
||||
**Date**: 2026-09-14
|
||||
**Status**: Review Complete
|
||||
|
||||
---
|
||||
|
||||
@@ -33,9 +33,9 @@ The proposal evaluates three candidate models:
|
||||
- **Branch Switching Collision**: Resolved completely. The Creator is the *only* agent that edits source code and creates git commits. Binding the Creator's `cwd` to `$WT` (e.g. `fix/issue-20`) guarantees that commits can only land on the issue branch. Even if another process alters HEAD in `$MAIN`, the worktree's HEAD remains untouched.
|
||||
- **Parallelism**: Resolved for implementation. Multiple Creators can work simultaneously on separate worktrees without filesystem contention.
|
||||
- **Missed Failure Paths & Countermeasures**:
|
||||
1. **Reviewer Test Pollution in Worktree**: §3 states that reviewers run tests in the worktree path (`$WT`). However, standard test runners (e.g. `pytest`) create untracked artifacts (`.pytest_cache`, `__pycache__`, `.pyc`, and temporary scratch files) directly in `$WT`. This contaminates the Creator's working tree and risks accidental inclusion in git commits.
|
||||
1. **Reviewer Test Pollution in Worktree**: §3 states that reviewers run tests in the worktree path (`$WT`). However, standard test runners (e.g. `pytest`) create untracked artifacts (`.pytest_cache`, `__pycache__`, `.pyc`, and temporary scratch files) directly in `$WT`. This contaminates the Creator's working tree and risks accidental inclusion in git commits.
|
||||
*Countermeasure*: Reviewers must run verification with cache suppression (e.g., `PYTHONDONTWRITEBYTECODE=1 pytest -o cache_dir=/tmp/...`), or tests must be executed with `--basetemp` outside `$WT`.
|
||||
2. **Stale Session Rows After Worktree Deletion**: When an issue branch is merged and `$WT` is unlinked (`git worktree remove $WT`), the Creator session row in `agent-sessions.yaml` still records `pane.cwd: $WT`. If the session is resumed or reconciled later, missing paths can trigger errors.
|
||||
2. **Stale Session Rows After Worktree Deletion**: When an issue branch is merged and `$WT` is unlinked (`git worktree remove $WT`), the Creator session row in `agent-sessions.yaml` still records `pane.cwd: $WT`. If the session is resumed or reconciled later, missing paths can trigger errors.
|
||||
*Countermeasure*: Establish a documented retirement procedure (`scripts/worktree_remove.sh`) enforcing that `multi-agent-mux-stop --session <name> --purge` runs before `git worktree remove`.
|
||||
|
||||
---
|
||||
@@ -101,20 +101,20 @@ The proposal evaluates three candidate models:
|
||||
### 3.2 Prompt Injection Relative Brief Paths (§5-1)
|
||||
- **Finding**: Prompt injection templates currently hardcode relative paths (`.mam/jobs/<id>/brief.md`), which will break when an agent's `cwd` is `$WT`.
|
||||
- **Evidence**:
|
||||
- [`multi-agent-mux-delegate-job:199`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L199):
|
||||
- [`multi-agent-mux-delegate-job:199`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L199):
|
||||
`"task brief file at: .mam/jobs/$JOB_ID/brief.md. Please READ and follow .mam/jobs/$JOB_ID/brief.md"`
|
||||
- [`multi-agent-mux-delegate-job:455`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L455):
|
||||
- [`multi-agent-mux-delegate-job:455`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L455):
|
||||
`"documented in the task brief file at: .mam/jobs/$JOB_ID/brief.md"`
|
||||
- [`multi-agent-mux-delegate-job:352`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L352):
|
||||
- [`multi-agent-mux-delegate-job:352`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job#L352):
|
||||
`- **Output Report Path**: .mam/jobs/$JOB_ID/${clean_session}-reports/report-final.md`
|
||||
- **Actionable Fix**: Update these three lines to use absolute path `$REGISTRY_DIR/$JOB_ID/brief.md` and `$REGISTRY_DIR/$JOB_ID/${clean_session}-reports/report-final.md`.
|
||||
|
||||
### 3.3 Loop Runner Diff Collection & `base_commit` (§5-2)
|
||||
- **Finding**: `LoopRunner` currently evaluates git status strictly against `self.workspace_root` ($MAIN).
|
||||
- **Evidence**:
|
||||
- [`lib_py/loop/runner.py:564`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/lib_py/loop/runner.py#L564):
|
||||
- [`lib_py/loop/runner.py:564`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/lib_py/loop/runner.py#L564):
|
||||
`subprocess.run(["git", "rev-parse", "HEAD"], cwd=str(self.workspace_root))`
|
||||
- [`lib_py/loop/runner.py:402, 408`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/lib_py/loop/runner.py#L402):
|
||||
- [`lib_py/loop/runner.py:402, 408`](file:///Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.agents/skills/lib_py/loop/runner.py#L402):
|
||||
`subprocess.run(..., cwd=str(self.workspace_root))`
|
||||
- **Actionable Fix**: Introduce `--worktree <path>` (or `MAM_LOOP_WORKTREE`). Set `self.worktree_root = Path(args.worktree).resolve() if args.worktree else self.workspace_root`. Execute `git rev-parse HEAD` and `collect_changes_diff()` in `cwd=str(self.worktree_root)`.
|
||||
|
||||
|
||||
Reference in new issue
Block a user