@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.
@@ -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: 'Validate: ' + (item.title || codingWiId),
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.2342",
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"