@yemi33/minions 0.1.1020 → 0.1.1021

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,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.1021 (2026-04-16)
4
+
5
+ ### Features
6
+ - route implement items to dedicated implement playbook (#1115)
7
+
8
+ ### Fixes
9
+ - mark PR abandoned on 404 instead of silently retrying each tick
10
+ - replace undefined PROJECTS with config.projects in checkWatches (#1108)
11
+ - write permission for publish workflow
12
+ - run tests inline and post check runs for publish PRs
13
+ - add maxBuffer to all GitHub CLI spawns + paginate PR list (#1130)
14
+ - add required CI checks for PRs + update publish for auto-merge
15
+ - revert to PR merge now that stale status check is removed
16
+ - guard live review check against undefined vote/state values (#1132)
17
+ - push version bump directly to master instead of via PR
18
+ - add push-triggered CI for chore/publish branches
19
+ - publish workflow chore PRs failing to merge
20
+ - harden KB ordering
21
+ - harden audited state transitions
22
+
23
+ ### Other
24
+ - chore: test publish after removing stale status check
25
+ - chore: trigger publish test
26
+ - chore: test publish workflow fix
27
+ - chore: trigger publish workflow test
28
+
3
29
  ## 0.1.1020 (2026-04-16)
4
30
 
5
31
  ### Features
package/engine/github.js CHANGED
@@ -88,7 +88,10 @@ const isGhThrottled = () => _ghThrottle.isThrottled();
88
88
  /** Returns a snapshot of the current GitHub throttle state. */
89
89
  const getGhThrottleState = () => _ghThrottle.getState();
90
90
 
91
- /** Run a `gh api` call and parse JSON result. Returns null on failure.
91
+ /** Sentinel returned by ghApi when the resource does not exist (HTTP 404). */
92
+ const GH_NOT_FOUND = Object.freeze({ _notFound: true });
93
+
94
+ /** Run a `gh api` call and parse JSON result. Returns null on failure, GH_NOT_FOUND on 404.
92
95
  * @param {string} endpoint - API endpoint (e.g. '/pulls?state=open')
93
96
  * @param {string} slug - owner/repo slug
94
97
  * @param {object} [opts] - Options: { paginate: boolean, timeout: number }
@@ -110,6 +113,10 @@ async function ghApi(endpoint, slug, opts = {}) {
110
113
  const retryAfterMs = secMatch ? parseInt(secMatch[1], 10) * 1000 : 0;
111
114
  _ghThrottle.recordThrottle(retryAfterMs);
112
115
  }
116
+ if (/HTTP 404|Not Found/i.test(msg)) {
117
+ log('warn', `GitHub API error (${endpoint}): ${e.message}`);
118
+ return GH_NOT_FOUND;
119
+ }
113
120
  log('warn', `GitHub API error (${endpoint}): ${e.message}`);
114
121
  return null;
115
122
  }
@@ -305,6 +312,15 @@ async function pollPrStatus(config) {
305
312
  const totalUpdated = await forEachActiveGhPr(config, async (project, pr, prNum, slug) => {
306
313
  const prData = await ghApi(`/pulls/${prNum}`, slug);
307
314
  if (!prData) return false;
315
+ if (prData === GH_NOT_FOUND) {
316
+ // PR no longer exists — mark abandoned so it stops being polled
317
+ if (pr.status !== PR_STATUS.ABANDONED) {
318
+ pr.status = PR_STATUS.ABANDONED;
319
+ log('info', `PR ${pr.id} returned 404 — marking abandoned`);
320
+ return true;
321
+ }
322
+ return false;
323
+ }
308
324
 
309
325
  let updated = false;
310
326
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1020",
3
+ "version": "0.1.1021",
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"