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)
  • 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