Skip to content

Commit c7deeea

Browse files
authored
feat(perps): add write-perps-ticket product-authoring skill (#58)
## What Adds `write-perps-ticket` — the **product (first) pass** that pairs with `breakdown-perps-tickets` (#57, the engineering pass). It helps a PM (or a Claude acting for one) turn a raw observation/idea/goal into **one clean, complete ticket** that states intent and expected outcome, then stops before implementation. Splits the two jobs the team actually has (per the product discussion): the PM describes *what's broken / expected* with no implementation, and engineering does the technical split + layer routing as a second pass. ## Modes Typed, each with its own tight format: - **Bug** — what's broken + testable expected + repro + surface + pre-conditions + severity - **EPIC** — user-facing outcome + feature-level acceptance + scope (tasks deferred to engineering) - **Initiative** — why + measurable success metric + scope boundary + candidate child EPICs ## Why these choices - **Intent, not implementation.** Product tickets state testable *outcomes* — no file paths, component names, or layer routing. Prescribing implementation boxes engineering in and goes stale when code moves; routing needs codebase access and belongs to the breakdown pass. - **Surfacing section** (severity, plain-words area label, correct type) so reported bugs get triaged instead of lost in the backlog — a direct pain point. - **Number semantics, not decimals.** Expected values described semantically ("shows USD value") since perps precision is range-adaptive. - **Clean handoff.** Output of this skill = input to `breakdown-perps-tickets`. Both reuse `domains/perps/knowledge/*`. ## Relation to #57 Complementary, not dependent. #57 = engineer split/route; this = PM authoring. Merge order doesn't matter.
1 parent b47245e commit c7deeea

1 file changed

Lines changed: 139 additions & 0 deletions

File tree

  • domains/perps/skills/write-perps-ticket
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
---
2+
name: write-perps-ticket
3+
description: Interactively author one clean, complete perps ticket — bug, EPIC, or initiative — that states intent and expected outcome without implementation. Use when a PM (or a Claude acting for one) has a raw perps observation, feature idea, or strategic goal and wants a single well-formed ticket ready for engineering to break down. This is the first (product) pass; the engineering split + layer routing is a separate pass (breakdown-perps-tickets). Captures what/expected/repro, makes the ticket surfaceable so it doesn't get lost, and stops before implementation or repo routing.
4+
maturity: experimental
5+
---
6+
7+
# Write Perps Ticket
8+
9+
Turn a raw perps observation, idea, or goal into **one clean, complete ticket**
10+
the product team can file and engineering can break down as-is. You describe
11+
*what* and *what's expected* — never *how*.
12+
13+
## When To Use
14+
15+
- A PM (or a Claude acting for one) reports a perps bug, proposes a feature, or
16+
frames a strategic goal and wants a well-formed ticket.
17+
- The input is raw: a Slack message, a screenshot, a one-line idea.
18+
19+
This is the **first (product) pass**. The technical split — which repos/layers
20+
change, dependency order, component routing — is the engineer's job and lives in
21+
`breakdown-perps-tickets`. Do not do it here.
22+
23+
Not for: engineering task breakdown, or routing a ticket across Core/clients
24+
(→ `breakdown-perps-tickets`).
25+
26+
## Operating principle: intent, not implementation
27+
28+
You own the *what* and the *why*. The engineer owns the *how*. A product ticket
29+
that prescribes implementation boxes engineering into the wrong solution and goes
30+
stale the moment the code moves.
31+
32+
- State expected behavior as a **testable outcome**, not a fix. "Size shows USD
33+
value" — not "call `abs(size) * entryPrice` in `position-card`".
34+
- No file paths, no component names you'd have to guess, no layer routing.
35+
- 2-3 sentences per field. One concern per ticket — split multi-bug reports.
36+
- If you can't state the expected outcome in one testable line, it's not a
37+
ticket yet — ask the reporter.
38+
39+
## Pick the type
40+
41+
Ask which kind, or infer it and confirm. Each has its own shape:
42+
43+
- **Bug** — something is broken now. → behavior + repro.
44+
- **EPIC** — a shippable, user-facing capability. → outcome + feature-level
45+
acceptance; tasks are deferred to engineering.
46+
- **Initiative** — a strategic goal spanning multiple EPICs. → why + measurable
47+
success; no features yet.
48+
49+
## Workflow (interactive)
50+
51+
1. **Intake.** Read the raw input. Identify the type. Ask only what you can't
52+
infer: the expected outcome (as a testable line), and for bugs the repro path
53+
and required wallet state. Don't ask for anything an engineer derives later.
54+
2. **One concern.** If the input bundles several bugs or goals, split into
55+
separate tickets — list them and confirm before writing.
56+
3. **Draft the ticket** in the matching format below.
57+
4. **Make it surfaceable** (see below) so it doesn't vanish into the backlog.
58+
5. **Stop at the product boundary.** Do not add implementation, file paths, or a
59+
layer split. Hand off: a bug/EPIC is ready for `breakdown-perps-tickets`.
60+
61+
## Surfacing (so bugs don't get lost)
62+
63+
A filed ticket nobody triages is a lost ticket. On every ticket set:
64+
65+
- **Severity / priority** — for bugs, one line: user impact + how often it hits
66+
(every user / edge case). For EPICs/initiatives, the outcome's value.
67+
- **Area label**`perps` + the surface in plain words (e.g. "order entry",
68+
"position card"). Enough for triage to route; not a component path.
69+
- **Type** correctly set (Bug / EPIC / Initiative) so it lands in the right
70+
queue, not an undifferentiated pile.
71+
72+
## Ticket formats
73+
74+
Keep every field tight. Plain language — the engineer maps surfaces to
75+
components during breakdown.
76+
77+
### Bug
78+
79+
**Title**`[bug] <one-line user-visible symptom>`
80+
**What's broken** — actual behavior today: which screen, what the user sees,
81+
what value/element is wrong. 1-2 sentences.
82+
**Expected** — what should happen instead, as a **testable** "when X, then Y"
83+
line. This becomes the acceptance criteria.
84+
**Steps to reproduce** — numbered, from app open to bug visible.
85+
**Surface** — the screen/area in plain words ("Perps home position card").
86+
**Pre-conditions** — required wallet/app state (unlocked, open BTC position,
87+
deposited balance). Only the ones that apply.
88+
**Severity** — user impact + frequency.
89+
90+
For displayed numbers, describe the **semantic** ("shows the asset price",
91+
"shows USD value of the position"), never a decimal count — precision is
92+
range-adaptive (a $0.001 alt behaves differently from BTC).
93+
94+
### EPIC
95+
96+
**Title**`[epic] <user-facing capability>`
97+
**Outcome** — what the user can do after this ships that they can't today. 1-3
98+
sentences.
99+
**Acceptance (feature-level)** — testable "when X, then Y" lines describing the
100+
capability working end to end. Not implementation steps.
101+
**Scope** — in / out, in one line each. What this EPIC does NOT cover.
102+
**Surface** — the perps area(s) affected, in plain words.
103+
**Parent initiative** — link if one exists.
104+
105+
### Initiative
106+
107+
**Title**`[initiative] <strategic goal>`
108+
**Why** — the problem/opportunity and who it's for. 1-3 sentences.
109+
**Success metric** — how we'll know it worked (measurable; a number or a clear
110+
observable change), not a feature list.
111+
**Scope boundary** — what's in and explicitly out at this level.
112+
**Child EPICs** — known candidate EPICs (titles only; they get their own
113+
tickets). Leave open if not yet decided.
114+
115+
## Quality bar (reject before filing)
116+
117+
- Bug with no repro or no testable expected line → ask the reporter; don't file.
118+
- Implementation prescribed (file paths, "call X", layer routing) → strip it;
119+
that's the engineer's pass.
120+
- Multi-bug / multi-goal in one ticket → split.
121+
- "Investigate and fix" / "looks wrong" / "see recording" → narrow to a concrete
122+
expected outcome first.
123+
- EPIC/initiative with no measurable success or acceptance → not ready.
124+
125+
## Handoff
126+
127+
A bug or EPIC produced here is the **input** to `breakdown-perps-tickets`, which
128+
(with codebase access) routes it across Core/Core-release/Mobile/Extension and
129+
emits the engineering task tickets. Keep this skill on the product side of that
130+
line.
131+
132+
## References (read installed, don't duplicate)
133+
134+
- `../../knowledge/screens.md` — screen/area names, if you want to use precise
135+
surface labels (optional; plain words are fine for a product ticket).
136+
- `../../knowledge/formatting-rules.md` — number semantics, to describe expected
137+
values correctly without prescribing decimals.
138+
- Related skills: `breakdown-perps-tickets` (engineering split + routing — the
139+
next pass), `fix-perps-bug` (implement a fix).

0 commit comments

Comments
 (0)