@yemi33/minions 0.1.886 → 0.1.888

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 CHANGED
@@ -1,11 +1,12 @@
1
1
  # Changelog
2
2
 
3
- ## 0.1.886 (2026-04-11)
3
+ ## 0.1.888 (2026-04-11)
4
4
 
5
5
  ### Features
6
6
  - add 13 missing CC action types for full dashboard parity
7
7
 
8
8
  ### Fixes
9
+ - require explicit vote step in review playbook
9
10
  - CC queued message silently retries on 429 after abort
10
11
  - track e2e/ and fix/ branches in PR reconciler
11
12
  - show stale banner on paused PRDs (#905) (#909)
@@ -17,6 +18,7 @@
17
18
  - include started_at in done/error agent status so duration renders
18
19
 
19
20
  ### Other
21
+ - refactor: extract reopenWorkItem helper to shared.js
20
22
  - simplify: fix CC regenerate-plan field name, remove dead revise-and-regenerate handler
21
23
  - remove doc-chat plan auto-pause in favour of stale banner only
22
24
  - simplify: CC actions cleanup — missing wakeEngine, redundant refresh, hardened fallback
package/engine/shared.js CHANGED
@@ -910,6 +910,19 @@ function mutateWorkItems(filePath, mutator) {
910
910
  }, { defaultValue: [] });
911
911
  }
912
912
 
913
+ /**
914
+ * Reset a done work item for re-dispatch. Clears completion/dispatch metadata.
915
+ * Caller must set description/title separately.
916
+ */
917
+ function reopenWorkItem(wi) {
918
+ wi.status = WI_STATUS.PENDING;
919
+ wi._reopened = true;
920
+ delete wi.completedAt;
921
+ delete wi.dispatched_at;
922
+ delete wi.dispatched_to;
923
+ wi._retryCount = 0;
924
+ }
925
+
913
926
  /**
914
927
  * Atomic read-modify-write for pull-requests JSON files.
915
928
  * Wraps mutateJsonFileLocked with defaultValue of [].
@@ -1043,6 +1056,7 @@ module.exports = {
1043
1056
  withFileLock,
1044
1057
  mutateJsonFileLocked,
1045
1058
  mutateWorkItems,
1059
+ reopenWorkItem,
1046
1060
  mutatePullRequests,
1047
1061
  uid,
1048
1062
  uniquePath,
package/engine.js CHANGED
@@ -1520,12 +1520,11 @@ function materializePlansAsWorkItems(config) {
1520
1520
 
1521
1521
  mutateWorkItems(wiPath, existingItems => {
1522
1522
  for (const item of projItems) {
1523
- // Re-open: only 'updated' re-opens a done work item (missing = new item, not re-open)
1523
+ // Re-open: 'updated' or 'missing' re-opens a done work item (#906)
1524
1524
  const existingWi = existingItems.find(w => w.id === item.id);
1525
- const shouldReopen = item.status === PRD_ITEM_STATUS.UPDATED;
1525
+ const shouldReopen = item.status === PRD_ITEM_STATUS.UPDATED || item.status === PRD_ITEM_STATUS.MISSING;
1526
1526
  if (existingWi && DONE_STATUSES.has(existingWi.status) && shouldReopen) {
1527
- existingWi.status = WI_STATUS.PENDING;
1528
- existingWi._reopened = true;
1527
+ shared.reopenWorkItem(existingWi);
1529
1528
  existingWi.description = buildWiDescription(item, file);
1530
1529
  existingWi.title = `Implement: ${item.name}`;
1531
1530
  created++;
@@ -1609,8 +1608,7 @@ function materializePlansAsWorkItems(config) {
1609
1608
  mutateWorkItems(rPath, items => {
1610
1609
  const target = items.find(w => w.id === itemId);
1611
1610
  if (target && DONE_STATUSES.has(target.status)) {
1612
- target.status = WI_STATUS.PENDING;
1613
- target._reopened = true;
1611
+ shared.reopenWorkItem(target);
1614
1612
  target.description = buildWiDescription(rItem, file);
1615
1613
  target.title = `Implement: ${rItem.name}`;
1616
1614
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.886",
3
+ "version": "0.1.888",
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"
@@ -40,26 +40,28 @@ Use subagents only for genuinely parallel, independent tasks (e.g., reviewing un
40
40
  - Verdict: **APPROVE**
41
41
  - Note any minor non-blocking suggestions
42
42
 
43
- ## Post Review — Comment AND Vote on PR
43
+ ## Post Review — Two required actions, both mandatory
44
44
 
45
- Do both of the following:
45
+ You MUST complete BOTH steps below. The review is NOT done until both are confirmed. A comment without a vote is an incomplete review.
46
46
 
47
- ### Step 1: Leave a detailed review comment
47
+ ### Step 1: Post a detailed review comment
48
48
 
49
49
  {{pr_comment_instructions}}
50
- - pullRequestId: `{{pr_number}}`
51
50
  - content: Your full review with verdict, findings, and sign-off
52
51
  - Sign: `Review by Minions ({{agent_name}} — {{agent_role}})`
53
52
 
54
- ### Step 2: Set your vote on the PR
53
+ ### Step 2: Submit a formal review vote THIS IS REQUIRED
54
+
55
+ **This is a separate action from Step 1.** Posting a comment does NOT submit a vote. You must explicitly run the vote command:
55
56
 
56
57
  {{pr_vote_instructions}}
57
- - pullRequestId: `{{pr_number}}`
58
- - If your verdict is **APPROVE**: vote `10` (approved)
59
- - If your verdict is **REQUEST_CHANGES**: vote `-10` (rejected)
60
- - If you have minor non-blocking suggestions: vote `5` (approved with suggestions)
58
+ - If your verdict is **APPROVE**: use `--approve`
59
+ - If your verdict is **REQUEST_CHANGES**: use `--request-changes`
60
+ - If you have minor non-blocking suggestions only: use `--approve` with a note
61
+
62
+ **Do not stop after Step 1.** The task is incomplete until Step 2 is done.
61
63
 
62
- This vote is visible to human reviewers in the PR UI and helps them understand the minions's assessment.
64
+ After running the vote command, confirm it succeeded (check the command output for errors). If it fails, retry once.
63
65
 
64
66
  ## Handling Merge Conflicts
65
67
  If you encounter merge conflicts (e.g., the PR shows conflicts):
@@ -69,5 +71,9 @@ If you encounter merge conflicts (e.g., the PR shows conflicts):
69
71
 
70
72
  ## When to Stop
71
73
 
72
- Your task is complete once you have: (1) posted your review comment on the PR, and (2) cast your vote. Do NOT continue reading unrelated files or performing additional analysis. Stop after voting.
74
+ Your task is complete only when BOTH of these are true:
75
+ 1. Review comment posted (Step 1)
76
+ 2. Formal vote submitted via `gh pr review --approve` or `--request-changes` (Step 2)
77
+
78
+ Do NOT stop after only posting a comment. Do NOT continue reading unrelated files after voting.
73
79