@yemi33/minions 0.1.1037 → 0.1.1038
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 +43 -0
- package/engine/cleanup.js +54 -18
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.1038 (2026-04-16)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
- Doc-chat performance — debounced persistence, session TTL, smart disk reads (#1164)
|
|
7
|
+
- split getStatus() into fast/slow state tiers with separate TTLs (#1170)
|
|
8
|
+
- Cache _countWorktrees() with 30s TTL (#1166)
|
|
9
|
+
- Pre-cache gzipped status buffer alongside JSON cache (#1171)
|
|
10
|
+
- parallelize ADO and GitHub PR polling with Promise.allSettled (#1172)
|
|
11
|
+
- route implement items to dedicated implement playbook (#1115)
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
- allow test tasks to create PRs when files are modified
|
|
15
|
+
- sidecar oversized dispatch prompts to prevent dashboard OOM (closes #1167) (#1183)
|
|
16
|
+
- use locked write for failed-with-PR reconciliation in cleanup.js (#1169)
|
|
17
|
+
- prevent test from corrupting live meeting state
|
|
18
|
+
- scheduler enabled field falsy check treats undefined as disabled (#1160)
|
|
19
|
+
- update branch-dedup tests to use canonical PR IDs after merge with master (#1146)
|
|
20
|
+
- auto-review not firing for manually-linked PRs with autoObserve=true
|
|
21
|
+
- mark PR abandoned on 404 instead of silently retrying each tick
|
|
22
|
+
- replace undefined PROJECTS with config.projects in checkWatches (#1108)
|
|
23
|
+
- write permission for publish workflow
|
|
24
|
+
- run tests inline and post check runs for publish PRs
|
|
25
|
+
- add maxBuffer to all GitHub CLI spawns + paginate PR list (#1130)
|
|
26
|
+
- add required CI checks for PRs + update publish for auto-merge
|
|
27
|
+
- revert to PR merge now that stale status check is removed
|
|
28
|
+
- guard live review check against undefined vote/state values (#1132)
|
|
29
|
+
- push version bump directly to master instead of via PR
|
|
30
|
+
- add push-triggered CI for chore/publish branches
|
|
31
|
+
- publish workflow chore PRs failing to merge
|
|
32
|
+
- harden KB ordering
|
|
33
|
+
- harden audited state transitions
|
|
34
|
+
|
|
35
|
+
### Other
|
|
36
|
+
- Fix audit cleanup and test isolation
|
|
37
|
+
- docs(sched-weekly-docs-cleanup-1776355200664): weekly documentation cleanup (#1181)
|
|
38
|
+
- [E2E] Dashboard & engine perf: gzip cache, tiered status, lock backoff, polling parallelization (#1174)
|
|
39
|
+
- Fix doc chat session isolation
|
|
40
|
+
- test(pipeline): add unit tests for CRUD, stage execution, run lifecycle (#1162)
|
|
41
|
+
- chore: test publish after removing stale status check
|
|
42
|
+
- chore: trigger publish test
|
|
43
|
+
- chore: test publish workflow fix
|
|
44
|
+
- chore: trigger publish workflow test
|
|
45
|
+
|
|
3
46
|
## 0.1.1037 (2026-04-16)
|
|
4
47
|
|
|
5
48
|
### Features
|
package/engine/cleanup.js
CHANGED
|
@@ -448,17 +448,19 @@ function runCleanup(config, verbose = false) {
|
|
|
448
448
|
try {
|
|
449
449
|
const wiPath = projectWorkItemsPath(project);
|
|
450
450
|
let reconciled = 0;
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
451
|
+
mutateWorkItems(wiPath, items => {
|
|
452
|
+
for (const item of items) {
|
|
453
|
+
if (item.status === shared.WI_STATUS.FAILED && item._pr) {
|
|
454
|
+
item.status = shared.WI_STATUS.DONE;
|
|
455
|
+
if (item.failReason) delete item.failReason;
|
|
456
|
+
if (item.failedAt) delete item.failedAt;
|
|
457
|
+
delete item._retryCount;
|
|
458
|
+
delete item._pendingReason;
|
|
459
|
+
if (!item.completedAt) item.completedAt = shared.ts();
|
|
460
|
+
reconciled++;
|
|
461
|
+
}
|
|
459
462
|
}
|
|
460
|
-
}
|
|
461
|
-
});
|
|
463
|
+
});
|
|
462
464
|
if (reconciled > 0) {
|
|
463
465
|
log('info', `Reconciled ${reconciled} failed-with-PR item(s) → done in ${project.name}`);
|
|
464
466
|
}
|
|
@@ -472,15 +474,17 @@ function runCleanup(config, verbose = false) {
|
|
|
472
474
|
try {
|
|
473
475
|
const wiPath = projectWorkItemsPath(project);
|
|
474
476
|
let migrated = 0;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
477
|
+
mutateWorkItems(wiPath, items => {
|
|
478
|
+
for (const item of items) {
|
|
479
|
+
if (LEGACY_DONE_ALIASES.has(item.status)) {
|
|
480
|
+
item.status = shared.WI_STATUS.DONE;
|
|
481
|
+
delete item._retryCount;
|
|
482
|
+
delete item._pendingReason;
|
|
483
|
+
if (!item.completedAt) item.completedAt = shared.ts();
|
|
484
|
+
migrated++;
|
|
485
|
+
}
|
|
481
486
|
}
|
|
482
|
-
}
|
|
483
|
-
});
|
|
487
|
+
});
|
|
484
488
|
if (migrated > 0) {
|
|
485
489
|
log('info', `Migrated ${migrated} legacy status(es) → done in ${project.name} work items`);
|
|
486
490
|
}
|
|
@@ -494,7 +498,9 @@ function runCleanup(config, verbose = false) {
|
|
|
494
498
|
for (const item of items) {
|
|
495
499
|
if (LEGACY_DONE_ALIASES.has(item.status)) {
|
|
496
500
|
item.status = shared.WI_STATUS.DONE;
|
|
501
|
+
delete item._retryCount;
|
|
497
502
|
delete item._pendingReason;
|
|
503
|
+
if (!item.completedAt) item.completedAt = shared.ts();
|
|
498
504
|
migrated++;
|
|
499
505
|
}
|
|
500
506
|
}
|
|
@@ -503,6 +509,36 @@ function runCleanup(config, verbose = false) {
|
|
|
503
509
|
log('info', `Migrated ${migrated} legacy status(es) → done in central work items`);
|
|
504
510
|
}
|
|
505
511
|
} catch (e) { log('warn', 'migrate central legacy statuses: ' + e.message); }
|
|
512
|
+
|
|
513
|
+
// 6c. Strip stale retry metadata from completed work items
|
|
514
|
+
cleaned.doneRetryCounts = 0;
|
|
515
|
+
for (const project of projects) {
|
|
516
|
+
try {
|
|
517
|
+
const wiPath = projectWorkItemsPath(project);
|
|
518
|
+
mutateWorkItems(wiPath, items => {
|
|
519
|
+
for (const item of items) {
|
|
520
|
+
if (item.status === shared.WI_STATUS.DONE && item._retryCount !== undefined) {
|
|
521
|
+
delete item._retryCount;
|
|
522
|
+
cleaned.doneRetryCounts++;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
} catch (e) { log('warn', 'cleanup done retry metadata: ' + e.message); }
|
|
527
|
+
}
|
|
528
|
+
try {
|
|
529
|
+
const centralPath = path.join(MINIONS_DIR, 'work-items.json');
|
|
530
|
+
mutateWorkItems(centralPath, items => {
|
|
531
|
+
for (const item of items) {
|
|
532
|
+
if (item.status === shared.WI_STATUS.DONE && item._retryCount !== undefined) {
|
|
533
|
+
delete item._retryCount;
|
|
534
|
+
cleaned.doneRetryCounts++;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
} catch (e) { log('warn', 'cleanup central done retry metadata: ' + e.message); }
|
|
539
|
+
if (cleaned.doneRetryCounts > 0) {
|
|
540
|
+
log('info', `Cleanup: cleared ${cleaned.doneRetryCounts} stale retry count(s) from done work items`);
|
|
541
|
+
}
|
|
506
542
|
// PRD items (missing_features[].status)
|
|
507
543
|
try {
|
|
508
544
|
let prdDirEntries;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1038",
|
|
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"
|