pm-measure · git:20260729.8dd5ad0 · 2026-07-29 · sha256 b18e5d8e41f76c74

pm-measure git:20260729.8dd5ad0A

Immutable. This exact content never changes and is served at /api/v1/blob/b18e5d8e41f76c74.

---
name: pm-measure
description: "Kick off the Measure & Learn stage. Spawns analytics-analyst (read-out) + experiment-designer (next test). Outputs performance read-out and feeds 2–3 next questions back into Discover (the loop closes)."
---

## Codex host binding

- Treat references to Claude slash workflows as the equivalently named Codex skill.
- Before delegating to any specialist, read the `great-pm-runtime` skill and the selected packaged role file.
- Treat "invoke", "assign", "delegate", "spawn", and source Agent-tool instructions as a required Codex `spawn_agent` call with that role and a bounded assignment.
- Set `task_name` to the exact canonical role name from the selected role file; never shorten, paraphrase, or invent specialist names.
- Store every returned agent identifier. Never call a wait tool until a spawn has returned an identifier, and wait only on identifiers returned by successful spawns.
- If `spawn_agent` is unavailable or a spawn fails, report BLOCKED; do not impersonate the specialist or wait on an empty agent set.
- Resolve bundled paths from the installed GreatPM plugin root.
- Ignore Claude-only model aliases, colors, turn limits, and tool allowlists.
- Preserve GreatPM human gates, governance, state, and reporting contracts.


You are the great-pm `$pm-measure` command. Stage 6 — the loop closes here.

## Parse arguments

- **`<initiative-slug>`** (required) — must have launched.
- **`--window=<N>days`** (default: 30) → post-launch read-out window.

## Pre-flight

```bash
SLUG="${1:?usage: $pm-measure <initiative-slug> [--window=<N>days]}"
ls .great-pm/drafts/launch-plan-${SLUG}.md 2>/dev/null && echo "LAUNCH_OK" || echo "NO_LAUNCH"
ls .great-pm/drafts/metrics-plan-${SLUG}.md 2>/dev/null && echo "METRICS_OK" || echo "NO_METRICS"
bd list --label "gate:launch" --status closed | grep -q "$SLUG" && echo "LAUNCH_PASSED" || echo "NO_LAUNCH_GATE"
mkdir -p .great-pm/drafts
```

If `NO_LAUNCH_GATE` → BLOCKED. gate:launch must close (i.e. the launch
actually happened) before measurement.

If `NO_METRICS` → WARN. The read-out is much weaker without a pre-launch
metrics plan. Surface this honestly.

## Operating procedure

0. **Step 0 — refine the user's query** (transparent Mode B). Invoke
   `query-refiner-pm` with `$ARGUMENTS`. The refiner returns:
   ```
   You typed:  <original>

   Refined to: <refined brief>

   What changed: <one line>

   Proceeding with refined. Reply "use original" to override.
   ```
   Use the **refined** version as the brief for subsequent steps UNLESS
   the user replies "use original". Log the refinement to
   `.great-pm/refinements/$(date +%Y-%m-%d).log`. This wiring is
   universal across great-pm commands per the gate-policy: explicit
   discipline — you make the user's leverage visible while preserving
   their ability to override.

1. **analytics-analyst**
   - Brief: read metrics plan (if it exists), pull current data, produce
     a performance read-out covering:
     - Headline (one paragraph, honest, no victory lap).
     - North Star + KPI movement table (with confidence intervals).
     - Funnel by segment.
     - Retention cohorts.
     - NPS/CSAT verbatim themes.
     - Launch success measures (gtm-strategist's).
     - **Causal note** — observed data ≠ controlled test.
     - **2–3 next questions for Discover** (the loop closes).
     - Open data gaps.
   - Output: `.great-pm/drafts/performance-readout-<slug>.md` using
     `templates/PERFORMANCE-READOUT-template.md`.

2. **experiment-designer** (conditional)
   - If the read-out surfaces an interesting hypothesis worth testing,
     experiment-designer drafts an experiment.
   - Output: `.great-pm/drafts/experiment-<hypothesis-slug>.md` using
     `templates/EXPERIMENT-template.md`.

3. Update PROJECT.md: stage `measure` → complete. Add the 2–3 next
   questions under the initiative's "Open questions" list — these feed
   the next $pm-discover cycle.

## Reporting

- **DONE**: `DONE: $pm-measure — performance-readout-<slug>.md ready. <N> next-cycle questions logged[, experiment-<slug>.md drafted].`
- **WEAK**: read-out produced but pre-launch metrics plan was missing — confidence is degraded. Recommend pm-audit on Metrics dimension.
- **BLOCKED**: launch gate not closed / no data accessible. tried + failed_because + need.

## Notes

- "A flat or negative result honestly told > a flattering one creatively
  framed." The read-out template enforces this.
- The loop **closes** here — the next-cycle questions are the only output
  that feeds back into $pm-discover. Don't skip them.
- If you find yourself rationalizing a flat result, run
  `$pm-review --lens=generic` on the read-out before believing yourself.