@yemi33/minions 0.1.798 → 0.1.799
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 +2 -1
- package/engine/ado.js +5 -6
- package/engine/github.js +4 -4
- package/engine/lifecycle.js +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.799 (2026-04-10)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- add open-source community sources to agentic research pipeline
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- cap review→fix cycles at evalMaxIterations (default 3)
|
|
9
9
|
|
|
10
10
|
### Fixes
|
|
11
|
+
- approved is permanent — no path can ever downgrade it
|
|
11
12
|
- allow fix dispatch on approved PRs (only guard is in updatePrAfterFix)
|
|
12
13
|
- bot comment on approved PR can no longer reset vote
|
|
13
14
|
- remove redundant 'PR' prefix from dispatch labels (id already has it)
|
package/engine/ado.js
CHANGED
|
@@ -295,19 +295,18 @@ async function pollPrStatus(config) {
|
|
|
295
295
|
const reviewers = prData.reviewers || [];
|
|
296
296
|
const votes = reviewers.map(r => r.vote).filter(v => v !== undefined);
|
|
297
297
|
let newReviewStatus = pr.reviewStatus || 'pending';
|
|
298
|
-
|
|
298
|
+
// Once approved, it stays approved permanently
|
|
299
|
+
if (pr.reviewStatus === 'approved') {
|
|
300
|
+
newReviewStatus = 'approved';
|
|
301
|
+
} else if (votes.length > 0) {
|
|
299
302
|
if (votes.some(v => v === -10)) {
|
|
300
|
-
// Don't re-trigger 'changes-requested' if fix agent already responded (waiting state).
|
|
301
|
-
// Only re-trigger if there's been a new push since the fix (reviewer re-reviewed).
|
|
302
303
|
if (pr.reviewStatus === 'waiting' && pr.minionsReview?.fixedAt && (!pr.lastPushedAt || pr.lastPushedAt <= pr.minionsReview.fixedAt)) {
|
|
303
|
-
newReviewStatus = 'waiting';
|
|
304
|
+
newReviewStatus = 'waiting';
|
|
304
305
|
} else {
|
|
305
306
|
newReviewStatus = 'changes-requested';
|
|
306
307
|
}
|
|
307
308
|
}
|
|
308
309
|
else if (votes.some(v => v >= 5)) newReviewStatus = 'approved';
|
|
309
|
-
// Never downgrade from 'approved' — only -10 (reject) can override it
|
|
310
|
-
else if (pr.reviewStatus === 'approved') newReviewStatus = 'approved';
|
|
311
310
|
else if (votes.some(v => v === -5)) newReviewStatus = 'waiting';
|
|
312
311
|
else newReviewStatus = 'pending';
|
|
313
312
|
}
|
package/engine/github.js
CHANGED
|
@@ -330,8 +330,10 @@ async function pollPrStatus(config) {
|
|
|
330
330
|
}
|
|
331
331
|
|
|
332
332
|
let newReviewStatus = pr.reviewStatus || 'pending';
|
|
333
|
-
|
|
334
|
-
|
|
333
|
+
// Once approved, it stays approved permanently
|
|
334
|
+
if (pr.reviewStatus === 'approved') {
|
|
335
|
+
newReviewStatus = 'approved';
|
|
336
|
+
} else if (states.some(s => s === 'CHANGES_REQUESTED')) {
|
|
335
337
|
if (pr.reviewStatus === 'waiting' && pr.minionsReview?.fixedAt && (!pr.lastPushedAt || pr.lastPushedAt <= pr.minionsReview.fixedAt)) {
|
|
336
338
|
newReviewStatus = 'waiting';
|
|
337
339
|
} else {
|
|
@@ -339,8 +341,6 @@ async function pollPrStatus(config) {
|
|
|
339
341
|
}
|
|
340
342
|
}
|
|
341
343
|
else if (states.some(s => s === 'APPROVED')) newReviewStatus = 'approved';
|
|
342
|
-
// Never downgrade from 'approved' — only CHANGES_REQUESTED can override it
|
|
343
|
-
else if (pr.reviewStatus === 'approved') newReviewStatus = 'approved';
|
|
344
344
|
else if (states.length > 0) newReviewStatus = 'pending';
|
|
345
345
|
else if (states.length === 0 && reviews.length > 0 && newReviewStatus === 'pending') newReviewStatus = 'waiting';
|
|
346
346
|
|
package/engine/lifecycle.js
CHANGED
|
@@ -751,8 +751,8 @@ async function updatePrAfterReview(agentId, pr, project, config, resultSummary)
|
|
|
751
751
|
if (!Array.isArray(prs)) return prs;
|
|
752
752
|
const target = prs.find(p => p.id === pr.id);
|
|
753
753
|
if (!target) return prs;
|
|
754
|
-
//
|
|
755
|
-
if (postReviewStatus &&
|
|
754
|
+
// Once approved, stays approved permanently — no path can downgrade
|
|
755
|
+
if (postReviewStatus && target.reviewStatus !== 'approved') {
|
|
756
756
|
target.reviewStatus = postReviewStatus;
|
|
757
757
|
}
|
|
758
758
|
target.lastReviewedAt = ts();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.799",
|
|
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"
|