Files
foxhunt/services/broker_gateway_service/k8s/service.yaml
jgrusewski 00ef9e2866 Wave 15: Complete FactoredAction migration to 45-action system
Major Changes:
- Migrated from 3-action TradingAction to 45-action FactoredAction
- 45 actions: 5 exposure × 3 order types × 3 urgency levels
- Absolute exposure model (target positions -1.0 to +1.0)
- Transaction cost differentiation (Market 0.15%, LimitMaker 0.05%, IoC 0.10%)
- Fixed action diversity threshold (1.11% → 0.5% for 45-action space)

Bug Fixes:
- Bug #15: Incomplete FactoredAction integration (code existed but unused)
- Bug #16: Runtime crash in action diversity checking (hardcoded 3-action match)

Code Changes (13 files, ~464 lines):
- ml/src/dqn/action_space.rs: Core FactoredAction + 4 helper methods
- ml/src/trainers/dqn.rs: Action diversity refactored (3→45 dynamic)
- ml/src/dqn/reward.rs: calculate_reward() signature updated
- ml/src/dqn/portfolio_tracker.rs: execute_action() absolute exposure
- ml/src/dqn/dqn.rs: WorkingDQN action selection migrated
- ml/tests/*.rs: 9 test files updated with FactoredAction assertions

Test Results:
- 1-epoch smoke test: 100% action diversity (45/45 actions, 80.2s)
- 10-epoch production: 87.8% readiness (79/90 scorecard, 14.0 min)
- Loss convergence: 96.9% reduction (119K → 3.6K)
- Action diversity: 100% → 44% (healthy specialization)
- Checkpoint reliability: 12/12 files saved (100%)
- DQN tests: 195/195 passing (100%)
- ML baseline: 1,514/1,515 passing (99.93%)

Production Status:  CERTIFIED (87.8% readiness)
Go/No-Go:  GO FOR 100-EPOCH PRODUCTION TRAINING

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 23:27:02 +01:00

90 lines
1.9 KiB
YAML

apiVersion: v1
kind: Service
metadata:
name: broker-gateway-service
namespace: foxhunt
labels:
app: broker-gateway-service
component: broker
tier: backend
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9096"
prometheus.io/path: "/metrics"
spec:
type: ClusterIP
selector:
app: broker-gateway-service
ports:
# gRPC service port
- name: grpc
port: 50056
targetPort: 50056
protocol: TCP
# Health check HTTP endpoint
- name: health
port: 8086
targetPort: 8086
protocol: TCP
# Prometheus metrics endpoint
- name: metrics
port: 9096
targetPort: 9096
protocol: TCP
# Session affinity: None (stateless, round-robin load balancing)
sessionAffinity: None
# ClusterIP allocation
clusterIP: None # Headless service for StatefulSet
---
apiVersion: v1
kind: Service
metadata:
name: broker-gateway-service-lb
namespace: foxhunt
labels:
app: broker-gateway-service
component: broker
tier: backend
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9096"
prometheus.io/path: "/metrics"
spec:
type: LoadBalancer
selector:
app: broker-gateway-service
ports:
# gRPC service port (external access)
- name: grpc
port: 50056
targetPort: 50056
protocol: TCP
nodePort: 30056 # Fixed NodePort for external access
# Prometheus metrics endpoint (external monitoring)
- name: metrics
port: 9096
targetPort: 9096
protocol: TCP
# Session affinity: ClientIP (sticky sessions for FIX protocol)
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800 # 3 hours
---
apiVersion: v1
kind: Endpoints
metadata:
name: broker-gateway-service
namespace: foxhunt
labels:
app: broker-gateway-service
# Endpoints are auto-populated by Kubernetes based on pod IPs