@event4u/agent-config 2.7.0 → 2.9.0
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/.agent-src/personas/cmo.md +122 -0
- package/.agent-src/personas/customer-success-lead.md +126 -0
- package/.agent-src/personas/engineering-manager.md +133 -0
- package/.agent-src/personas/finance-partner.md +129 -0
- package/.agent-src/personas/growth-pm.md +134 -0
- package/.agent-src/personas/people-strategist.md +126 -0
- package/.agent-src/personas/revops.md +125 -0
- package/.agent-src/personas/strategist.md +129 -0
- package/.agent-src/skills/activation-design/SKILL.md +160 -0
- package/.agent-src/skills/build-buy-partner/SKILL.md +145 -0
- package/.agent-src/skills/churn-prevention/SKILL.md +156 -0
- package/.agent-src/skills/comp-banding/SKILL.md +160 -0
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +152 -0
- package/.agent-src/skills/content-funnel-design/SKILL.md +170 -0
- package/.agent-src/skills/contracts-cognition/SKILL.md +147 -0
- package/.agent-src/skills/data-handling-judgment/SKILL.md +155 -0
- package/.agent-src/skills/deal-qualification-meddic/SKILL.md +165 -0
- package/.agent-src/skills/editorial-calendar/SKILL.md +161 -0
- package/.agent-src/skills/expansion-playbook/SKILL.md +171 -0
- package/.agent-src/skills/forecast-accuracy/SKILL.md +157 -0
- package/.agent-src/skills/forecasting/SKILL.md +164 -0
- package/.agent-src/skills/fundraising-narrative/SKILL.md +189 -0
- package/.agent-src/skills/funnel-analysis/SKILL.md +26 -2
- package/.agent-src/skills/gtm-launch/SKILL.md +165 -0
- package/.agent-src/skills/hiring-loop-design/SKILL.md +167 -0
- package/.agent-src/skills/market-entry-analysis/SKILL.md +144 -0
- package/.agent-src/skills/messaging-architecture/SKILL.md +184 -0
- package/.agent-src/skills/onboarding-design/SKILL.md +158 -0
- package/.agent-src/skills/onboarding-program/SKILL.md +157 -0
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +161 -0
- package/.agent-src/skills/org-design/SKILL.md +158 -0
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +157 -0
- package/.agent-src/skills/pipeline-strategy/SKILL.md +159 -0
- package/.agent-src/skills/positioning-strategy/SKILL.md +177 -0
- package/.agent-src/skills/privacy-review/SKILL.md +160 -0
- package/.agent-src/skills/retention-loops/SKILL.md +161 -0
- package/.agent-src/skills/runway-cognition/SKILL.md +136 -0
- package/.agent-src/skills/scenario-modeling/SKILL.md +139 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +165 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +54 -7
- package/.agent-src/skills/vision-articulation/SKILL.md +146 -0
- package/.agent-src/skills/voice-and-tone-design/SKILL.md +163 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/scripts/telemetry/settings.py +65 -0
- package/.agent-src/templates/scripts/tier_usage_report.py +183 -0
- package/.claude-plugin/marketplace.json +34 -2
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +135 -153
- package/README.md +3 -3
- package/docs/architecture.md +37 -11
- package/docs/archive/CHANGELOG-pre-2.7.0.md +185 -0
- package/docs/catalog.md +38 -4
- package/docs/contracts/adr-forecast-construction-shape.md +89 -0
- package/docs/contracts/adr-gtm-context-spine.md +115 -0
- package/docs/contracts/adr-wing4-context-spine.md +125 -0
- package/docs/contracts/command-clusters.md +41 -0
- package/docs/contracts/command-surface-tiers.md +30 -9
- package/docs/contracts/context-spine.md +58 -12
- package/docs/contracts/cross-wing-handoff.md +3 -3
- package/docs/contracts/mcp-beta-criteria.md +129 -0
- package/docs/contracts/persona-schema.md +20 -3
- package/docs/guidelines/gtm-handoff.md +114 -0
- package/docs/guidelines/wing4-handoff.md +127 -0
- package/docs/mcp-server.md +1 -1
- package/package.json +1 -1
- package/scripts/_cli/cmd_doctor.py +527 -14
- package/scripts/_cli/cmd_validate.py +10 -0
- package/scripts/agent-config +19 -18
- package/scripts/install.py +5 -0
- package/scripts/lint_context_spine_usage.py +5 -1
- package/scripts/mcp_server/__init__.py +1 -0
- package/scripts/mcp_server/server.py +4 -3
- package/scripts/schemas/persona.schema.json +5 -0
- package/scripts/schemas/skill.schema.json +2 -2
- package/scripts/skill_linter.py +284 -6
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: editorial-calendar
|
|
3
|
+
description: "Use when shaping cadence — evergreen / campaign / reactive split, beat-mapping across channel stages, content-debt management. Triggers on 'plan our content cadence', 'what should we publish'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
context_spine: [product, customer-segment, channel-stage, funnel-stage]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# editorial-calendar
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- A content programme is producing assets in bursts (campaign-shaped only) and the cadence is brittle the quarter the campaign rests.
|
|
16
|
+
- The team owes more drafts than it can ship and the backlog is functioning as content-debt rather than queue — surface and prioritise.
|
|
17
|
+
- A new audience-by-message matrix exists and the team needs to translate it into a repeating cadence with beat-mapping across channel stages.
|
|
18
|
+
|
|
19
|
+
Do NOT use to draft the asset itself (downstream), pick channel-
|
|
20
|
+
specific tactics like ad creative or email subject lines (out of
|
|
21
|
+
scope — channel-agnostic skill), or sequence a one-off launch wave
|
|
22
|
+
(route to `gtm-launch`).
|
|
23
|
+
|
|
24
|
+
## Cognition cluster
|
|
25
|
+
|
|
26
|
+
- **Mental model 3 — Pareto principle (80/20).** Roughly 20 % of
|
|
27
|
+
the editorial beats produce 80 % of the audience pull. The
|
|
28
|
+
calendar is the discipline of doubling down on the 20 % and
|
|
29
|
+
letting the 80 % be reactive, not core. See
|
|
30
|
+
[`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 3.
|
|
31
|
+
- **Mental model 18 — Pull vs. push systems.** Evergreen content is
|
|
32
|
+
a *pull* system (the audience finds it); campaigns are a *push*
|
|
33
|
+
system (we time the arrival). The calendar separates the two so
|
|
34
|
+
campaign collapse does not collapse pull. See `mental-models.md`
|
|
35
|
+
§ 18.
|
|
36
|
+
- **Context-spine — product + customer-segment + channel-stage +
|
|
37
|
+
funnel-stage.** Read **product** for what is shippable as proof,
|
|
38
|
+
**customer-segment** for who reads which beat, **channel-stage**
|
|
39
|
+
for where the audience is in the awareness arc, and
|
|
40
|
+
**funnel-stage** for whether a beat is top-of-funnel reach or
|
|
41
|
+
mid-funnel proof. See
|
|
42
|
+
[`context-spine`](../../../docs/contracts/context-spine.md).
|
|
43
|
+
|
|
44
|
+
## Procedure
|
|
45
|
+
|
|
46
|
+
### Step 0: Inherit the message stack and audience matrix
|
|
47
|
+
|
|
48
|
+
Identify the locked `primary-message.md`, `supporting-proofs.md`,
|
|
49
|
+
and `audience-matrix.md` from
|
|
50
|
+
[`messaging-architecture`](../messaging-architecture/SKILL.md). The
|
|
51
|
+
editorial calendar is a cadence translation of the matrix; without
|
|
52
|
+
the matrix it is content-as-impulse, not content-as-system.
|
|
53
|
+
|
|
54
|
+
### Step 1: Analyze the inherited cadence
|
|
55
|
+
|
|
56
|
+
Review existing surfaces: what has the team published in the last
|
|
57
|
+
two quarters, what is its evergreen pull (organic traffic over
|
|
58
|
+
time), and what was campaign-only (a single spike and decay). The
|
|
59
|
+
output is two lists: *load-bearing evergreen* and *campaign
|
|
60
|
+
artefacts that have already paid back*. Everything else is content
|
|
61
|
+
debt — name it explicitly.
|
|
62
|
+
|
|
63
|
+
### Step 2: Classify each beat — evergreen · campaign · reactive
|
|
64
|
+
|
|
65
|
+
Three buckets, never collapsed:
|
|
66
|
+
|
|
67
|
+
- **Evergreen.** Beats that map to a load-bearing proof and a
|
|
68
|
+
durable audience question. Authored once, refreshed quarterly.
|
|
69
|
+
Pull system.
|
|
70
|
+
- **Campaign.** Beats keyed to a wave (launch, event, season).
|
|
71
|
+
Authored to a date. Push system. Decommissioned by name when the
|
|
72
|
+
wave closes.
|
|
73
|
+
- **Reactive.** Beats keyed to a market or competitor event. No
|
|
74
|
+
pre-allocated slot; the calendar reserves *capacity*, not a
|
|
75
|
+
topic.
|
|
76
|
+
|
|
77
|
+
### Step 3: Beat-map across channel-stage × funnel-stage
|
|
78
|
+
|
|
79
|
+
For each audience in the matrix, plot **one** evergreen beat per
|
|
80
|
+
*(channel-stage, funnel-stage)* cell that the audience actually
|
|
81
|
+
lives in. Empty cells are explicit gaps; they do not auto-fill.
|
|
82
|
+
Beats per cell beyond one are content noise, not coverage.
|
|
83
|
+
|
|
84
|
+
### Step 4: Validate against the Pareto cut and the pull-vs-push line
|
|
85
|
+
|
|
86
|
+
Validate the calendar on three checks:
|
|
87
|
+
|
|
88
|
+
1. **Pareto cut.** Identify the 20 % of beats that, if dropped,
|
|
89
|
+
would visibly shrink audience pull. Verify exactly that 20 % has
|
|
90
|
+
the highest authoring investment. If high investment is going
|
|
91
|
+
into the 80 %, the calendar is upside-down — rebalance.
|
|
92
|
+
2. **Pull-vs-push separation.** Confirm campaign collapse does not
|
|
93
|
+
collapse evergreen — evergreen surfaces are not on the campaign
|
|
94
|
+
author's critical path.
|
|
95
|
+
3. **Reactive capacity.** Confirm reactive slots reserve hours, not
|
|
96
|
+
topics. A reactive slot with a pre-decided topic is a campaign
|
|
97
|
+
in disguise.
|
|
98
|
+
|
|
99
|
+
### Step 5: Manage content debt explicitly
|
|
100
|
+
|
|
101
|
+
Inventory the debt list from Step 1. For each item: *repay*
|
|
102
|
+
(refresh and republish), *archive* (remove from indexed surfaces),
|
|
103
|
+
or *retire* (delete). Untouched debt compounds — it is not free to
|
|
104
|
+
leave on the shelf.
|
|
105
|
+
|
|
106
|
+
### Step 6: Hand back
|
|
107
|
+
|
|
108
|
+
Hand the artefacts to [`content-funnel-design`](../content-funnel-design/SKILL.md)
|
|
109
|
+
for funnel-stage-to-shape mapping, and to
|
|
110
|
+
[`release-comms`](../release-comms/SKILL.md) when campaign waves
|
|
111
|
+
land near a launch wave from
|
|
112
|
+
[`gtm-launch`](../gtm-launch/SKILL.md).
|
|
113
|
+
|
|
114
|
+
## Related Skills
|
|
115
|
+
|
|
116
|
+
**WHEN to use this**
|
|
117
|
+
|
|
118
|
+
- The unit of work is the *cadence* (which beats repeat at which frequency on which surface), not a single asset.
|
|
119
|
+
- A team is over-investing in campaigns and under-investing in evergreen pull.
|
|
120
|
+
- A content-debt list is silently growing and needs explicit repay / archive / retire decisions.
|
|
121
|
+
|
|
122
|
+
**WHEN NOT to use this**
|
|
123
|
+
|
|
124
|
+
- Mapping each funnel stage to a content **shape** (deep-dive, comparison, demo) — route to [`content-funnel-design`](../content-funnel-design/SKILL.md).
|
|
125
|
+
- Drafting voice attributes or tone-by-context matrix — route to [`voice-and-tone-design`](../voice-and-tone-design/SKILL.md).
|
|
126
|
+
- Sequencing a launch wave with gates and beats — route to [`gtm-launch`](../gtm-launch/SKILL.md).
|
|
127
|
+
- Authoring the asset copy — out of scope here (downstream).
|
|
128
|
+
|
|
129
|
+
## When the agent should load this
|
|
130
|
+
|
|
131
|
+
- "Build us an editorial calendar for the next two quarters."
|
|
132
|
+
- "Wir produzieren zu viele Kampagnen-Artefakte — wo ist die Evergreen-Linie?"
|
|
133
|
+
- "Beat-map the cadence against the audience matrix."
|
|
134
|
+
- "What is our content-debt list and what do we repay first?"
|
|
135
|
+
- "Reactive capacity is full of pre-planned topics — fix the calendar."
|
|
136
|
+
|
|
137
|
+
## Output
|
|
138
|
+
|
|
139
|
+
1. **`cadence-classification.md`** — every active beat tagged evergreen · campaign · reactive · debt, with the Pareto-cut ranking inside the evergreen bucket.
|
|
140
|
+
2. **`beat-map.md`** — audience × channel-stage × funnel-stage grid with one evergreen beat per occupied cell, empty cells explicitly named as gaps.
|
|
141
|
+
3. **`content-debt-ledger.md`** — every debt item with a *repay*, *archive*, or *retire* decision and the date it lapses.
|
|
142
|
+
|
|
143
|
+
## Gotcha
|
|
144
|
+
|
|
145
|
+
- "We are evergreen-first" is the most common self-description and almost never true on the calendar — verify by authoring investment, not intent.
|
|
146
|
+
- Reactive capacity that is full of pre-planned topics is campaign capacity wearing reactive clothing; the calendar will betray that mid-quarter.
|
|
147
|
+
- Content debt with no archive / retire date is a roadmap pretending to be a queue. Refuse the open-ended *"we will get to it"* row.
|
|
148
|
+
|
|
149
|
+
## Do NOT
|
|
150
|
+
|
|
151
|
+
- Do NOT draft channel-specific tactics (subject lines, ad creative, video specs) — the calendar is channel-agnostic; tactics live with the channel owner.
|
|
152
|
+
- Do NOT collapse campaign and evergreen on the same critical path — campaign delay should not stall evergreen publish.
|
|
153
|
+
- Do NOT inflate beats past one per matrix cell; the cadence will not survive a quarter of vacation.
|
|
154
|
+
|
|
155
|
+
## Runnable example
|
|
156
|
+
|
|
157
|
+
Mid-market HR analytics tool, audience matrix locked (HR director · CFO · IT-security):
|
|
158
|
+
|
|
159
|
+
- Cadence classification — evergreen (4 beats, Pareto-cut top 2 carry pull); campaign (2 beats keyed to board-quarter launch wave); reactive (8 hours per fortnight reserved); debt (11 items: 5 repay, 4 archive, 2 retire).
|
|
160
|
+
- Beat-map — HR director (mid-funnel proof): one cohort-retention deep-dive per quarter. CFO (decision-funnel proof): one ROI calculator refresh per board-quarter. IT-security (top-funnel awareness): one HRIS-integration architecture explainer evergreen.
|
|
161
|
+
- Hand-off → `content-funnel-design` translates each beat into its content shape; `release-comms` co-schedules board-quarter campaign with launch waves.
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expansion-playbook
|
|
3
|
+
description: "Use when designing account-expansion mechanics — upsell vs cross-sell, expansion-trigger signals, NRR cognition. Triggers on 'lift NRR', 'when do we upsell vs cross-sell'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
context_spine: [product, customer-segment]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# expansion-playbook
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- Net Revenue Retention plateaued and the team cannot name *which* expansion lever drives it — upsell, cross-sell, and seat-expansion get conflated under *"NRR"* and the moves are uniform when they should be lever-specific.
|
|
16
|
+
- An expansion play is firing on usage signals alone — accounts using more seats are treated as expansion targets without checking the upstream pain that earned the expansion.
|
|
17
|
+
- A new pricing or packaging change is live and the team needs to re-key the expansion triggers to the new shape before the old triggers misfire.
|
|
18
|
+
|
|
19
|
+
Do NOT use to save churning accounts (route to
|
|
20
|
+
`churn-prevention`), design days 0–30 onboarding (route to
|
|
21
|
+
`onboarding-design`), or build product-led seat-expansion loops
|
|
22
|
+
unattended by a human play (route to `retention-loops`).
|
|
23
|
+
|
|
24
|
+
## Cognition cluster
|
|
25
|
+
|
|
26
|
+
- **Mental model 18 — Pull vs. push.** Expansion that the buyer
|
|
27
|
+
pulls (because pain or scope grew) compounds; expansion the
|
|
28
|
+
vendor pushes (because the quarter needs the number) corrodes
|
|
29
|
+
the relationship and inflates churn the next cycle. Pick the
|
|
30
|
+
trigger that signals pull. See
|
|
31
|
+
[`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 18.
|
|
32
|
+
- **Mental model 9 — Hypothesis-driven thinking.** Each expansion
|
|
33
|
+
trigger is a hypothesis: *"if signal X is true, the buyer will
|
|
34
|
+
accept expansion Y at price Z."* Triggers without falsification
|
|
35
|
+
evidence are wishes; if a trigger has misfired three times, the
|
|
36
|
+
trigger is wrong, not the buyer. See `mental-models.md` § 9.
|
|
37
|
+
- **Mental model 3 — Pareto (80/20).** ~20 % of accounts carry
|
|
38
|
+
~80 % of expansion potential. Uniform expansion outreach across
|
|
39
|
+
the book is noise; weighted outreach by pull-signal strength is
|
|
40
|
+
reasoning. See `mental-models.md` § 3.
|
|
41
|
+
- **Context-spine — product + customer-segment.** Read the
|
|
42
|
+
**product** slot for which capabilities the segment can absorb
|
|
43
|
+
next (sequencing matters — a cross-sell into a feature the
|
|
44
|
+
segment cannot use yet inflates churn), and the
|
|
45
|
+
**customer-segment** slot for switch-event patterns that signal
|
|
46
|
+
organic scope expansion. See
|
|
47
|
+
[`context-spine`](../../../docs/contracts/context-spine.md).
|
|
48
|
+
|
|
49
|
+
## Procedure
|
|
50
|
+
|
|
51
|
+
### Step 0: Inspect — separate upsell, cross-sell, seat-expansion
|
|
52
|
+
|
|
53
|
+
Inspect the trailing four quarters of expansion $ and decompose:
|
|
54
|
+
|
|
55
|
+
1. **Upsell** — same product family, higher tier (more seats at same SKU, premium tier of same SKU).
|
|
56
|
+
2. **Cross-sell** — different product family or SKU.
|
|
57
|
+
3. **Seat-expansion** — same SKU, more users, no tier change.
|
|
58
|
+
|
|
59
|
+
Compute each lever's $ contribution and NRR contribution. A book
|
|
60
|
+
treating these as one number cannot diagnose which lever is
|
|
61
|
+
broken.
|
|
62
|
+
|
|
63
|
+
### Step 1: Define one expansion trigger per lever, pull-signalled
|
|
64
|
+
|
|
65
|
+
Each trigger is a *buyer-side pull signal* with falsifiable
|
|
66
|
+
evidence:
|
|
67
|
+
|
|
68
|
+
1. **Upsell trigger** — buyer crosses tier-defining usage ceiling
|
|
69
|
+
(e.g. seats > X, or feature-X-usage > Y) sustained for ≥ 30 days.
|
|
70
|
+
2. **Cross-sell trigger** — buyer requests a capability that lives
|
|
71
|
+
in an adjacent SKU **twice in 60 days**, by two different
|
|
72
|
+
contacts, in writing.
|
|
73
|
+
3. **Seat-expansion trigger** — admin invites N new users in a
|
|
74
|
+
rolling 30-day window AND health-score (from `churn-prevention`)
|
|
75
|
+
is green.
|
|
76
|
+
|
|
77
|
+
Triggers that misfire three times in a quarter become Step 0
|
|
78
|
+
diagnoses next quarter; do not patch them inside the quarter.
|
|
79
|
+
|
|
80
|
+
### Step 2: Map lever → play
|
|
81
|
+
|
|
82
|
+
Each lever gets one default play and one disqualifier:
|
|
83
|
+
|
|
84
|
+
- **Upsell** — quarterly business review surfacing the usage
|
|
85
|
+
ceiling; tier-upgrade proposal with proof-of-value. Disqualifier:
|
|
86
|
+
account on red health score (route to `churn-prevention`).
|
|
87
|
+
- **Cross-sell** — capability-fit discovery call with sponsor +
|
|
88
|
+
user; pilot before contract change. Disqualifier: cross-sell SKU
|
|
89
|
+
not GA for the segment.
|
|
90
|
+
- **Seat-expansion** — admin co-pilot session + group onboarding
|
|
91
|
+
for new seats. Disqualifier: utilisation on existing seats
|
|
92
|
+
< 40 % (you would be selling decay).
|
|
93
|
+
|
|
94
|
+
### Step 3: Sequence multi-lever opportunities
|
|
95
|
+
|
|
96
|
+
If two triggers fire on the same account in the same quarter:
|
|
97
|
+
sequence **upsell before cross-sell** (compound the contract the
|
|
98
|
+
buyer already believes in) **before seat-expansion** (the most
|
|
99
|
+
fragile lever — easiest to inflate, easiest to lose). Two plays
|
|
100
|
+
fired in parallel signal vendor-push and corrode the relationship.
|
|
101
|
+
|
|
102
|
+
### Step 4: Compute NRR by lever and verify against the dilution check
|
|
103
|
+
|
|
104
|
+
NRR = (start-ARR + expansion − churn − contraction) ÷ start-ARR,
|
|
105
|
+
per cohort. Decompose expansion into the three levers. **Verify**
|
|
106
|
+
each trigger's pull-signal is intact: confirm the buyer-side
|
|
107
|
+
artefact (usage ceiling crossed, written request, admin invite)
|
|
108
|
+
exists in instrumentation; a lever whose triggers cannot be
|
|
109
|
+
verified against artefacts is push-expansion mislabelled as pull,
|
|
110
|
+
and the next cycle's churn will return the revenue. A book hitting
|
|
111
|
+
115 % NRR via seat-expansion only is more fragile than a book
|
|
112
|
+
hitting 110 % via upsell + cross-sell — fragility shows up in the
|
|
113
|
+
next cycle's churn, not this one's revenue line.
|
|
114
|
+
|
|
115
|
+
### Step 5: Hand back
|
|
116
|
+
|
|
117
|
+
Hand the lever decomposition, the three pull-signalled triggers,
|
|
118
|
+
and the per-lever play to CS / AM operations and to
|
|
119
|
+
[`forecast-accuracy`](../forecast-accuracy/SKILL.md) for the
|
|
120
|
+
expansion side of the forecast call. NRR work without lever
|
|
121
|
+
separation is spending in random directions.
|
|
122
|
+
|
|
123
|
+
## Related Skills
|
|
124
|
+
|
|
125
|
+
**WHEN to use this**
|
|
126
|
+
|
|
127
|
+
- Decomposing NRR into upsell · cross-sell · seat-expansion levers.
|
|
128
|
+
- Defining pull-signalled triggers and per-lever plays.
|
|
129
|
+
|
|
130
|
+
**WHEN NOT to use this**
|
|
131
|
+
|
|
132
|
+
- Saving accounts likely to churn — route to
|
|
133
|
+
[`churn-prevention`](../churn-prevention/SKILL.md).
|
|
134
|
+
- Designing days 0–30 onboarding milestones — route to
|
|
135
|
+
[`onboarding-design`](../onboarding-design/SKILL.md).
|
|
136
|
+
- Product-led, vendor-unattended seat growth loops — route to
|
|
137
|
+
[`retention-loops`](../retention-loops/SKILL.md).
|
|
138
|
+
|
|
139
|
+
## When the agent should load this
|
|
140
|
+
|
|
141
|
+
- "Lift our NRR — which lever?"
|
|
142
|
+
- "When do we cross-sell vs upsell account X?"
|
|
143
|
+
- "Why does our expansion churn back inside the next cycle?"
|
|
144
|
+
- "Welcher Expansion-Trigger ist eigentlich pull, nicht push?"
|
|
145
|
+
|
|
146
|
+
## Output
|
|
147
|
+
|
|
148
|
+
1. **`lever-decomposition.md`** — trailing-quarter expansion $ split into upsell · cross-sell · seat-expansion with NRR contribution per lever.
|
|
149
|
+
2. **`expansion-triggers.md`** — one pull-signalled trigger per lever · falsifiable evidence · misfire counter.
|
|
150
|
+
3. **`lever-play-map.md`** — per-lever default play · disqualifier · sequencing rule for multi-trigger accounts.
|
|
151
|
+
|
|
152
|
+
## Gotcha
|
|
153
|
+
|
|
154
|
+
- A trigger that fires on usage alone, without separating *pain growth* from *consumption growth*, will push when it should pull. Push-expansion lifts this quarter and depresses the next.
|
|
155
|
+
- Seat-expansion looks like the easiest lever and is the most fragile — easy to inflate by selling seats into accounts whose existing seats are under-utilised; the contraction lands one cycle later.
|
|
156
|
+
- *"Strategic"* cross-sell into a capability the segment is not yet ready to use buys revenue and pays for it in churn — segment-readiness is the gate, not vendor-side ambition.
|
|
157
|
+
|
|
158
|
+
## Do NOT
|
|
159
|
+
|
|
160
|
+
- Do NOT fire multiple expansion plays in parallel on one account; sequence per Step 3.
|
|
161
|
+
- Do NOT count seat-expansion at < 40 % existing-seat utilisation as expansion; it is selling decay.
|
|
162
|
+
- Do NOT chase NRR target without lever decomposition; the headline number can be hit by the most fragile lever.
|
|
163
|
+
|
|
164
|
+
## Runnable example
|
|
165
|
+
|
|
166
|
+
Mid-market SaaS, NRR 112 % last quarter, churn ticked up this quarter.
|
|
167
|
+
|
|
168
|
+
- Lever decomposition — upsell 35 %, cross-sell 18 %, seat-expansion 47 % of expansion $. Seat-expansion-led growth flagged as fragile.
|
|
169
|
+
- Triggers — *(1)* upsell trigger: seats > 50 sustained 30+ days (band 28–42 % conversion). *(2)* cross-sell: capability request twice in 60 days from two contacts (band 41–61 % conversion). *(3)* seat-expansion: admin invites ≥ 10 new users in 30 days AND green health (band 52–68 % conversion); misfire count for the quarter: 4 — trigger flagged for Step 0 re-diagnosis next quarter.
|
|
170
|
+
- Lever-play map — upsell QBR + tier proposal, disqualified for 3 red-health accounts; cross-sell pilot blocked for 2 accounts where SKU not yet GA-ready for mid-market.
|
|
171
|
+
- Hand-off — decomposition + triggers → CS / AM ops; sequencing rule live; expansion side of `forecast-accuracy` rebuilt on lever-weighted historical close rates.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forecast-accuracy
|
|
3
|
+
description: "Use when constructing the forecast call — commit / best-case / pipeline categorisation, deal-level evidence test, accuracy retro-loop. Triggers on 'build the forecast', 'why does our commit miss'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: product
|
|
8
|
+
context_spine: [product, customer-segment]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# forecast-accuracy
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- The quarterly forecast call is being constructed and the team needs a categorisation rule that survives retro — not a feel-good number that flatters this week.
|
|
16
|
+
- Commit has missed two or more quarters and nobody can name which signals broke — the retro-loop is missing or the categorisation rule is unwritten.
|
|
17
|
+
- A new RevOps lead inherits a pipeline and needs to rebuild the forecast call without inheriting last regime's optimism bias.
|
|
18
|
+
|
|
19
|
+
Do NOT use to design pipeline stages (route to
|
|
20
|
+
`pipeline-strategy`), qualify a single deal (route to
|
|
21
|
+
`deal-qualification-meddic`), or build the finance-side
|
|
22
|
+
top-down / bottom-up model (composes against — but does not
|
|
23
|
+
duplicate — the finance-partner forecasting capability,
|
|
24
|
+
via the `forecast-construction-shape` interface).
|
|
25
|
+
|
|
26
|
+
## Cognition cluster
|
|
27
|
+
|
|
28
|
+
- **Mental model 16 — Leading vs. lagging indicators.** Closed-won
|
|
29
|
+
is lagging; per-stage conversion and MEDDIC-slot completeness
|
|
30
|
+
are leading. A forecast built on lagging signals can only confirm
|
|
31
|
+
the result after it lands. See
|
|
32
|
+
[`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 16.
|
|
33
|
+
- **Mental model 29 — Premortem.** Before locking the call, write
|
|
34
|
+
the post-quarter retro as if commit missed by 20 %. The premortem
|
|
35
|
+
surfaces which categorisations are riding on weak evidence; demote
|
|
36
|
+
those before the call locks. See `mental-models.md` § 29.
|
|
37
|
+
- **Mental model 9 — Hypothesis-driven thinking.** Each commit deal
|
|
38
|
+
carries a falsifiable claim: *"this closes by \<date\> because
|
|
39
|
+
\<evidence\>."* If the claim cannot be falsified inside the
|
|
40
|
+
quarter, the deal is best-case, not commit. See
|
|
41
|
+
`mental-models.md` § 9.
|
|
42
|
+
- **Context-spine — product + customer-segment.** Read the
|
|
43
|
+
**product** slot for what is actually GA-shippable this quarter
|
|
44
|
+
(deals depending on non-shipped scope are not commit), and the
|
|
45
|
+
**customer-segment** slot for segment-historical close rates —
|
|
46
|
+
pricing-power and cycle-length differ by segment and the forecast
|
|
47
|
+
must too. See
|
|
48
|
+
[`context-spine`](../../../docs/contracts/context-spine.md).
|
|
49
|
+
|
|
50
|
+
## Procedure
|
|
51
|
+
|
|
52
|
+
### Step 0: Inspect — inherit pipeline + qualification artefacts
|
|
53
|
+
|
|
54
|
+
Pull `stage-definitions.md`, `coverage-by-cell.md` from
|
|
55
|
+
`pipeline-strategy`, and the latest `meddic-card.md` per deal from
|
|
56
|
+
`deal-qualification-meddic`. Inspect whether each commit-candidate
|
|
57
|
+
deal carries falsifiable evidence per MEDDIC slot — a forecast
|
|
58
|
+
built without that inspection is rep opinion, not categorisation.
|
|
59
|
+
|
|
60
|
+
### Step 1: Lock the three categories with falsifiable rules
|
|
61
|
+
|
|
62
|
+
1. **Commit** — deal closes in-window with ≥ 90 % subjective
|
|
63
|
+
probability **and** MEDDIC slots all filled with evidence **and**
|
|
64
|
+
decision-process has buyer-written dates inside the window.
|
|
65
|
+
2. **Best-case** — deal *could* close in-window with ≥ 50 %
|
|
66
|
+
probability **and** ≤ 2 MEDDIC slots unfilled **and** at least
|
|
67
|
+
one decision-process date inside the window.
|
|
68
|
+
3. **Pipeline** — everything else. Pipeline is not a forecast
|
|
69
|
+
category; it is the population from which commit and best-case
|
|
70
|
+
are drawn.
|
|
71
|
+
|
|
72
|
+
Reject *"commit"* placements that do not meet all three commit
|
|
73
|
+
criteria, regardless of $ value or rep confidence.
|
|
74
|
+
|
|
75
|
+
### Step 2: Apply the segment-historical close rate
|
|
76
|
+
|
|
77
|
+
For each deal, compute *expected $* = $ × segment-historical
|
|
78
|
+
in-window close-rate (trailing four quarters). Aggregate by
|
|
79
|
+
category. If commit-$ exceeds (segment historical commit close-rate
|
|
80
|
+
× pipeline-$ in commit), the call is structurally optimistic — find
|
|
81
|
+
the optimism source before defending the number.
|
|
82
|
+
|
|
83
|
+
### Step 3: Premortem the commit list
|
|
84
|
+
|
|
85
|
+
Write *"if commit misses by 20 %, the reason is \_\_\_."* The most
|
|
86
|
+
common patterns: (a) one anchor deal slipped, (b) segment cycle
|
|
87
|
+
lengthened, (c) procurement/legal queues bunched at quarter-end.
|
|
88
|
+
Tag each commit deal with which of these would kill it; deals tagged
|
|
89
|
+
with two or more move to best-case.
|
|
90
|
+
|
|
91
|
+
### Step 4: Construct the call with confidence bands
|
|
92
|
+
|
|
93
|
+
Report **commit $** = sum of commit-tagged after Step 3 demotions.
|
|
94
|
+
**Best-case $** = commit + best-case-tagged. Attach the band:
|
|
95
|
+
*"commit ± \<historical-deviation\>; best-case ± \<historical
|
|
96
|
+
upside\>"*. A call without a band has no honesty about its prior
|
|
97
|
+
miss-rate.
|
|
98
|
+
|
|
99
|
+
### Step 5: Run the accuracy retro-loop at quarter-end
|
|
100
|
+
|
|
101
|
+
Compare predicted commit / best-case / pipeline to actual
|
|
102
|
+
closed-won by category. Compute per-rep, per-segment, and per-stage
|
|
103
|
+
miss-rate. Patterns that repeat for two quarters become categorisation
|
|
104
|
+
rule changes in Step 1; one-off misses become deal-level evidence
|
|
105
|
+
upgrades in Step 0.
|
|
106
|
+
|
|
107
|
+
## Related Skills
|
|
108
|
+
|
|
109
|
+
**WHEN to use this**
|
|
110
|
+
|
|
111
|
+
- Constructing the quarterly forecast call from a qualified pipeline.
|
|
112
|
+
- Running the accuracy retro-loop and feeding it back into Step 1.
|
|
113
|
+
|
|
114
|
+
**WHEN NOT to use this**
|
|
115
|
+
|
|
116
|
+
- Designing pipeline stages or per-stage conversion targets — route to
|
|
117
|
+
[`pipeline-strategy`](../pipeline-strategy/SKILL.md).
|
|
118
|
+
- Single-deal qualification or disqualification — route to
|
|
119
|
+
[`deal-qualification-meddic`](../deal-qualification-meddic/SKILL.md).
|
|
120
|
+
- Finance-side top-down model or board-deck forecast — composes
|
|
121
|
+
against (does not replace) the finance-partner forecasting capability
|
|
122
|
+
via the `forecast-construction-shape` interface.
|
|
123
|
+
|
|
124
|
+
## When the agent should load this
|
|
125
|
+
|
|
126
|
+
- "Build the Q3 forecast call."
|
|
127
|
+
- "Why does our commit keep missing?"
|
|
128
|
+
- "Run the forecast retro for last quarter."
|
|
129
|
+
- "Welche Deals gehören wirklich in Commit?"
|
|
130
|
+
|
|
131
|
+
## Output
|
|
132
|
+
|
|
133
|
+
1. **`forecast-call.md`** — commit $ and best-case $ with confidence bands; per-segment breakdown.
|
|
134
|
+
2. **`commit-list.md`** — one row per commit deal: $, segment, MEDDIC-completeness, decision-process date, premortem tag (none / single-risk / two-risk demoted).
|
|
135
|
+
3. **`retro-deltas.md`** *(at quarter-end)* — predicted vs actual per category, per-segment, per-rep miss-rate, and the categorisation-rule change (if any) for next quarter.
|
|
136
|
+
|
|
137
|
+
## Gotcha
|
|
138
|
+
|
|
139
|
+
- *"Strong commit"* without buyer-written dates inside the window is a wish, not a forecast. Subjective probability without artefact evidence is what the retro will punish.
|
|
140
|
+
- Segment-historical close rates change after a pricing change, a packaging change, or a competitive shift. Recompute the rates when the segment shape changes, otherwise the call inherits the old regime's optimism.
|
|
141
|
+
- Reporting commit as a point estimate without the band hides the prior miss-rate. A team that has missed by 18 % twice and reports commit ± 0 % is performing forecasting, not doing it.
|
|
142
|
+
|
|
143
|
+
## Do NOT
|
|
144
|
+
|
|
145
|
+
- Do NOT place a deal in commit because the size is large; size is independent of evidence.
|
|
146
|
+
- Do NOT skip the premortem on commit deals — most misses come from a small number of anchor deals slipping, and the premortem is where you catch them.
|
|
147
|
+
- Do NOT change categorisation rules on a single-quarter miss; rules change on a two-quarter pattern.
|
|
148
|
+
|
|
149
|
+
## Runnable example
|
|
150
|
+
|
|
151
|
+
End of Q2, last two commits missed by 14 % and 21 %.
|
|
152
|
+
|
|
153
|
+
- Step 1 enforcement — three deals placed in commit had ≥ 2 MEDDIC slots open; demoted to best-case (–$ 540 k commit, +$ 540 k best-case).
|
|
154
|
+
- Segment close-rate — Mid-Market historical commit close-rate is 78 %; commit-$ implies 91 % aggregate close-rate; structural optimism of ~$ 320 k.
|
|
155
|
+
- Premortem — two anchor deals (each > 10 % of commit) tagged single-risk (procurement queue); one tagged two-risk (no buyer-written date) → demoted.
|
|
156
|
+
- Final call — *"commit $ 4.1 m ± 12 % (historical deviation); best-case $ 6.7 m + 8 % / – 14 %."* Commit-list flags the two procurement-risk anchors for VP-level intervention.
|
|
157
|
+
- Retro at quarter-end — predicted commit $ 4.1 m, actual $ 4.0 m; rule unchanged; one rep over-commits two quarters running → categorisation-coaching action.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: forecasting
|
|
3
|
+
description: "Use when constructing the finance-side forecast — top-down vs bottom-up shape, confidence bands, retro-loop. Triggers on 'build the forecast model', 'reconcile top-down with bottom-up'."
|
|
4
|
+
status: active
|
|
5
|
+
tier: senior
|
|
6
|
+
source: package
|
|
7
|
+
domain: process
|
|
8
|
+
context_spine: [product, fiscal-period, customer-segment]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# forecasting
|
|
12
|
+
|
|
13
|
+
## When to use
|
|
14
|
+
|
|
15
|
+
- The annual plan or quarterly board pack needs a forecast model that survives a retro — not last quarter's number with a multiplier.
|
|
16
|
+
- Top-down (TAM × penetration × motion) and bottom-up (deal-level) calls have diverged and the reconciliation hasn't been written.
|
|
17
|
+
- A new finance-partner inherits a forecast and needs to rebuild the construction shape without inheriting the prior regime's optimism.
|
|
18
|
+
|
|
19
|
+
Do NOT use to qualify a single deal (route to `deal-qualification-meddic`), construct the RevOps commit list (route to `forecast-accuracy` (H10) — finance owns the shape, RevOps owns the call), or run capital-runway scenarios (route to `runway-cognition` (O3)).
|
|
20
|
+
|
|
21
|
+
## Cognition cluster
|
|
22
|
+
|
|
23
|
+
- **Mental model 9 — Hypothesis-driven thinking.** Each forecast is
|
|
24
|
+
a falsifiable claim about a window. If the call cannot be falsified
|
|
25
|
+
inside the window, the call is a narrative, not a forecast. See
|
|
26
|
+
[`mental-models.md`](../../../docs/contracts/mental-models.md) § 9.
|
|
27
|
+
- **Mental model 29 — Premortem.** Before locking the call, write the
|
|
28
|
+
post-window retro as if commit missed by 20 %. The premortem
|
|
29
|
+
surfaces which construction inputs were riding on weak evidence;
|
|
30
|
+
demote those before the call locks. See `mental-models.md` § 29.
|
|
31
|
+
- **Mental model 16 — Leading vs lagging.** Closed-won is lagging;
|
|
32
|
+
pipeline coverage, segment conversion, and slot-completeness are
|
|
33
|
+
leading. A forecast built only on lagging signals can confirm but
|
|
34
|
+
not steer. See `mental-models.md` § 16.
|
|
35
|
+
- **Context-spine — product + fiscal-period + customer-segment.**
|
|
36
|
+
Read the **product** slot for what is GA-shippable in the window;
|
|
37
|
+
the **fiscal-period** slot for the cadence the model must
|
|
38
|
+
reconcile against (monthly close vs quarterly board pack vs annual
|
|
39
|
+
plan vs multi-year plan); the **customer-segment** slot for
|
|
40
|
+
segment-historical close rates. See
|
|
41
|
+
[`context-spine`](../../../docs/contracts/context-spine.md).
|
|
42
|
+
|
|
43
|
+
## Procedure
|
|
44
|
+
|
|
45
|
+
### Step 0: Inspect the construction shape
|
|
46
|
+
|
|
47
|
+
Read the fiscal-period slot. Decide between three shapes:
|
|
48
|
+
|
|
49
|
+
1. **Top-down** — anchor against TAM × penetration band × motion
|
|
50
|
+
band. Healthy for annual plans and multi-year plans where
|
|
51
|
+
bottom-up evidence is thin past one window.
|
|
52
|
+
2. **Bottom-up** — sum deal-level conviction (composes H10
|
|
53
|
+
`forecast-accuracy` via the `forecast-construction-shape` ADR).
|
|
54
|
+
Healthy for quarterly windows where deal evidence is fresh.
|
|
55
|
+
3. **Hybrid** — both, with an explicit reconciliation. Healthy when
|
|
56
|
+
top-down and bottom-up diverge by more than the historical
|
|
57
|
+
confidence band.
|
|
58
|
+
|
|
59
|
+
State the choice. A forecast without a stated shape inherits the
|
|
60
|
+
prior regime's shape silently.
|
|
61
|
+
|
|
62
|
+
### Step 1: Construct the call against the shape
|
|
63
|
+
|
|
64
|
+
For top-down: write `{tam, penetration_band, motion_band}` — every
|
|
65
|
+
input cites its source. Penetration bands are evidence ranges, not
|
|
66
|
+
single points; motion bands reflect channel mix.
|
|
67
|
+
|
|
68
|
+
For bottom-up: consume H10's commit-list against the
|
|
69
|
+
`forecast-construction-shape` interface. Sum commit-tagged ×
|
|
70
|
+
in-window close-rate per segment.
|
|
71
|
+
|
|
72
|
+
For hybrid: do both, then write the reconciliation. If top-down ≠
|
|
73
|
+
bottom-up by more than the confidence band, the divergence is the
|
|
74
|
+
forecast — not either number.
|
|
75
|
+
|
|
76
|
+
### Step 2: Calibrate the confidence band
|
|
77
|
+
|
|
78
|
+
Compute historical deviation from the last 4–8 windows of the same
|
|
79
|
+
fiscal-period cadence. Attach as `{plus_pct, minus_pct}`. A band
|
|
80
|
+
asymmetric on the downside is honest about prior misses; symmetric
|
|
81
|
+
bands silently pretend prior accuracy.
|
|
82
|
+
|
|
83
|
+
### Step 3: Premortem the construction
|
|
84
|
+
|
|
85
|
+
Write *"if the forecast misses by 20 %, the reason is ___."* For
|
|
86
|
+
top-down: which penetration / motion input was the load-bearing
|
|
87
|
+
assumption? For bottom-up: which anchor deals carry > 10 % of
|
|
88
|
+
commit? Demote inputs that the premortem can name as single-point
|
|
89
|
+
risks.
|
|
90
|
+
|
|
91
|
+
### Step 4: Emit the typed interface
|
|
92
|
+
|
|
93
|
+
Produce `forecast-band.json` per the `forecast-construction-shape`
|
|
94
|
+
ADR. H10 consumes the artifact for the commit-call. The fields:
|
|
95
|
+
`construction_shape`, `commit_value`, `best_case_value`,
|
|
96
|
+
`pipeline_value`, `confidence_band`, `retro_signature`,
|
|
97
|
+
`segment_scope`, `fiscal_period`, `construction_inputs`. Drop the
|
|
98
|
+
artifact in the location H10's `## Output` references.
|
|
99
|
+
|
|
100
|
+
### Step 5: Run the accuracy retro-loop
|
|
101
|
+
|
|
102
|
+
At window-end, compare predicted commit / best-case to actual
|
|
103
|
+
closed-won. Compute per-segment and per-construction-input miss
|
|
104
|
+
rate. Patterns that repeat for two windows become shape changes in
|
|
105
|
+
Step 0 (e.g. switching from bottom-up to hybrid because deal
|
|
106
|
+
evidence stopped predicting); one-off misses become input upgrades
|
|
107
|
+
in Step 1.
|
|
108
|
+
|
|
109
|
+
## Related Skills
|
|
110
|
+
|
|
111
|
+
**WHEN to use this**
|
|
112
|
+
|
|
113
|
+
- Constructing the finance-side forecast (annual plan, board pack, multi-year plan).
|
|
114
|
+
- Running the construction-shape retro and feeding it back into Step 0.
|
|
115
|
+
|
|
116
|
+
**WHEN NOT to use this**
|
|
117
|
+
|
|
118
|
+
- Single-deal qualification — route to [`deal-qualification-meddic`](../deal-qualification-meddic/SKILL.md).
|
|
119
|
+
- Commit / best-case / pipeline categorisation of deals — route to [`forecast-accuracy`](../forecast-accuracy/SKILL.md) (H10); H10 consumes against this skill's `forecast-band.json` interface.
|
|
120
|
+
- Cash-runway shape and fundraise-trigger heuristics — route to [`runway-cognition`](../runway-cognition/SKILL.md) (O3).
|
|
121
|
+
- Multi-statement scenario construction over base / upside / downside — route to [`scenario-modeling`](../scenario-modeling/SKILL.md) (O4).
|
|
122
|
+
|
|
123
|
+
Wing-4 handoff: this skill emits the `forecast-band.json` artifact
|
|
124
|
+
that `forecast-accuracy` (H10, Wing-3) reads. Per
|
|
125
|
+
`docs/contracts/adr-forecast-construction-shape.md`,
|
|
126
|
+
`docs/guidelines/wing4-handoff.md` § Chain 4.
|
|
127
|
+
|
|
128
|
+
## When the agent should load this
|
|
129
|
+
|
|
130
|
+
- "Build the annual forecast model."
|
|
131
|
+
- "Top-down and bottom-up disagree — reconcile them."
|
|
132
|
+
- "Why was last quarter's forecast off?"
|
|
133
|
+
- "Was machen wir bei der Forecast-Konstruktion anders?"
|
|
134
|
+
|
|
135
|
+
## Output
|
|
136
|
+
|
|
137
|
+
1. **`forecast-band.json`** *(Wing-3 / Wing-4 typed interface)* — `construction_shape`, `commit_value`, `best_case_value`, `pipeline_value`, `confidence_band`, `retro_signature`, `segment_scope`, `fiscal_period`, `construction_inputs`. Per `adr-forecast-construction-shape.md`.
|
|
138
|
+
2. **`construction-notes.md`** — shape chosen + why; per-input evidence; reconciliation note (hybrid only).
|
|
139
|
+
3. **`premortem.md`** — "if we miss by 20 %, the reason is ___"; tagged demotions from Step 3.
|
|
140
|
+
4. **`retro-deltas.md`** *(at window-end)* — predicted vs actual per construction input; shape-change recommendation if the pattern repeats.
|
|
141
|
+
|
|
142
|
+
## Gotcha
|
|
143
|
+
|
|
144
|
+
- A forecast without a stated `construction_shape` inherits last regime's shape silently. Always emit the field.
|
|
145
|
+
- Symmetric confidence bands lie about prior misses. If the last two windows missed on the downside, the band is asymmetric.
|
|
146
|
+
- Top-down models with single-point penetration assumptions are scenarios in disguise. Use bands.
|
|
147
|
+
- Hybrid models that don't write the reconciliation are top-down models with bottom-up garnish.
|
|
148
|
+
|
|
149
|
+
## Do NOT
|
|
150
|
+
|
|
151
|
+
- Do NOT collapse hybrid forecasts into a single number without keeping the divergence visible.
|
|
152
|
+
- Do NOT skip Step 4 — the typed interface is what makes H10 reproducible.
|
|
153
|
+
- Do NOT change the construction shape on a single-window miss; shape changes require a two-window pattern.
|
|
154
|
+
|
|
155
|
+
## Runnable example
|
|
156
|
+
|
|
157
|
+
End of FY: annual plan + Q1 commit both due.
|
|
158
|
+
|
|
159
|
+
- Step 0 — fiscal-period slot says `annual` + `quarterly`. Annual is top-down; Q1 is bottom-up.
|
|
160
|
+
- Step 1 — top-down: TAM $4.2B, penetration band 0.6–0.9 %, motion band SaaS-mid; expected $25–38M ARR. Bottom-up: H10 commit-list sums to $8.1M in Q1, segment close rate 78 %.
|
|
161
|
+
- Step 2 — last 4 quarters deviation: +6 % / –14 %. Confidence band attached.
|
|
162
|
+
- Step 3 — premortem: top-down anchored on penetration upper bound; demoted to 0.6–0.75 %. Bottom-up: two anchor deals tagged single-risk procurement; demoted.
|
|
163
|
+
- Step 4 — emit `forecast-band.json`: `construction_shape=hybrid`, commit $6.3M, best-case $8.1M, band +6/–14 %, retro_signature `quarterly | [+6, –14]`, segment_scope mid-market, fiscal_period `quarterly`.
|
|
164
|
+
- Retro — at quarter-end, actual $6.1M; band held. Annual top-down revisit in two quarters.
|