@martintrojer/mu 0.4.1 → 0.4.2

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.
@@ -393,6 +393,44 @@ form `<workstream>/<id>` when a global scope is needed. Blocks-edges
393
393
  are always same-workstream — if a blocker resolves outside the target
394
394
  workstream, mu refuses with a `CrossWorkstreamEdgeError`.
395
395
 
396
+ ### Modeling external dependencies
397
+
398
+ When a task is waiting on something outside this repo (an upstream PR
399
+ shipping, a vendor releasing v3 of an API, a coworker's review), don't
400
+ reach for a new status — add a **placeholder task** for the external
401
+ thing and `--blocked-by` it. The DAG already encodes "blocked":
402
+
403
+ ```bash
404
+ mu task add upstream_react_19_lands -w gchatui-node \
405
+ --title "Wait for React 19 release (vendor)" \
406
+ --impact 30 --effort-days 0.1
407
+ mu task note upstream_react_19_lands -w gchatui-node \
408
+ "Tracking https://github.com/facebook/react/issues/...
409
+ Last checked: 2026-05-15.
410
+ When this lands: bump react in package.json + re-run upgrade tasks."
411
+
412
+ mu task add migrate_to_use_action -w gchatui-node \
413
+ --title "Migrate ChatInput to React 19 useActionState" \
414
+ --impact 60 --effort-days 1 \
415
+ --blocked-by upstream_react_19_lands
416
+ ```
417
+
418
+ When the upstream lands, `mu task close upstream_react_19_lands
419
+ --evidence "shipped 2026-08-12"` — the dependent flips from blocked
420
+ to ready in the same render. If the upstream gets cancelled, `mu task
421
+ reject upstream_react_19_lands --cascade --yes` propagates REJECTED
422
+ through every dependent so you re-think the cascade explicitly.
423
+
424
+ Benefits over a hypothetical `BLOCKED` status:
425
+
426
+ - The placeholder's notes are the audit trail ("who I nudged, when").
427
+ - One placeholder cleanly blocks N downstream tasks.
428
+ - Reject cascade just works.
429
+ - No new vocabulary; anyone who knows `--blocked-by` already knows this.
430
+ - The placeholder's own status carries nuance (`OPEN` = someone
431
+ external is working it, `DEFERRED` = parked indefinitely,
432
+ `IN_PROGRESS` = you're actively chasing it).
433
+
396
434
  ---
397
435
 
398
436
  ## 5. See the graph (dashboard + state API)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@martintrojer/mu",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "A persistent, observable crew of pi agents running in one tmux session per workstream, coordinated through a built-in task DAG.",
5
5
  "publishConfig": {
6
6
  "access": "public"