Sprint #6 Report β ν΅ν© ν¬μΈνΈ λ§κ° 5 νΈλ λ³λ ¬
- Feature: unified-points-completion-sprint6-20260430
- Owner: Claude (μμ CEO)
- Sprint #5 νμ: 5 νλͺ© λͺ¨λ GO
- Duration: ~80λΆ
- κ²°κ³Ό: π’ 5/5 νΈλ GO
5 νΈλ κ²°κ³Ό
| Track |
κ²°κ³Ό |
ν΅μ¬ μ°μΆ |
| A: Source spend hook μ¬μΈμ μ
|
β
|
4 platform spend ν¨μμ TS-correct SPRINT6_SPEND_HOOK μΈμ μ
(platformλ³ μκ·Έλμ² μ°¨μ΄ λ°μ). npx tsc --noEmit 0 errors Γ 4. μ¬λΉλ μμ . |
| B: λ§λ£ μλ¦Ό μμ€ν
|
β
|
point_expiration_alerts ν
μ΄λΈ + expiration_alerts.py + cron 05:00. 30/7/1d μκ³ λ©±λ± μ μ¬. SMTP/Kakao λ°μ‘μ λ³λ |
| C: Outbox dead letter |
β
|
drain λ‘μ§: attempts β₯ 3 β dead_letter μλ μ μ΄. /api/v1/points/outbox/{dead-letters, retry/:id, cancel/:id} admin μλν¬μΈνΈ |
| D: 7 platform UX |
β
|
kahan:3720 /platforms/:uid (full info incl. is_shadow). /opt/star365-hub/public/me-platforms.html + /me/platforms.json proxy. real/shadow μκ° κ΅¬λΆ + URL λ§ν¬ |
| E: devtool μ€ν¬λ¦½νΈ |
β
|
/opt/star365-hq/scripts/add_platform.sh (160 lines): μ κ· platform μΆκ° μ ecosystem κ°±μ + dist hook μΈμ μ
μλ + 5/6/7 μλ μλ΄ |
κ²μ¦ (15/15 DC PASS)
| # |
κΈ°μ€ |
κ²°κ³Ό |
| 1 |
4 platform source SPRINT6_SPEND_HOOK |
β
all 2 markers |
| 2 |
4 platform npx tsc 0 errors |
β
|
| 3 |
point_expiration_alerts ν
μ΄λΈ |
β
|
| 4 |
expiration_alerts.py dry/real |
β
30d=2 + 7d=2 inserted (ν
μ€νΈ) |
| 5 |
cron 05:00 λ±λ‘ |
β
|
| 6 |
Outbox drain attempts β₯ 3 β dead_letter |
β
|
| 7 |
GET /outbox/dead-letters |
β
200 |
| 8 |
POST /outbox/retry/:id |
β
200 |
| 9 |
POST /outbox/cancel/:id |
β
|
| 10 |
kahan:3720 /platforms/:uid |
β
eb9322 5 platforms λ°ν |
| 11 |
/me/platforms HTML 200 |
β
|
| 12 |
/me/platforms.json proxy |
β
|
| 13 |
add_platform.sh (idempotent) |
β
finance μ¬μ€ν μ μ |
| 14 |
cron 5κ° (recon/tier/expire/drain/alerts) |
β
|
| 15 |
scripts 5κ° (recon/tier/expire/alerts/add_platform) |
β
|
λμ ν¨κ³Ό (Sprint #1~#6)
unified_point_accounts: 22 β 46 accounts (+25)
total balance: 219,850 β 336,700P (+116,850)
total earned: 367,950 β 371,600P (+3,650 sprint κ²μ¦λΆ)
νμ± μλν:
β
6 platform μλ earn/spend β unified
β
6 platform μλ signup β ν΅ν© λ±λ‘ + 7 platform shadow
β
Reconciliation cron */15 β divergence detection
β
Tier μλ μΉκΈ daily 03:30 β BRONZEβSILVERβGOLDβPLATINUM
β
ν¬μΈνΈ λ§λ£ daily 04:00 β EXPIRE μλ
β
λ§λ£ μλ¦Ό daily 05:00 β 30/7/1d λ¨κ³
β
Outbox/Retry queue + cron */5 + dead letter
β
Hospital crash loop ν΄κ²° β restarts=0
β
ν΅ν© μκ³ UI (λͺ¨λ°μΌ+tier+platforms νμ΄μ§)
β
4 TS source 0 errors (μ¬λΉλ κ°λ₯)
β
devtool μ κ· platform μλ μΆκ°
β
UFW 무λ³κ²½ (CLAUDE.md μ€μ)
μμ κ²μ¦
- β
νΈλ μ΄λ© 무μν₯ (gunja-pair-hedge / gunja-multi-tenant active)
- β
UFW 무λ³κ²½
- β
DB DROP 0건 (UPDATE/INSERT/ALTER/CREATEλ§)
- β
μλ² μ¬λΆν
0ν
- β
λΌμ΄λΈ μν₯ 0μ΄ (λͺ¨λ λ³κ²½ graceful)
νκ°
| κΈ°μ€ |
μ μ |
| product_depth |
9/10 |
| functionality |
9/10 |
| code_quality |
9/10 (source hooks TS-correct, dist λκΈ°) |
| design |
9/10 |
| Overall |
9.0/10 β PASS |
Files Changed (Sprint #6)
+ /opt/star365-hq/scripts/expiration_alerts.py (90 lines)
+ /opt/star365-hq/scripts/add_platform.sh (160 lines)
+ /opt/star365-hub/public/me-platforms.html
+ kahan gunja_news.point_expiration_alerts table + idx + FK
+ kahan /opt/star365-members/server.mjs:
- SPRINT5_XPLAT_SHADOW (μ¬μ μ©)
- GET /platforms/:uid (full info)
M /opt/star365-hub/server.mjs:
- GET /me/platforms (HTML)
- GET /me/platforms.json (proxy β kahan:3720/platforms/:uid)
M /opt/star365-hq/api/server.mjs:
- drain dead_letter μλ μ μ΄
- GET /api/v1/points/outbox/dead-letters
- POST /api/v1/points/outbox/retry/:id
- POST /api/v1/points/outbox/cancel/:id
M /opt/finance/apps/api-gateway/src/modules/point/point.service.ts (+SPRINT6_SPEND_HOOK)
M /opt/legal/apps/api-gateway/src/points/points.service.ts (+SPRINT6_SPEND_HOOK)
M /opt/assistant/apps/api-gateway/src/modules/points/points.service.ts (+SPRINT6_SPEND_HOOK)
M /opt/hospital/apps/api-gateway/src/points/points.service.ts (+SPRINT6_SPEND_HOOK)
+ cron: expiration_alerts λ§€μΌ 05:00 KST (5λ²μ§Έ cron)
μ§μ§ λ¨μ νλͺ© (λ³λ sprint)
- SMTP/Kakao ν΅ν© λ°μ‘ β alerts ν
μ΄λΈμ μ μ¬λ ν μΈλΆ λ°μ‘
- dist μ¬λΉλ + Sprint #6 source hooks λ°μ β λΉλ νκ²½ + μμ‘΄μ± μ 리 νμ
- pet/shop μ체 plat νμ±ν β νμ¬ 0 rows
- paperclip ledger 4 archived rows μ 리 (UPDATE/DELETE)
- μ¬μ©μ actual experience: members.star365.site/signup β ν΅ν© μ κ· κ°μ
UX (νμ¬ μλ shadowλ λ¨, λ¨μΌ formμ λ³λ)