Signal Pipeline เป็นโครงสร้างพื้นฐาน A-owned · อยู่ก่อน runtime ทุกตัว · ตอบสนอง CLAUDE.md Layer B (Event Bus) · Layer C (Data Lake) · Layer D (Pipelines) · Layer E (Knowledge Store). Feeds Dashboard (metrics) · Cases (AI analytics + multi-source intake) · Alerting (breach detect) · Wallet (transactions WORM) · City Health (vital signs).
| Topic | Parts | Retention | Producer (A) | Consumer Target | Binding | Notes |
|---|---|---|---|---|---|---|
| ptt.booking.events | 12 | 30d | booking-svc | Bronze · Cases (signal) | mapped-not-bound | key: user_id · snappy |
| ptt.payment.transactions | 24 | 7yr | payment-svc | WORM S3 · Wallet | mapped-not-bound | compress=none · Object Lock |
| ptt.payment.wallet-events | 12 | 90d | wallet-svc | Silver · user_wallet_summary | mapped-not-bound | — |
| ptt.affiliate.clicks | 8 | 30d | affiliate-svc | Bronze · attribution | mapped-not-bound | key: partner_id |
| ptt.affiliate.conversions | 8 | 365d | affiliate-svc | Gold · affiliate_mart | mapped-not-bound | WHT 3% calc |
| ptt.behavior.clickstream | 48 | 3d | behavior-svc | Bronze · session_analytics | mapped-not-bound | lz4 compression |
| ptt.behavior.search-events | 24 | 14d | behavior-svc | Silver · search_intent | mapped-not-bound | — |
| ptt.location.pings | 48 | 24h | location-svc (fuzz ±50m) | Silver · h3_heatmap (k≥5) | placeholder | PDPA: consent_location=true required |
| ptt.location.poi-visits | 12 | 90d | location-svc | Gold · visit_frequency | placeholder | k-anon ≥5 before materialize |
| ptt.ugc.content-created | 8 | ∞ compact | ugc-svc | rag-embed → pgvector | mapped-not-bound | key: poi_id |
| ptt.reviews.submitted | 8 | ∞ compact | reviews-svc | rag-embed + sentiment | mapped-not-bound | — |
| ptt.knowledge.ingest-requests | 4 | 7d | ingest-svc | dag_notebooklm_ingestion | placeholder | PDF/Audio/Video → Whisper |
| ptt.ai.llm-interactions | 8 | 90d | ai-svc | Silver · RAGAS eval | mapped-not-bound | Faithfulness log |
| ptt.external.signals | 4 | 30d | external-signals | Bronze · multi_source_intake | mapped-not-bound | key: location_id |
| ptt.metrics.kpi-snapshots | 4 | 365d | kpi-emitter | TimescaleDB · dashboard feed | mapped-not-bound | daily dag_kpi_snapshot |
| ptt.feedback.nps | 4 | 365d | feedback-svc | Silver · nps_trend | mapped-not-bound | — |
| ptt.audit.trail | 8 | 7yr | audit-emitter | WORM · compress=none | placeholder | Admin plane audit chain |
| ptt.notifications.outbound | 6 | 7d | notifier-svc | PagerDuty/Slack/LINE | placeholder | alerting_model escalation |
| ptt.booking.status-changes | 12 | 7d | booking-svc | Silver · booking_lifecycle | mapped-not-bound | key: booking_id |
Source: city_health_contract.panels.*.metrics[*]. Every metric carries a_owned_dependency + refresh_cadence_request.
| B Metric | A Signal Source | Refresh | Binding | Notes |
|---|---|---|---|---|
| vital_sign.fever | AI sentiment from reviews + UGC | 15min | mapped-not-bound | Threshold <7/10 · verbatim CONCEPT-005 |
| vital_sign.heartbeat | Booking completion rate · silver mart | 15min | mapped-not-bound | Threshold <60% · verbatim CONCEPT-005 |
| vital_sign.blood_density | Spend velocity anomaly · Z-score | 1hr | mapped-not-bound | Threshold −20% · verbatim |
| vital_sign.respiration | External AQI API | 1hr | placeholder | Threshold AQI >100 · needs API key |
| vital_sign.pressure | Civic report aggregation | 6hr | placeholder | Threshold +30% volume · verbatim |
| zone_uplift | H3-cell GMV uplift · k-anon ≥5 | daily | placeholder | Proposed · Claude-derived formula · requires_human_review |
| pulse | Real-time activity rate | 1min | mapped-not-bound | Proposed · TimescaleDB continuous aggregate |