[
  {
    "id": "PLT-REQ-001",
    "requirement": "TypeScript strict mode enforced across all services",
    "source": "AGENT.md §1.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "tsconfig.json strict check",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-002",
    "requirement": "No shared databases between microservices",
    "source": "AGENT.md §5.2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "contract",
    "test_reference": "cross-service-db.contract.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-003",
    "requirement": "All REST APIs follow OpenAPI 3.1 with /v1/ versioning",
    "source": "AGENT.md §6.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "contract",
    "test_reference": "openapi-validation.contract.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-004",
    "requirement": "UUID primary keys on all database tables",
    "source": "AGENT.md §7.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "db-schema.integration.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-005",
    "requirement": "All services expose /health/live and /health/ready",
    "source": "AGENT.md §12.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "health-endpoints.integration.test",
    "observability_signal": "metric",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-006",
    "requirement": "Prometheus metrics exposed on /metrics for all services",
    "source": "AGENT.md §12.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "metrics-endpoint.integration.test",
    "observability_signal": "metric",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-007",
    "requirement": "OpenTelemetry tracing in all services",
    "source": "AGENT.md §12.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "otel-tracing.integration.test",
    "observability_signal": "trace",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-008",
    "requirement": "NATS consumers must be durable with explicit acks",
    "source": "AGENT.md §9.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "nats-durable.integration.test",
    "observability_signal": "metric, log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-009",
    "requirement": "Dead-letter queues for all NATS consumers",
    "source": "AGENT.md §9.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "nats-dlq.integration.test",
    "observability_signal": "metric, log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-010",
    "requirement": "No fire-and-forget NATS publishing",
    "source": "AGENT.md §9.2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "nats-client.unit.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-011",
    "requirement": "Firebase Authentication for user sessions",
    "source": "system.md §2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "auth-firebase.integration.test",
    "observability_signal": "log, trace",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-012",
    "requirement": "API Key authentication for programmatic access",
    "source": "system.md §2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "auth-apikey.integration.test",
    "observability_signal": "log, trace",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-013",
    "requirement": "HMAC signatures for all webhook payloads",
    "source": "AGENT.md §11.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "hmac-signing.unit.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-014",
    "requirement": "Secrets stored in Vault or K8s Secrets — never plaintext",
    "source": "AGENT.md §11.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "",
    "test_reference": "Manual audit",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-015",
    "requirement": "RBAC with admin, customer, operator roles",
    "source": "system.md §2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "rbac.integration.test",
    "observability_signal": "log, trace",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-016",
    "requirement": "All sms_messages partitioned by month in Postgres",
    "source": "AGENT.md §7.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "db-partitioning.integration.test",
    "observability_signal": "metric",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-017",
    "requirement": "Redis used for rate limiting, idempotency, and caching only",
    "source": "AGENT.md §8",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "redis-usage.integration.test",
    "observability_signal": "metric",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-018",
    "requirement": "SMPP 3.4 with enquire_link heartbeat and operator failover",
    "source": "system.md §2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "smpp-connector.integration.test",
    "observability_signal": "metric, log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-019",
    "requirement": "Domain layer contains zero framework imports",
    "source": "AGENT.md §4.2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "domain-isolation.unit.test",
    "observability_signal": "",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-020",
    "requirement": "Conventional commits enforced in CI",
    "source": "AGENT.md §16",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "",
    "test_reference": "commitlint CI step",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-021",
    "requirement": "All APIs input-validated with Zod",
    "source": "AGENT.md §6.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "zod-validation.unit.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-022",
    "requirement": "HTTPS everywhere — no plaintext HTTP in production",
    "source": "AGENT.md §11.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "",
    "test_reference": "Manual + Cloudflare config",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-023",
    "requirement": "Pino structured logging in all services",
    "source": "AGENT.md §12.1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "integration",
    "test_reference": "logging.integration.test",
    "observability_signal": "log",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-024",
    "requirement": "console.log forbidden in production",
    "source": "AGENT.md §12.2",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "unit",
    "test_reference": "no-console.lint.rule",
    "observability_signal": "",
    "status": "Draft"
  },
  {
    "id": "PLT-REQ-025",
    "requirement": "Monorepo pnpm workspace structure as defined in system.md §1",
    "source": "system.md §1",
    "epic": "",
    "feature": "",
    "user_story": "",
    "test_level": "",
    "test_reference": "CI workspace validation",
    "observability_signal": "log",
    "status": "Draft"
  }
]
