Jira tickets — pre-drafted, ready to file
Once master plan approved, file in this order. Each ticket has summary + description + acceptance criteria + parent/epic links.
Epics (file FIRST)
EPIC-CRV — Curva: LINE-native ecommerce integration with Pasukuru
- Project: CRV
- Type: Epic
- Summary:
[CRV] LINE-native ecommerce — Pasukuru integration completion - Description: pointer to vault
synthesis/curva-pasukuru-plan/00-master-plan.md - Children: all CRV-XXX tickets below
EPIC-PASS — Pasukuru: LINE-native ecommerce integration with Curva
- Project: PASS
- Type: Epic
- Summary:
[PASS] LINE-native ecommerce — Curva integration completion - Description: same pointer
- Children: all PASS-XXX tickets below
Phase 0 tickets (file SECOND, prefix [Phase 0])
PASS-? — [Phase 0] Add member.line_user_id column with multi-tenant unique index
- Item: 0.P-1
- Estimate: 0.5 CC session (1-2hr)
- Acceptance: see vault item 0.P-1
PASS-? — [Phase 0] Order webhook payload types extension
- Item: 0.P-6
- Estimate: 0.25 (30min)
PASS-? — [Phase 0] OrderPayloadBuilder service
- Item: 0.P-5
- Estimate: 0.5 (2hr)
PASS-? — [Phase 0] Emit order.* events from OrderService
- Item: 0.P-4
- Estimate: 1 (3hr)
PASS-? — [Phase 0] BullMQ worker accepts order entity
- Item: 0.P-12
- Estimate: 0.5 (2hr)
PASS-? — [Phase 0] HMAC sign outbound webhooks (v1 contract)
- Item: 0.P-7
- Estimate: 1 (3hr)
PASS-? — [Phase 0] POST /integration/line/follower-link endpoint
- Item: 0.P-3
- Estimate: 0.5 (2hr)
CRV-? — [Phase 0] HMAC verify middleware ValidatePasukuruSignature
- Item: 0.C-2
- Estimate: 0.5 (2hr)
CRV-? — [Phase 0] Inbound webhook receiver POST /api/integration/pasukuru/webhook
- Item: 0.C-1
- Estimate: 1 (3hr)
CRV-? — [Phase 0] Webhook event router → handler classes (stubs)
- Item: 0.C-3
- Estimate: 1 (3hr)
Phase 1 tickets (file THIRD, after Phase 0 in flight)
PASS-? — [Phase 1] POST /integration/line/identify (LIFF idToken verify + member upsert)
- Item: 1.P-2
- Estimate: 1 (3hr)
PASS-? — [Phase 1] Multi-tenant LIFF resolution middleware
- Item: 1.P-9
- Estimate: 1.5 (5hr)
PASS-? — [Phase 1] FE: install @line/liff SDK + env config
- Item: 1.F-1
- Estimate: 0.25 (30min)
PASS-? — [Phase 1] FE: LiffProvider component
- Item: 1.F-2
- Estimate: 0.5 (2hr)
PASS-? — [Phase 1] FE: useLiff() hook
- Item: 1.F-3
- Estimate: 0.5 (2hr)
PASS-? — [Phase 1] FE: LIFF init on app boot (per route)
- Item: 1.F-4
- Estimate: 0.5 (2hr)
PASS-? — [Phase 1] FE: Auto-identify flow → JWT storage
- Item: 1.F-5
- Estimate: 1 (3hr)
PASS-? — [Phase 1] FE: LIFF-aware cart route
- Item: 1.F-6
- Estimate: 1 (3hr)
PASS-? — [Phase 1] FE: LIFF checkout + Stripe openWindow
- Item: 1.F-7
- Estimate: 1 (3hr)
PASS-? — [Phase 1] FE: Tenant resolution from LIFF context
- Item: 1.F-10
- Estimate: 1 (3hr)
PASS-? — [Phase 1] FE: Cookie/token strategy (in-memory store)
- Item: 1.F-11
- Estimate: 0.5 (2hr)
CRV-? — [Phase 1] LIFF app registration helper (auto-register Pasukuru LIFFs)
- Item: 1.C-12
- Estimate: 1 (3hr)
Phase 2 tickets
PASS-? — [Phase 2] GET /integration/items product feed endpoint
- Item: 2.P-8
- Estimate: 1 (3hr)
CRV-? — [Phase 2] Product cache table + sync from webhook
- Item: 2.C-4
- Estimate: 1 (3hr)
CRV-? — [Phase 2] FlexMsg builder: Pasukuru product picker
- Item: 2.C-5
- Estimate: 1.5 (5hr)
CRV-? — [Phase 2] RichMenu builder: Pasukuru LIFF preset buttons
- Item: 2.C-6
- Estimate: 1 (3hr)
CRV-? — [Phase 2] Order receipt Flex push (HandleOrderEvent fill)
- Item: 2.C-7
- Estimate: 1 (3hr)
CRV-? — [Phase 2] Abandoned cart Scenario template + trigger
- Item: 2.C-8
- Estimate: 1 (3hr)
CRV-? — [Phase 2] Post-purchase upsell Scenario template
- Item: 2.C-9
- Estimate: 0.5 (2hr)
Phase 3 tickets
PASS-? — [Phase 3] LINE Pay payment-method module (sandbox)
- Item: 3.P-10
- Estimate: 2 (1 day)
CRV-? — [Phase 3] Agent QR auto-link on follow event
- Item: 3.C-10
- Estimate: 1.5 (5hr)
CRV-? — [Phase 3] LineFollower ↔ pasukuru_member_id mapping
- Item: 3.C-11
- Estimate: 1 (3hr)
PASS-? — [Phase 3] FE: Order history page in LIFF
- Item: 3.F-8
- Estimate: 1.5 (5hr)
PASS-? — [Phase 3] FE: "Add to LINE" CTA on landing page
- Item: 3.F-9
- Estimate: 0.5 (2hr)
PASS-? — [Phase 3] FE: LIFF UX polish (bottom nav, share, LINE buttons)
- Item: 3.F-12
- Estimate: 1.5 (5hr)
PASS-? — [Phase 3] Replay-attack hardening (nonce store)
- Item: 3.P-13
- Estimate: 1 (3hr)
Cross-cutting tickets
INFRA-? — [X] Cloudflare/nginx routing for shop.passkuru.com LIFF endpoints
- Item: X.I-2
INFRA-? — [X] Staging Pasukuru tenant + Curva LineAccount setup
- Item: X.I-3
PASS-? — [X] BullMQ Board exposed for webhook DLQ monitoring
- Item: X.I-4
PASS-? — [X] Failed webhook alert cron (Slack/email)
- Item: X.I-5
CRV-? — [X] Joint smoke test script
- Item: X.T-1
PASS-? — [X] Load test: 1000 concurrent LIFF identifies
- Item: X.T-2
Filing checklist
When user approves master plan:
- File 2 epics (EPIC-CRV, EPIC-PASS)
- File Phase 0 tickets (10) — link to EPIC
- Set all to status: To Do
- Add label:
line-native-ecommerce - Assign to Julian (or per workspace persona rule)
- Workspace attribution in description:
Requested by Julian (kebahagiaan workspace) - Save real Jira IDs back into this file (replace
?) - Notify user: ready to start
When Phase 0 in flight:
- File Phase 1 tickets
When Phase 1 in flight:
- File Phase 2 tickets
(staggered to keep backlog clean)
Ticket template (use exactly)
Summary: [Phase X] {short title}
Description:
**Item ID:** {0.X-N}
**Track:** {Curva/Pasukuru BE/FE/Infra}
**CC sessions estimate:** {0.5 / 1 / 1.5}
**Risk:** {L/M/H}
**Depends on:** {item IDs or "none"}
**Blocks:** {item IDs}
**Vault doc:** synthesis/curva-pasukuru-plan/{phase-doc}.md
**Goal:** {one line}
**Acceptance criteria:**
- [ ] {criterion 1}
- [ ] {criterion 2}
- ...
**Files touched:** see vault.
**Rollout:** {flag name / migration / etc}
Requested by Julian (kebahagiaan workspace, time7676 GitHub).
Per CRITICAL rule reminder
- ❌ NEVER touch DVG project
- ✅ CRV + PASS only for this plan
- Workspace = kebahagiaan = Julian = time7676
- ALL CI must be green before merge (HARD RULE)
- PR creation OK without asking, MERGE forbidden without explicit approval