@groundnuty/macf 0.2.20 → 0.2.21

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.
@@ -1,4 +1,4 @@
1
1
  {
2
- "commit": "76932f8e3480970967df7039b72429ef12c9fab4",
3
- "built_at": "2026-05-04T16:52:56.712Z"
2
+ "commit": "09ffe6fde18d7c632ded0cca08d7c6a31e02a154",
3
+ "built_at": "2026-05-04T17:46:55.150Z"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groundnuty/macf",
3
- "version": "0.2.20",
3
+ "version": "0.2.21",
4
4
  "description": "Multi-Agent Coordination Framework CLI — coordinate Claude Code agents via GitHub. Installs as `macf` binary; use `macf init` to set up an agent workspace, `macf update` to refresh rules + version pins.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,7 +35,7 @@
35
35
  "test:watch": "vitest"
36
36
  },
37
37
  "dependencies": {
38
- "@groundnuty/macf-core": "0.2.20",
38
+ "@groundnuty/macf-core": "0.2.21",
39
39
  "commander": "^14.0.3",
40
40
  "reflect-metadata": "^0.2.2",
41
41
  "zod": "^4.0.0"
@@ -73,7 +73,9 @@ The structural retirement applies to consumer fleet only; substrate fleet expect
73
73
  **Surface:** `type: "mcp_tool"` Stop hook + `notify_peer` broadcast tool deployed end-to-end (DR-023 UC-1)
74
74
  **Failure shape:** Each individual operation succeeds at the API boundary (HTTP 200 from `/notify`, MCP push completed, `tmux_wake_delivered` logged). But the protocol has no termination condition for "peer notification triggers fresh turn → fresh turn fires Stop hook → Stop hook notifies peer." The platform's same-agent recursion guard (`(server, tool, input)` deduplication) catches recursion inside a single agent's MCP context; cross-agent recursion bypasses dedup because each agent has its own dispatcher state. Empirical observation: 8 cycles in 50s before manual termination.
75
75
  **Architectural origin:** design-assumption mismatch — peer notifications were intended as informational (no auto-action) but the receiver's `/notify` handler triggered tmux-wake-on-receipt, turning notifications into programmatic prompts.
76
- **Structural defense:** Pattern E (type-discriminator at receiver) shipped in macf v0.2.4 `server.ts` `onNotify` discriminates by payload type. `peer_notification` MCP push only, tmux wake SKIPPED with explicit log entry. Other `NotifyType`s (`issue_routed`, `mention`, etc.) preserve current wake-on-receipt behavior. Verified via clean post-fix trace (single 3-span trace where the prior version had 8 alternating cross-agent spans).
76
+ **Structural defense:** Pattern E (event-discriminator at receiver) shipped in macf v0.2.4 (initial type-based form) → refined to event-based discrimination in v0.2.21 (macf#355). Receiver's `decideWake()` reads the payload's `event` field directly: `event: 'custom'` (operator-driven slash-command per macf#350) wakes the receiver TUI; autonomous events (`session-end` / `turn-complete` / `error` from Stop-hook flows) skip wake with explicit log entry. Other `NotifyType`s (`issue_routed`, `mention`, `ci_completion`, `pr_review_state`, `startup_check`) preserve current wake-on-receipt behavior. Verified via clean post-fix trace (single 3-span trace where the prior version had 8 alternating cross-agent spans).
77
+
78
+ The v0.2.21 refinement (#355) replaced an interim `wake?: boolean` payload field (#351) with event-based discrimination. The boolean leaked Pattern E loop-prevention logic into every sender's API surface; the cleaner design keeps the policy at the receiver and reads from a property that's already present for other reasons (`event`). One-release-cycle window (v0.2.20 → v0.2.21 was 30 minutes) made the fast-follow refactor possible without a deprecation cycle.
77
79
 
78
80
  ### Instance 7 — OTel-counter cumulative-state assumption violated by short-lived process lifecycle
79
81