@yemi33/minions 0.1.2342 → 0.1.2343
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/engine/lifecycle.js +27 -1
- package/package.json +1 -1
package/engine/lifecycle.js
CHANGED
|
@@ -6758,10 +6758,26 @@ function collapseAllDuplicatePrRecords(config) {
|
|
|
6758
6758
|
// meta.liveValidationFor === codingWiId AND meta.liveValidationType === type
|
|
6759
6759
|
// blocks a second dispatch of that specific type, so multiple configured
|
|
6760
6760
|
// types don't collide or skip each other.
|
|
6761
|
+
//
|
|
6762
|
+
// W-mr9u39az000db5c2 — guard against a self-referential recursive cascade.
|
|
6763
|
+
// When liveValidation.type overlaps with a coding WI's own type set (e.g.
|
|
6764
|
+
// ["test","verify","setup"] configured on a project that ALSO dispatches
|
|
6765
|
+
// "setup"/"test"/"fix" coding work), a completed validation WI (type
|
|
6766
|
+
// "setup") is itself a WI whose type is in liveValidation.type. The old
|
|
6767
|
+
// item.type-only filter let that validation WI's own completion re-trigger
|
|
6768
|
+
// this hook and spawn ANOTHER validation WI (title-prefixed "Validate:
|
|
6769
|
+
// Validate: ..."), repeating indefinitely. Any WI that was itself created
|
|
6770
|
+
// as a liveValidation follow-up (tagged via meta.liveValidationFor at
|
|
6771
|
+
// creation, below) must never re-trigger this hook, regardless of its type.
|
|
6761
6772
|
function autoDispatchLiveValidationWi(meta, config) {
|
|
6762
6773
|
const item = meta?.item;
|
|
6763
6774
|
if (!item?.id || !item?.type) return;
|
|
6764
6775
|
|
|
6776
|
+
// Never re-trigger off the completion of a WI that was itself auto-created
|
|
6777
|
+
// as a live-validation follow-up — that's what causes the infinite
|
|
6778
|
+
// "Validate: Validate: ..." cascade (W-mr9u39az000db5c2 / issue #708).
|
|
6779
|
+
if (item.meta && item.meta.liveValidationFor) return;
|
|
6780
|
+
|
|
6765
6781
|
const projectName = meta?.project?.name;
|
|
6766
6782
|
if (!projectName) return;
|
|
6767
6783
|
|
|
@@ -6819,9 +6835,19 @@ function autoDispatchLiveValidationWi(meta, config) {
|
|
|
6819
6835
|
continue;
|
|
6820
6836
|
}
|
|
6821
6837
|
|
|
6838
|
+
const proposedTitle = 'Validate: ' + (item.title || codingWiId);
|
|
6839
|
+
// Defense-in-depth (belt-and-suspenders alongside the meta.liveValidationFor
|
|
6840
|
+
// guard above): never create a doubly-nested "Validate: Validate: ..."
|
|
6841
|
+
// title even if some future caller manages to invoke this function
|
|
6842
|
+
// directly on an already-validation-tagged item.
|
|
6843
|
+
if (/^Validate:\s*Validate:/.test(proposedTitle)) {
|
|
6844
|
+
log('warn', `liveValidation: refusing to create nested "Validate: Validate:" WI for ${codingWiId} (type=${validationType})`);
|
|
6845
|
+
continue;
|
|
6846
|
+
}
|
|
6847
|
+
|
|
6822
6848
|
const validationWi = {
|
|
6823
6849
|
id: 'W-' + shared.uid(),
|
|
6824
|
-
title:
|
|
6850
|
+
title: proposedTitle,
|
|
6825
6851
|
type: validationType,
|
|
6826
6852
|
status: WI_STATUS.PENDING,
|
|
6827
6853
|
depends_on: [codingWiId],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yemi33/minions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2343",
|
|
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"
|