← what the devs get ← the walkthrough
examples/surprise-charge/ · jira-import.csv

The tracker, after import

first reader: the tracker (and the team standup)
Epic

The Surprise Charge — The trial that ends politely

The trial that ends politely

Release slices (delivery order, slice-rN labels on each story):
- R1 Measure the fury — the surprise join — Surprise Rate and the silent-surprised proxy computable per cohort. Dark
- R2 No-surprise surfaces — the day-12 banner and honest receipts. In-app only — no email infra, no vendor risk
- R3 The reminder + the experiment — the T-48h email with the holdback experiment attached — the readout that ends the finance argument [BLOCKED BY BLK-01, BLK-05]
- R4 One-tap cancel, everywhere — one-tap cancel from all three surfaces; the parity rule asserted in CI per market [BLOCKED BY BLK-02]

Every story cites the press-release paragraph or FAQ answer that demands it.
StoryREQ-D1 · Build the surprise joinpriority: Medium

As the analyst sizing this problem, I want charges joined to refunds, tickets and activity, so that Surprise Rate is a number instead of an argument.

Charges join to refunds, "surprise" tickets, and activity history, so Surprise Rate and the silent-surprised proxy compute per cohort.
Source: PR para 2 / IFAQ-03
Provenance: [OBSERVED] × 2
Out of scope: dashboards
Depends on: —
Acceptance criteria
GIVEN a cohort with charges, refunds, tickets and activity data
WHEN  the join runs
THEN  Surprise Rate and M4 compute with cohort sizes stated
working-backwardsdiscoveryslice-r1
StoryREQ-DP2 · The in-app backstop bannerpriority: Medium

As a trial user who never opens email, I want the app itself to warn me, so that an unread inbox doesn't cost me $12.

From day 12, an in-app banner states the charge date and price with the same two actions, until the user decides.
Source: PR para 3 / 03-demo-spec.md F1
Provenance: [OBSERVED] × 1
Out of scope: push notifications
Depends on: —
Acceptance criteria
GIVEN a trial user with the email unopened
WHEN  they open the app on day 12+
THEN  the banner shows date, price, keep, and one-tap cancel
working-backwardsdeliveryslice-r2
StoryREQ-DP4 · Receipts that prevent the next surprisepriority: Medium

As a paying customer, I want every receipt to say what happens next, so that no future charge is a surprise.

Every receipt shows amount, next renewal date, next price, and a cancel link.
Source: PR para 5 / EFAQ-04
Provenance: [OBSERVED] × 1
Out of scope: dunning redesign (F2 copy only)
Depends on: —
Acceptance criteria
GIVEN any successful charge
WHEN  the receipt renders
THEN  next renewal date, price and a cancel link are present
working-backwardsdeliveryslice-r2
StoryREQ-DP1 · The T-48h reminderpriority: High

As a trial user who forgot I signed up, I want to be told before I'm charged, so that the first I hear of it is never my bank statement.

One email, at least 48 hours before the first charge, stating price and date, with equal keep and one-tap-cancel actions.
Source: PR para 3 / EFAQ-03
Provenance: [OBSERVED] × 1
Out of scope: reminders for later renewals
Depends on: REQ-D1, BLK-05
Acceptance criteria
GIVEN a trial reaching day 12
WHEN  the reminder sends
THEN  it precedes the charge by ≥48h (M1 records the ordering)
AND   a send failure is logged and visible — never silently absorbed (F5)
working-backwardsdeliveryblockedslice-r3
StoryREQ-D2 · The reminder holdback experimentpriority: Highest

As the VP in the finance standoff, I want the revenue fear tested by a real experiment, so that neither belief ships unverified.

A randomized holdback cohort receives no reminder; net revenue at day 60 is compared, reminded vs holdback.
Source: PR para 7 / IFAQ-01
Provenance: [OBSERVED] × 1, [ASSUMED] × 1 → RESTS ON ASSUMPTION
Out of scope: acting on the result
Depends on: REQ-D1, BLK-01
Conditional on: BLK-01 — finance co-owns the design, or the readout settles nothing
Acceptance criteria
GIVEN random assignment at trial start
WHEN  the day-60 readout runs
THEN  it states effect size, confidence interval and cohort sizes — or declares itself underpowered rather than extending silently
working-backwardsdiscoveryrests-on-assumptionshape-pendingblockedslice-r3
StoryREQ-DP3 · One-tap cancelpriority: Highest

As a user who decided to leave, I want cancelling to be one tap from wherever I am, so that leaving is as easy as joining was.

Cancelling from reminder, banner, or receipt is one screen and one tap, confirmed immediately, data retained 30 days.
Source: PR para 5 / RFAQ-02
Provenance: [OBSERVED] × 1, [UNKNOWN] × 1
Out of scope: win-back offers
Depends on: BLK-02
Conditional on: BLK-02 / Q-06 — markets that prescribe a cancel method get a per-market flow, still never more steps than signup
Acceptance criteria
GIVEN a user in the default flow
WHEN  they tap cancel from any of the three surfaces
THEN  cancellation completes on that screen with inline confirmation
working-backwardsdeliveryshape-pendingblockedslice-r4
StoryREQ-DP5 · The parity rulepriority: Medium

As a user in any market, I want cancelling to never take more steps than subscribing did, so that the exit is never a maze.

Cancelling never requires more steps than subscribing did, in any market, on any surface.
Source: EFAQ-02 / 03-demo-spec.md F4
Provenance: [OBSERVED] × 1
Out of scope: nothing — this rule has no exceptions
Depends on: REQ-DP3
Acceptance criteria
GIVEN the subscribe flow takes N steps in a market
WHEN  the cancel flow is measured in that market
THEN  its step count is ≤ N, asserted in CI per market config
working-backwardsdeliveryblockedslice-r4

Rendered from the committed artifact — the raw file: jira-import.csv on GitHub. The Surprise Charge is fictional; this is the skill's real output.