@yemi33/minions 0.1.645 → 0.1.646
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/pipeline.js +13 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.646 (2026-04-09)
|
|
4
4
|
|
|
5
5
|
### Features
|
|
6
6
|
- pipeline plan stage reconciliation and UX fixes
|
|
7
7
|
- track notes, plans, and PRDs as work item artifacts
|
|
8
8
|
|
|
9
9
|
### Fixes
|
|
10
|
+
- pipeline plan reconciliation slug match used wrong naming convention
|
|
10
11
|
- use startsWith for inbox note matching to prevent false matches
|
|
11
12
|
|
|
12
13
|
## 0.1.642 (2026-04-09)
|
package/engine/pipeline.js
CHANGED
|
@@ -296,14 +296,21 @@ function _findMeetingsInRun(run) {
|
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
// Check if a plan already exists for a given meeting (created manually via dashboard)
|
|
299
|
-
function _findExistingPlanForMeeting(meetingIds,
|
|
299
|
+
function _findExistingPlanForMeeting(meetingIds, plansDir) {
|
|
300
300
|
const files = safeReadDir(plansDir).filter(f => f.endsWith('.md'));
|
|
301
|
-
|
|
301
|
+
// Build slug prefixes for both pipeline and dashboard naming conventions
|
|
302
|
+
const slugPrefixes = [];
|
|
303
|
+
for (const mid of meetingIds) {
|
|
304
|
+
const mtg = safeJson(path.join(__dirname, '..', 'meetings', mid + '.json'));
|
|
305
|
+
if (mtg?.title) {
|
|
306
|
+
// Dashboard convention: "Meeting follow-up: {title}" → slug
|
|
307
|
+
const dashSlug = ('meeting-follow-up-' + mtg.title).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 50);
|
|
308
|
+
slugPrefixes.push(dashSlug.slice(0, 30));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
302
311
|
let slugMatch = null;
|
|
303
312
|
for (const file of files) {
|
|
304
|
-
|
|
305
|
-
if (!slugMatch && file.startsWith(slugPrefix)) slugMatch = file;
|
|
306
|
-
// Primary: explicit Source Meeting header (written by dashboard /api/plans/create)
|
|
313
|
+
if (!slugMatch && slugPrefixes.some(p => file.startsWith(p))) slugMatch = file;
|
|
307
314
|
const content = safeRead(path.join(plansDir, file));
|
|
308
315
|
if (!content) continue;
|
|
309
316
|
for (const mid of meetingIds) {
|
|
@@ -324,7 +331,7 @@ async function executePlanStage(stage, stageState, run, config) {
|
|
|
324
331
|
// ── Reconciliation: check if a plan already exists for a meeting in this run ──
|
|
325
332
|
const meetingIds = _findMeetingsInRun(run);
|
|
326
333
|
if (meetingIds.length > 0) {
|
|
327
|
-
const existingPlanFile = _findExistingPlanForMeeting(meetingIds,
|
|
334
|
+
const existingPlanFile = _findExistingPlanForMeeting(meetingIds, plansDir);
|
|
328
335
|
if (existingPlanFile) {
|
|
329
336
|
log('info', `Pipeline ${run.pipelineId}: reconciling plan stage — adopting existing plan "${existingPlanFile}"`);
|
|
330
337
|
// Adopt or create plan-to-prd WI atomically under lock
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.646",
|
|
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"
|