@yemi33/minions 0.1.786 → 0.1.788
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 +3 -1
- package/engine/ado.js +2 -1
- package/engine/github.js +2 -1
- package/engine.js +6 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.788 (2026-04-10)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- cap review→fix cycles at evalMaxIterations (default 3)
|
|
7
7
|
|
|
8
8
|
### Fixes
|
|
9
|
+
- human feedback fixes are never capped (only minion review→fix loop is)
|
|
10
|
+
- 5 bugs from comprehensive audit
|
|
9
11
|
- stale ADO build detection + merge conflict auto-fix for both platforms
|
|
10
12
|
- don't overwrite reviewStatus when platform vote hasn't propagated
|
|
11
13
|
- don't overwrite approval with 'waiting' when platform API lags
|
package/engine/ado.js
CHANGED
|
@@ -395,8 +395,9 @@ async function pollPrStatus(config) {
|
|
|
395
395
|
pr.buildStatus = buildStatus;
|
|
396
396
|
if (buildFailReason) pr.buildFailReason = buildFailReason;
|
|
397
397
|
else delete pr.buildFailReason;
|
|
398
|
-
// Build transitioned — clear grace period
|
|
398
|
+
// Build transitioned — clear grace period and auto-complete flag
|
|
399
399
|
delete pr._buildFixPushedAt;
|
|
400
|
+
if (buildStatus === 'failing') delete pr._autoCompleted;
|
|
400
401
|
if (buildStatus !== 'failing') {
|
|
401
402
|
delete pr._buildFailNotified;
|
|
402
403
|
delete pr.buildErrorLog;
|
package/engine/github.js
CHANGED
|
@@ -400,8 +400,9 @@ async function pollPrStatus(config) {
|
|
|
400
400
|
pr.buildStatus = buildStatus;
|
|
401
401
|
if (buildFailReason) pr.buildFailReason = buildFailReason;
|
|
402
402
|
else delete pr.buildFailReason;
|
|
403
|
-
// Build transitioned — clear grace period
|
|
403
|
+
// Build transitioned — clear grace period and auto-complete flag
|
|
404
404
|
delete pr._buildFixPushedAt;
|
|
405
|
+
if (buildStatus === 'failing') delete pr._autoCompleted; // allow re-merge after fix
|
|
405
406
|
if (buildStatus !== 'failing') {
|
|
406
407
|
delete pr._buildFailNotified;
|
|
407
408
|
delete pr.buildErrorLog;
|
package/engine.js
CHANGED
|
@@ -1576,10 +1576,11 @@ async function discoverFromPrs(config, project) {
|
|
|
1576
1576
|
// The poller holds reviewStatus at 'waiting' until the reviewer acts on the new code.
|
|
1577
1577
|
const awaitingReReview = reviewStatus === 'waiting' && !!pr.minionsReview?.fixedAt;
|
|
1578
1578
|
|
|
1579
|
-
// Review→fix cycle cap — stop after N iterations,
|
|
1579
|
+
// Review→fix cycle cap — stop review/fix dispatch after N iterations, but allow build fixes and conflict fixes
|
|
1580
1580
|
const evalMax = config.engine?.evalMaxIterations ?? DEFAULTS.evalMaxIterations;
|
|
1581
1581
|
const evalCycles = pr._reviewFixCycles || 0;
|
|
1582
|
-
|
|
1582
|
+
const evalEscalated = evalCycles >= evalMax;
|
|
1583
|
+
if (evalEscalated && !pr._evalEscalated) {
|
|
1583
1584
|
writeInboxAlert(`eval-escalated-${pr.agent || 'unassigned'}-${pr.id}`,
|
|
1584
1585
|
`# Review Loop Escalation\n\n**PR ${pr.id}** on branch \`${pr.branch || 'unknown'}\` has gone through **${evalCycles}** review→fix cycles without approval.\n\n` +
|
|
1585
1586
|
`Last review: ${pr.minionsReview?.note ? pr.minionsReview.note.slice(0, 200) : 'See PR thread'}\n\n` +
|
|
@@ -1591,13 +1592,12 @@ async function discoverFromPrs(config, project) {
|
|
|
1591
1592
|
});
|
|
1592
1593
|
} catch (e) { log('warn', 'mark eval escalated: ' + e.message); }
|
|
1593
1594
|
log('warn', `PR ${pr.id}: review→fix escalated after ${evalCycles} cycles — suspending auto-dispatch`);
|
|
1594
|
-
continue;
|
|
1595
1595
|
}
|
|
1596
1596
|
|
|
1597
1597
|
// PRs needing review: pending review status and not already reviewed without new commits
|
|
1598
1598
|
const autoReview = config.engine?.autoReview !== false;
|
|
1599
1599
|
const alreadyReviewed = pr.lastReviewedAt && (!pr.lastPushedAt || pr.lastPushedAt <= pr.lastReviewedAt);
|
|
1600
|
-
const needsReview = autoReview && reviewStatus === 'pending' && !alreadyReviewed;
|
|
1600
|
+
const needsReview = autoReview && reviewStatus === 'pending' && !alreadyReviewed && !evalEscalated;
|
|
1601
1601
|
if (needsReview) {
|
|
1602
1602
|
const key = `review-${project?.name || 'default'}-${pr.id}`;
|
|
1603
1603
|
if (isAlreadyDispatched(key) || isOnCooldown(key, cooldownMs)) continue;
|
|
@@ -1634,7 +1634,7 @@ async function discoverFromPrs(config, project) {
|
|
|
1634
1634
|
|
|
1635
1635
|
// PRs with changes requested → route back to author for fix
|
|
1636
1636
|
let fixDispatched = false;
|
|
1637
|
-
if (reviewStatus === 'changes-requested' && !awaitingReReview) {
|
|
1637
|
+
if (reviewStatus === 'changes-requested' && !awaitingReReview && !evalEscalated) {
|
|
1638
1638
|
const key = `fix-${project?.name || 'default'}-${pr.id}`;
|
|
1639
1639
|
if (isAlreadyDispatched(key) || isOnCooldown(key, cooldownMs)) continue;
|
|
1640
1640
|
const agentId = resolveAgent('fix', config, pr.agent);
|
|
@@ -1683,7 +1683,7 @@ async function discoverFromPrs(config, project) {
|
|
|
1683
1683
|
reviewer: 'Human Reviewer',
|
|
1684
1684
|
review_note: reviewNote,
|
|
1685
1685
|
}, `Fix PR ${pr.id} — human feedback`, { dispatchKey: key, source: 'pr-human-feedback', pr, branch: pr.branch, project: projMeta });
|
|
1686
|
-
if (item) { newWork.push(item); setCooldown(key); }
|
|
1686
|
+
if (item) { newWork.push(item); setCooldown(key); fixDispatched = true; }
|
|
1687
1687
|
}
|
|
1688
1688
|
|
|
1689
1689
|
// PRs with build failures — route to author (has session context from implementing)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.788",
|
|
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"
|