@yemi33/minions 0.1.1886 → 0.1.1887

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1624,8 +1624,22 @@ async function updatePrAfterReview(agentId, pr, project, config, resultSummary,
1624
1624
  if (!postReviewStatus) {
1625
1625
  const verdict = reviewVerdictFromCompletion(structuredCompletion) || parseReviewVerdict(resultSummary);
1626
1626
  if (verdict) {
1627
- postReviewStatus = verdict;
1628
- log('info', `Read review verdict from agent completion for ${reviewPr.id}: ${verdict}`);
1627
+ // P-e1c8a9d2 — Refuse self-review APPROVE: an agent approving their own PR
1628
+ // is meaningless self-promotion (PR #1867/#1868/#2253 all shipped this way).
1629
+ // Treat it like a bailout — don't apply the verdict (so reviewStatus stays
1630
+ // 'waiting' and the engine routes the next review to a different agent on
1631
+ // the next dispatch tick). The verdict-gate at runPostCompletionHooks sees
1632
+ // the verdict and skips the no-verdict retry path, so _retryCount stays
1633
+ // unchanged. REQUEST_CHANGES from a self-author is still accepted — a
1634
+ // self-author flagging issues on their own PR is harmless and useful.
1635
+ const reviewerLower = String(agentId || '').toLowerCase();
1636
+ const authorLower = String(reviewPr.agent || '').toLowerCase();
1637
+ if (verdict === 'approved' && reviewerLower && authorLower && reviewerLower === authorLower) {
1638
+ log('warn', `review verdict rejected: self-review (reviewer=${reviewerName}, author=${reviewPr.agent})`);
1639
+ } else {
1640
+ postReviewStatus = verdict;
1641
+ log('info', `Read review verdict from agent completion for ${reviewPr.id}: ${verdict}`);
1642
+ }
1629
1643
  }
1630
1644
  }
1631
1645
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1886",
3
+ "version": "0.1.1887",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"
@@ -37,7 +37,7 @@ After the requested exploration succeeds, write your findings to `{{team_root}}/
37
37
  - **Patterns**: conventions and patterns found
38
38
  - **Dependencies**: what depends on what
39
39
  - **Gaps**: anything missing, broken, or unclear
40
- - **Recommendations**: suggestions for the team
40
+ - **Recommended next dispatches**: one bullet per follow-up using the format `<work-type> <agent> — <one-line scope>` (e.g., `implement ralph — wire X helper into Y caller`, `fix lambert — guard Z against null project`). If you have nothing concrete to recommend, the section must read exactly `Recommended next dispatches: none — no follow-up needed`.
41
41
  - **Source References**: for EVERY finding, include the source — file paths, line numbers, PR URLs, API endpoints, config keys. Format: `(source: path/to/file.ts:42)` or `(source: PR-12345)`. This is critical — other agents and humans need to verify your findings.
42
42
 
43
43
  If exploration is blocked or fails before you can produce sourced findings, do **not** write an inbox note. Report the blocker in your final response instead.
@@ -31,11 +31,21 @@ Write a clear, **self-contained** meeting conclusion. Someone reading ONLY this
31
31
  - What the fix should be (concrete: "change X to Y", "add guard in Z")
32
32
  - Estimated complexity (small/medium/large)
33
33
 
34
- 2. **Deferred items** — what was discussed but explicitly deprioritized, and why
34
+ 2. **Overrules** — required section. Document every priority where you (the synthesizer) chose differently than a participant argued in debate. Each bullet must take this exact form:
35
35
 
36
- 3. **Unresolved disagreements** where positions still differ (if any)
36
+ - `Overruled <participant>'s claim that <X>; chose <Y> because <reason cited from debate or source file>`
37
37
 
38
- 4. **Open questions for human**what needs human input before proceeding (if any)
38
+ The cited reason must be a concrete pointer (debate quote, finding ID, or `path/to/file.ext:line`), not a paraphrase. If the synthesizer truly overruled nothing every priority above converged in debate the section must read exactly:
39
+
40
+ - `Overrules: none — every priority converged in debate`
41
+
42
+ Do NOT omit this section. An empty `Overrules:` (without the escape-hatch sentence) is not acceptable.
43
+
44
+ 3. **Deferred items** — what was discussed but explicitly deprioritized, and why
45
+
46
+ 4. **Unresolved disagreements** — where positions still differ (if any)
47
+
48
+ 5. **Open questions for human** — what needs human input before proceeding (if any)
39
49
 
40
50
  **Be concrete, not vague.** Do NOT write "fix 3 bugs" — write which 3 bugs, in which files, with what fix. The conclusion is used as input to create an implementation plan, so it must contain enough detail to act on without re-reading the entire meeting.
41
51
 
@@ -25,6 +25,10 @@ Investigate this topic from your unique perspective as {{agent_role}}.
25
25
 
26
26
  Focus on what YOU uniquely bring to this discussion. Be thorough but concise.
27
27
 
28
+ ### Evidence rule for code claims
29
+
30
+ Every claim about repository code — a bug, a regression, a missing guard, a test gap, a behavior assertion — must include a concrete citation: a `path/to/file.ext:line` reference (or range like `path:120-145`) for current code, or a `git show <sha>:<path>` hunk reference when the claim is about a specific commit or historical state. Claims you cannot back with such a reference must be tagged `[unverified]` inline (e.g., "the dispatch loop ignores `paused` items `[unverified]`") so debaters in the next round can call them out and either verify or discard them. Do not paraphrase code from memory and present it as fact; if you have not opened the file in this session, it is `[unverified]`.
31
+
28
32
  ## Output Format
29
33
 
30
34
  Write your findings as a clear markdown document. Start with your key conclusion, then supporting evidence.
package/playbooks/plan.md CHANGED
@@ -42,6 +42,7 @@ A user has described a feature they want built. Your job is to create a detailed
42
42
  - Order by dependency (foundations first)
43
43
  - Estimate complexity: `small` (1 file), `medium` (2-5 files), `large` (6+ files)
44
44
  - Each item should be independently testable
45
+ - Also list ideas you considered and chose **not** to include — these go in the required `## Rejected items` section so scope is declared explicitly
45
46
 
46
47
  ### 5. Write the Plan
47
48
 
@@ -65,19 +66,24 @@ What exists today, what needs to change, key files involved.
65
66
  ## Approach
66
67
  High-level design decisions and rationale.
67
68
 
68
- ## Work Breakdown
69
+ ## Work items
69
70
 
70
- ### Phase 1: Foundation
71
- 1. **Item name** (complexity: small/medium/large)
72
- - What to build
73
- - Files to create/modify
74
- - Acceptance criteria
71
+ Flat numbered list, ordered by dependency in prose (not by phase). Use phases only when items genuinely block each other across PR boundaries; otherwise the plan is a flat numbered list.
75
72
 
76
- ### Phase 2: Core Implementation
77
- 2. **Item name** ...
73
+ ### 1. <item name> (complexity: small/medium/large)
74
+ - What to build
75
+ - Files to create/modify
76
+ - Acceptance criteria
78
77
 
79
- ### Phase 3: Polish & Integration
80
- 3. **Item name** ...
78
+ ### 2. <item name> (complexity: small/medium/large)
79
+ - ...
80
+
81
+ ## Rejected items
82
+
83
+ Required section. Declare scope by listing ideas you considered and chose not to include, one line per rejected item with the reason.
84
+
85
+ - <rejected idea> — <one-line reason>
86
+ - <rejected idea> — <one-line reason>
81
87
 
82
88
  ## Risks & Open Questions
83
89
  - Risk or question that needs user input
@@ -54,7 +54,6 @@ Use subagents only for genuinely parallel, independent tasks (e.g., reviewing un
54
54
 
55
55
  8. If the code is genuinely ready:
56
56
  - Verdict: **APPROVE**
57
- - Note any minor non-blocking suggestions
58
57
  - Do not request changes for nits, speculative edge cases, or unrelated improvements
59
58
 
60
59
  ## Post Review — Submit your verdict
@@ -79,10 +78,14 @@ Automated checks:
79
78
  - `<command>`: pass/fail/skipped — short result or reason
80
79
 
81
80
  Blocking issues:
82
- - None, or `path:line`issue and required fix
81
+ - `path:line — failure mode required fix`
82
+ - (one bullet per blocking finding; the literal string `None` is the only allowed empty form)
83
83
 
84
- Non-blocking suggestions:
85
- - None, or `path:line` suggestion
84
+ Minimum diff to ship: <one-line description of the smallest change that would flip this verdict to APPROVE>
85
+ (REQUEST_CHANGES only omit this line on APPROVE verdicts)
86
+
87
+ Non-blocking observations: None
88
+ - (default to `None`; if you list any, each must be tied to an existing diff line in the form `path:line — observation`)
86
89
  ```
87
90
 
88
91
  After running the command, confirm it succeeded (check the command output for errors). If it fails, retry once.