refactor: remove orphaned Self-MoA and Debate-Arbiter from MAP (#230)#240
Merged
Conversation
Both the Self-MoA multi-variant pattern (3×Actor → 3×Monitor → Synthesizer → final Monitor) and the Debate-Arbiter cross-evaluation pattern were documented across ARCHITECTURE.md, USAGE.md, INSTALL.md and the plugin manifests but never wired into any skill: no /map-* surface dispatched the synthesizer or debate-arbiter agents, no --self-moa flag was ever parsed, and there was no /map-debate skill. They were dead weight plus a doc-vs-behavior contradiction. Removed: - synthesizer.md and debate-arbiter.md agent templates (jinja source + both rendered trees) - Actor "Self-MoA Support" and Monitor "Self-MoA Output Extension" prompt sections - debate-arbiter / synthesizer entries from agent_mcp_mappings (mcp.py) - all Self-MoA / Debate documentation in ARCHITECTURE.md, USAGE.md, INSTALL.md, WORKFLOW_FLOW.md and the plugin manifests Shipped agent roster is now 9 (was advertised as 11): TaskDecomposer, Actor, Monitor, Predictor, Evaluator, Reflector, DocumentationReviewer, Research-Agent, Final-Verifier. No runtime behavior changes — nothing dispatched these agents. Historical planning/research docs that mention the concept are left as dated records. make check green (ruff, mypy, pyright, 2568 tests, check-render).
azalio
added a commit
that referenced
this pull request
Jun 19, 2026
…off (#230) (#241) Document the explicit criterion in docs/ARCHITECTURE.md: keep a separate sub-agent ONLY when it adds an independent/adversarial perspective; collapse any pure-relay hop (a context that only paraphrases a prior agent's output, emitting no new verdict) into its caller. It is a substance rule, not a wiring rule. Audit (ground truth = subagent_type="…" dispatch sites in the skill jinja sources, not docs): all 8 pipeline-dispatched agents emit independent verdicts and none is a relay. The only relay hops the doctrine condemns — the Self-MoA synthesizer/debate-arbiter — were already collapsed in #240. Resolve the orphaned documentation-reviewer (zero skill dispatch sites) as a deliberate keep: unlike the removed relays it emits a unique, non-relay docs-vs-source verdict, so it is retained as an optional, user-dispatchable agent and now self-declares a "Dispatch status:" annotation. Add tests/test_agent_dispatch_audit.py to enforce the invariant going forward: any agent shipped with no dispatch site and not marked optional fails the gate, preventing a silent orphan from recurring. Closes #230
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Removes the Self-MoA multi-variant pattern and the Debate-Arbiter cross-evaluation pattern from MAP entirely.
Why
The agent-boundary audit for #230 found both patterns were documented but never wired into any skill:
/map-*surface dispatched thesynthesizerordebate-arbiteragents.--self-moaflag was ever parsed (themap-efficientskill has zero Self-MoA logic)./map-debateskill at all.They were dead weight (~2000 lines of orphaned agent prompts × rendered trees) plus a doc-vs-behavior contradiction:
ARCHITECTURE.mddescribed aDEBATEslash surface and a3×Actor → 3×Monitor → Synthesizer → final MonitorSelf-MoA chain that no code runs.Changed
synthesizer.md+debate-arbiter.mdagent templates (jinja source + both rendered trees).debate-arbiter/synthesizerentries fromagent_mcp_mappings(src/mapify_cli/config/mcp.py).ARCHITECTURE.md,USAGE.md,INSTALL.md,WORKFLOW_FLOW.mdand the plugin manifests (.claude-plugin/*); renumbered workflow + agent sections; agent count 11 → 9.tests/test_mapify_cli.pyfallback-generator docstring.Shipped agent roster is now 9: TaskDecomposer, Actor, Monitor, Predictor, Evaluator, Reflector, DocumentationReviewer, Research-Agent, Final-Verifier.
No runtime behavior changes — nothing dispatched these agents, so there is no quality/eval surface to regress (hence no llm-council consult needed). Historical planning/research docs that mention the concept are intentionally left as dated records.
Testing
make checkgreen:ruff(all passed),mypy(no issues, 61 files),pyright, 2568 tests passed / 3 skipped,check-render(generated trees match source).Part of #230
🤖 Generated with Claude Code