@yemi33/minions 0.1.313 → 0.1.315
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.
- package/CHANGELOG.md +5 -1
- package/dashboard/js/render-plans.js +1 -1
- package/dashboard/js/render-prs.js +1 -1
- package/engine/ado.js +13 -0
- package/engine/github.js +13 -0
- package/package.json +1 -1
- package/playbooks/evaluate.md +0 -114
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.315 (2026-04-03)
|
|
4
|
+
|
|
5
|
+
### Fixes
|
|
6
|
+
- show reviewer names in dashboard Signed Off By column
|
|
4
7
|
|
|
5
8
|
### Other
|
|
9
|
+
- cleanup: remove evaluate.md (re-created by agents), fix stale references
|
|
6
10
|
- perf: CC message handling — debounce localStorage, cap array, batch scroll
|
|
7
11
|
|
|
8
12
|
## 0.1.312 (2026-04-03)
|
|
@@ -70,7 +70,7 @@ function derivePlanStatus(prdFile, mdFile, prdJsonStatus, workItems) {
|
|
|
70
70
|
w.sourcePlan === prdFile || w.sourcePlan === mdFile ||
|
|
71
71
|
(w.type === 'plan-to-prd' && (w.planFile === prdFile || w.planFile === mdFile))
|
|
72
72
|
);
|
|
73
|
-
const implementWi = wi.filter(w => w.type !== 'plan-to-prd' && w.type !== 'verify'
|
|
73
|
+
const implementWi = wi.filter(w => w.type !== 'plan-to-prd' && w.type !== 'verify');
|
|
74
74
|
const hasPendingPrd = wi.some(w => w.type === 'plan-to-prd' && (w.status === 'pending' || w.status === 'dispatched'));
|
|
75
75
|
const hasActiveWork = implementWi.some(w => w.status === 'pending' || w.status === 'dispatched');
|
|
76
76
|
const allDone = implementWi.length > 0 && implementWi.every(w => w.status === 'done');
|
|
@@ -24,7 +24,7 @@ function prRow(pr) {
|
|
|
24
24
|
'<td><span class="pr-agent">' + escHtml(pr.agent || '—') + '</span></td>' +
|
|
25
25
|
'<td><span class="pr-branch">' + escHtml(pr.branch || '—') + '</span></td>' +
|
|
26
26
|
'<td><span class="pr-badge ' + reviewClass + '">' + escHtml(reviewLabel) + '</span></td>' +
|
|
27
|
-
'<td>' + (sq.reviewer && sq.status !== 'waiting' ? '<span class="pr-agent" title="' + escHtml(sq.note || '') + '">' + escHtml(sq.reviewer) + '</span>' : sq.reviewer && sq.status === 'waiting' ? '<span class="pr-agent" style="color:var(--muted)" title="Vote pending confirmation">' + escHtml(sq.reviewer) + '…</span>' : '<span style="color:var(--muted);font-size:11px">—</span>') + '</td>' +
|
|
27
|
+
'<td>' + (sq.reviewer && sq.status !== 'waiting' ? '<span class="pr-agent" title="' + escHtml(sq.note || '') + '">' + escHtml(sq.reviewer) + '</span>' : sq.reviewer && sq.status === 'waiting' ? '<span class="pr-agent" style="color:var(--muted)" title="Vote pending confirmation">' + escHtml(sq.reviewer) + '…</span>' : pr.reviewedBy && pr.reviewedBy.length ? '<span class="pr-agent">' + escHtml(pr.reviewedBy.join(', ')) + '</span>' : '<span style="color:var(--muted);font-size:11px">—</span>') + '</td>' +
|
|
28
28
|
'<td><span class="pr-badge ' + buildClass + '">' + escHtml(buildLabel) + '</span></td>' +
|
|
29
29
|
'<td><span class="pr-badge ' + statusClass + '">' + escHtml(statusLabel) + '</span></td>' +
|
|
30
30
|
'<td><span class="pr-date">' + escHtml(pr.created || '—') + '</span></td>' +
|
package/engine/ado.js
CHANGED
|
@@ -151,6 +151,19 @@ async function pollPrStatus(config) {
|
|
|
151
151
|
else newReviewStatus = 'pending';
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
// Store human reviewer names who approved or requested changes
|
|
155
|
+
const reviewedBy = reviewers
|
|
156
|
+
.filter(r => r.vote >= 5 || r.vote === -10)
|
|
157
|
+
.map(r => r.displayName)
|
|
158
|
+
.filter(Boolean);
|
|
159
|
+
// Fallback: if PR was merged and no decisive votes, use completedBy
|
|
160
|
+
if (!reviewedBy.length && newStatus === 'merged' && prData.closedBy?.displayName) {
|
|
161
|
+
reviewedBy.push(prData.closedBy.displayName);
|
|
162
|
+
}
|
|
163
|
+
if (JSON.stringify(pr.reviewedBy || []) !== JSON.stringify(reviewedBy)) {
|
|
164
|
+
pr.reviewedBy = reviewedBy; updated = true;
|
|
165
|
+
}
|
|
166
|
+
|
|
154
167
|
if (pr.reviewStatus !== newReviewStatus) {
|
|
155
168
|
log('info', `PR ${pr.id} reviewStatus: ${pr.reviewStatus} → ${newReviewStatus}`);
|
|
156
169
|
pr.reviewStatus = newReviewStatus;
|
package/engine/github.js
CHANGED
|
@@ -154,6 +154,19 @@ async function pollPrStatus(config) {
|
|
|
154
154
|
}
|
|
155
155
|
const states = [...latestByUser.values()];
|
|
156
156
|
|
|
157
|
+
// Store human reviewer names who approved or requested changes
|
|
158
|
+
const reviewedBy = [...latestByUser.entries()]
|
|
159
|
+
.filter(([, state]) => state === 'APPROVED' || state === 'CHANGES_REQUESTED')
|
|
160
|
+
.map(([user]) => user)
|
|
161
|
+
.filter(Boolean);
|
|
162
|
+
// Fallback: if PR was merged and no decisive reviews, use merged_by
|
|
163
|
+
if (!reviewedBy.length && prData.merged && prData.merged_by?.login) {
|
|
164
|
+
reviewedBy.push(prData.merged_by.login);
|
|
165
|
+
}
|
|
166
|
+
if (JSON.stringify(pr.reviewedBy || []) !== JSON.stringify(reviewedBy)) {
|
|
167
|
+
pr.reviewedBy = reviewedBy; updated = true;
|
|
168
|
+
}
|
|
169
|
+
|
|
157
170
|
let newReviewStatus = pr.reviewStatus || 'pending';
|
|
158
171
|
if (states.some(s => s === 'CHANGES_REQUESTED')) newReviewStatus = 'changes-requested';
|
|
159
172
|
else if (states.some(s => s === 'APPROVED')) newReviewStatus = 'approved';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.315",
|
|
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"
|
package/playbooks/evaluate.md
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Evaluate: {{item_name}}
|
|
2
|
-
|
|
3
|
-
> Agent: {{agent_name}} ({{agent_role}}) | Team root: {{team_root}}
|
|
4
|
-
|
|
5
|
-
## Context
|
|
6
|
-
|
|
7
|
-
Project: {{project_name}}
|
|
8
|
-
Repo: {{repo_name}} | Org: {{ado_org}} | ADO Project: {{ado_project}}
|
|
9
|
-
PR: {{pr_url}}
|
|
10
|
-
Work Item: {{item_id}}
|
|
11
|
-
|
|
12
|
-
## Acceptance Criteria
|
|
13
|
-
|
|
14
|
-
{{acceptance_criteria}}
|
|
15
|
-
|
|
16
|
-
## Task Description
|
|
17
|
-
|
|
18
|
-
{{task_description}}
|
|
19
|
-
|
|
20
|
-
## Your Task
|
|
21
|
-
|
|
22
|
-
You are the **Evaluator** in the Planner-Generator-Evaluator pattern. Your job is to independently verify whether the implementation in the PR branch meets the acceptance criteria. You are NOT the implementer — you are the skeptic.
|
|
23
|
-
|
|
24
|
-
**Mindset: Do not pass unless build succeeds AND all acceptance criteria are demonstrably met.** Assume the implementation is incomplete or wrong until proven otherwise. Look for edge cases, missing requirements, and silent failures.
|
|
25
|
-
|
|
26
|
-
## Step 1: Check Out the PR Branch
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
cd {{project_path}}
|
|
30
|
-
git fetch origin
|
|
31
|
-
git checkout {{branch_name}}
|
|
32
|
-
git pull origin {{branch_name}}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Step 2: Build
|
|
36
|
-
|
|
37
|
-
Run the project build. Check `CLAUDE.md`, `package.json`, or `README` for build instructions.
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
# Typical:
|
|
41
|
-
npm install && npm run build
|
|
42
|
-
# Or whatever the project uses
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Record: **PASS** or **FAIL** with error output.
|
|
46
|
-
|
|
47
|
-
If the build fails, **stop here** — the verdict is `pass: false`. Include the build error in feedback.
|
|
48
|
-
|
|
49
|
-
## Step 3: Run Tests
|
|
50
|
-
|
|
51
|
-
Run the full test suite:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
npm test
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Record: **X passed / Y failed / Z skipped**.
|
|
58
|
-
|
|
59
|
-
If any tests fail, note which ones and whether they are related to the changes.
|
|
60
|
-
|
|
61
|
-
## Step 4: Diff Review Against Acceptance Criteria
|
|
62
|
-
|
|
63
|
-
Review the actual code changes:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
git diff {{main_branch}}...{{branch_name}} --stat
|
|
67
|
-
git diff {{main_branch}}...{{branch_name}}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
For **each** acceptance criterion, determine:
|
|
71
|
-
- **Met**: The diff demonstrably satisfies this criterion. Cite the specific file/line.
|
|
72
|
-
- **Not met**: The diff does not satisfy this criterion, or satisfies it only partially. Explain what's missing.
|
|
73
|
-
|
|
74
|
-
Be precise. "Looks good" is not an evaluation — cite file paths and line numbers.
|
|
75
|
-
|
|
76
|
-
## Step 5: Output Structured Verdict
|
|
77
|
-
|
|
78
|
-
After completing your evaluation, output the following JSON block as your final output. This MUST be valid JSON wrapped in a `json` fenced code block:
|
|
79
|
-
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"pass": false,
|
|
83
|
-
"build": true,
|
|
84
|
-
"tests": "42/42",
|
|
85
|
-
"criteria_met": [
|
|
86
|
-
"criterion 1 — met because X (source: path/to/file.js:42)"
|
|
87
|
-
],
|
|
88
|
-
"criteria_failed": [
|
|
89
|
-
"criterion 2 — not met because Y is missing"
|
|
90
|
-
],
|
|
91
|
-
"feedback": "Summary of what needs to change for this to pass. Be specific — file names, line numbers, what to add/fix."
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Field definitions:
|
|
96
|
-
- `pass`: `true` only if build succeeds AND **all** acceptance criteria are met. Otherwise `false`.
|
|
97
|
-
- `build`: `true` if the build completed without errors, `false` otherwise.
|
|
98
|
-
- `tests`: String in format `"passed/total"` (e.g., `"38/40"`). Use `"N/A"` if no test suite exists.
|
|
99
|
-
- `criteria_met`: Array of strings — one per criterion that IS met. Include source references.
|
|
100
|
-
- `criteria_failed`: Array of strings — one per criterion that is NOT met. Explain why.
|
|
101
|
-
- `feedback`: Actionable feedback for the implementer. Be specific about what to fix. If `pass` is `true`, use this for minor suggestions or "LGTM".
|
|
102
|
-
|
|
103
|
-
## Rules
|
|
104
|
-
|
|
105
|
-
- **No Playwright / browser testing** — this phase evaluates build, tests, and code review only.
|
|
106
|
-
- **Do NOT fix code** — only evaluate and report. You are the evaluator, not the implementer.
|
|
107
|
-
- **Do NOT rubber-stamp** — if a criterion is ambiguous, evaluate conservatively (fail it and explain).
|
|
108
|
-
- **Build failure is an automatic fail** — do not evaluate criteria if the build doesn't pass.
|
|
109
|
-
- **Every criterion must be addressed** — `criteria_met` + `criteria_failed` should cover all acceptance criteria.
|
|
110
|
-
- **Cite sources** — reference file paths and line numbers for every met/failed criterion.
|
|
111
|
-
|
|
112
|
-
{{references}}
|
|
113
|
-
|
|
114
|
-
**Note:** Do NOT write to `agents/*/status.json` — the engine manages your status automatically.
|