mirror of
https://github.com/hanzoai/insights.git
synced 2026-10-30 16:15:31 +00:00
PersonHog was the last of it, and it was not only a name. The package is personinsights and the types in it are already Person* -- the shipped descriptor under personinsights_client/proto/generated says PersonService and the tests say TestFakePersonClient -- but the .proto still declared PersonHogService. A client dialling one service name and a server built from a .proto declaring another is not a naming problem, it is a wire that does not connect; the only reason nobody hit it is that none of these services runs here yet. Five service declarations now say what the generated client has said all along. StreamHog was a second fictional company, invented so a Stripe mock had someone to bill. This fork already has Hedgebox, in five hundred fixtures, so the mock bills Hedgebox and there is one made-up company again instead of two. REVIEW_HOG was an enum member in three enums that had to agree, whose value has been `review` since the app was renamed. Only the member said otherwise. Every rule is in bin/debrand and every spelling is refused there, so a fresh upstream import lands on these names and none of them can come back. Two are named as outstanding rather than refused, with the reason each is still sayable: hogdesk survives inside applied migrations' choices lists, where Django compares it in Python and never writes it -- the member is Desk = "desk" and all three tables that store it hold no rows; sherlockhog keys a service in another repository that still calls itself that, and renaming our half would classify its traffic as a product that does not exist. Co-authored-by: Hanzo Dev <[email protected]>
456 lines
14 KiB
YAML
456 lines
14 KiB
YAML
# Intent-based developer environment configuration
|
|
#
|
|
# This file defines the domain model for developer environments:
|
|
# - Intent: What the developer is working on (products like error_tracking, session_replay)
|
|
# - Capabilities: Stable abstractions (event_ingestion, replay_storage, etc.)
|
|
#
|
|
# Process definitions (which processes provide which capability) are in bin/mprocs.yaml.
|
|
# Each process declares its capability via the `capability` field.
|
|
|
|
version: '1.0'
|
|
|
|
# Capabilities are stable abstractions over processes
|
|
# - requires: dependencies resolved transitively
|
|
# - docker_profiles: docker compose profiles to activate (see docker-compose.profiles.yml)
|
|
# - Processes are NOT listed here - they declare their capability in mprocs.yaml
|
|
capabilities:
|
|
core_infra:
|
|
description: 'Essential infrastructure (docker, postgres, datastore)'
|
|
docker_profiles: []
|
|
|
|
event_ingestion:
|
|
description: 'Kafka-based event pipeline for event capture'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
property_definitions:
|
|
description: 'Track and define event/person properties'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
property_values:
|
|
description: 'Aggregate distinct property values for autocomplete'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
replay_storage:
|
|
description: 'Session replay blob storage and capture'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [replay]
|
|
|
|
browser_rendering:
|
|
description: 'Browserless container for heatmap screenshots and image exports'
|
|
requires: [core_infra]
|
|
docker_profiles: [browserless]
|
|
|
|
error_symbolication:
|
|
description: 'Error stack trace symbolication service'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
error_notifications:
|
|
description: 'Error tracking ingestion notifications consumer'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
flag_evaluation:
|
|
description: 'Fast feature flag evaluation service'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
coordination:
|
|
description: 'etcd-based coordination for personinsights and Kafka partition assignment'
|
|
requires: [core_infra]
|
|
docker_profiles: [etcd]
|
|
|
|
celery_workers:
|
|
description: 'Celery background job processing'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
celery_scheduler:
|
|
description: 'Celery beat scheduler for periodic tasks'
|
|
requires: [celery_workers]
|
|
docker_profiles: []
|
|
|
|
temporal_workflows:
|
|
description: 'Temporal workflow orchestration'
|
|
requires: [core_infra]
|
|
docker_profiles: [temporal]
|
|
|
|
recording_rasterizer:
|
|
description: 'Temporal worker that records session replays to video'
|
|
requires: [temporal_workflows]
|
|
docker_profiles: []
|
|
|
|
dagster_pipelines:
|
|
description: 'Dagster data pipeline orchestration'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
llm_gateway:
|
|
description: 'LLM gateway for AI features'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
agent_proxy:
|
|
description: 'Agent proxy streaming service for live task-run streaming (Tasks product)'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
ai_capture:
|
|
description: 'AI event capture service'
|
|
requires: [event_ingestion, llm_gateway, personinsights]
|
|
docker_profiles: []
|
|
|
|
embedding_service:
|
|
description: 'Vector embedding worker for AI features'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
opensearch_search:
|
|
description: 'OpenSearch reverse index for LLM trace search'
|
|
requires: [core_infra]
|
|
docker_profiles: [opensearch]
|
|
|
|
llm_analytics_sentiment:
|
|
description: 'Sentiment classification model for AI observability (installs torch, optimum ~2GB)'
|
|
requires: [temporal_workflows]
|
|
docker_profiles: []
|
|
uv_groups: [sentiment]
|
|
|
|
livestream:
|
|
description: 'Real-time event streaming'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
cyclotron:
|
|
description: 'Cyclotron job queue infrastructure (includes shadow for testing)'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
ai_gateway:
|
|
description: 'Local Go ai-gateway (sibling ~/Development/ai-gateway) - routes model calls'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
# Node.js capability groups - control which consumers run to reduce event loop contention
|
|
nodejs_cdp:
|
|
description: 'Node.js CDP - destinations, webhooks, and realtime alerts'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
nodejs_cdp_workflows:
|
|
description: 'Node.js CDP + Workflows - full CDP with InsightsFlow workflow automation'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
nodejs_realtime_cohorts:
|
|
description: 'Node.js Realtime Cohorts - precalculated filters and cohort membership'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
nodejs_session_replay:
|
|
description: 'Node.js Session Replay - recording ingestion'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [replay]
|
|
|
|
nodejs_logs:
|
|
description: 'Node.js Logs - log ingestion'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [observability]
|
|
|
|
nodejs_metrics:
|
|
description: 'Node.js Metrics - metric ingestion'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [observability]
|
|
|
|
nodejs_traces:
|
|
description: 'Node.js Traces - trace ingestion'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [observability]
|
|
|
|
logs_ingestion:
|
|
description: 'OTEL logs, traces, and metrics capture service'
|
|
requires: [event_ingestion]
|
|
docker_profiles: [observability]
|
|
|
|
nodejs_feature_flags:
|
|
description: 'Node.js Feature Flags - evaluation scheduler'
|
|
requires: [flag_evaluation]
|
|
docker_profiles: []
|
|
|
|
nodejs_error_tracking:
|
|
description: 'Node.js Error Tracking - exception event ingestion'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
batch_imports:
|
|
description: 'Batch data import worker'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
warehouse_webhook_sink:
|
|
description: 'Kafka → S3 parquet sink for data warehouse webhook sources'
|
|
requires: [event_ingestion]
|
|
docker_profiles: []
|
|
|
|
personinsights:
|
|
description: 'personinsights gRPC service (router + replica + leader) for person data access'
|
|
requires: [core_infra, coordination]
|
|
docker_profiles: []
|
|
|
|
observability:
|
|
description: 'OpenTelemetry tracing with Jaeger'
|
|
requires: [core_infra]
|
|
docker_profiles: [observability]
|
|
|
|
dev_tools:
|
|
description: 'Development debugging tools (Kafka UI, Flower, etc.)'
|
|
requires: [core_infra]
|
|
docker_profiles: [dev_tools]
|
|
|
|
mcp_server:
|
|
description: 'MCP server for AI assistant integration'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
stripe_app:
|
|
description: 'Stripe app for Insights integration'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
stripe_mock:
|
|
description: 'Local Stripe mock API for data warehouse import testing'
|
|
requires: []
|
|
docker_profiles: []
|
|
|
|
duckgres:
|
|
description: 'Duckgres query server (DuckDB with Postgres wire protocol)'
|
|
requires: [core_infra]
|
|
docker_profiles: [duckgres]
|
|
|
|
desktop_app:
|
|
description: 'Insights Desktop app (Electron) and its package watchers'
|
|
requires: [core_infra]
|
|
docker_profiles: []
|
|
|
|
# Intents map to products/features developers work on
|
|
intents:
|
|
product_analytics:
|
|
description: 'Core product analytics (insights, funnels, trends)'
|
|
capabilities: [event_ingestion, property_definitions, property_values, celery_workers, nodejs_cdp]
|
|
|
|
error_tracking:
|
|
description: 'Track and analyze application errors'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
error_symbolication,
|
|
error_notifications,
|
|
embedding_service,
|
|
property_definitions,
|
|
property_values,
|
|
nodejs_cdp,
|
|
nodejs_error_tracking,
|
|
]
|
|
|
|
session_replay:
|
|
description: 'Record and replay user sessions'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
replay_storage,
|
|
property_definitions,
|
|
property_values,
|
|
celery_workers,
|
|
temporal_workflows,
|
|
nodejs_session_replay,
|
|
recording_rasterizer,
|
|
]
|
|
|
|
feature_flags:
|
|
description: 'Feature flag management and evaluation'
|
|
capabilities: [flag_evaluation, coordination, celery_workers, celery_scheduler, nodejs_feature_flags]
|
|
|
|
experiments:
|
|
description: 'A/B testing and experimentation'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
flag_evaluation,
|
|
property_definitions,
|
|
property_values,
|
|
celery_workers,
|
|
nodejs_feature_flags,
|
|
nodejs_cdp,
|
|
dagster_pipelines,
|
|
temporal_workflows,
|
|
]
|
|
|
|
llm_analytics:
|
|
description: 'LLM/AI observability and analytics'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
ai_capture,
|
|
llm_gateway,
|
|
embedding_service,
|
|
property_definitions,
|
|
property_values,
|
|
temporal_workflows,
|
|
llm_analytics_sentiment,
|
|
]
|
|
|
|
mcp_analytics:
|
|
description: 'MCP analytics intent clustering and session summarisation'
|
|
capabilities:
|
|
[event_ingestion, llm_gateway, embedding_service, property_definitions, property_values, temporal_workflows]
|
|
|
|
web_analytics:
|
|
description: 'Web analytics, traffic analysis, and heatmaps'
|
|
capabilities:
|
|
[event_ingestion, replay_storage, property_definitions, property_values, livestream, browser_rendering]
|
|
|
|
surveys:
|
|
description: 'User surveys and feedback collection'
|
|
capabilities:
|
|
[event_ingestion, property_definitions, property_values, celery_workers, celery_scheduler, nodejs_cdp]
|
|
|
|
data_warehouse:
|
|
description: 'Data warehouse queries and saved queries'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
property_definitions,
|
|
property_values,
|
|
celery_workers,
|
|
temporal_workflows,
|
|
warehouse_webhook_sink,
|
|
]
|
|
|
|
cohorts:
|
|
description: 'User cohort management'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
property_definitions,
|
|
property_values,
|
|
celery_workers,
|
|
celery_scheduler,
|
|
nodejs_realtime_cohorts,
|
|
]
|
|
|
|
pipelines:
|
|
description: 'Data pipeline transformations and destinations'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
property_definitions,
|
|
property_values,
|
|
celery_workers,
|
|
temporal_workflows,
|
|
nodejs_cdp_workflows,
|
|
cyclotron,
|
|
]
|
|
|
|
ai_features:
|
|
description: 'AI features'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
llm_gateway,
|
|
embedding_service,
|
|
opensearch_search,
|
|
property_definitions,
|
|
property_values,
|
|
temporal_workflows,
|
|
agent_proxy,
|
|
]
|
|
|
|
tasks:
|
|
description: 'Tasks: agent task runs and orchestration'
|
|
capabilities: [event_ingestion, llm_gateway, celery_workers, celery_scheduler, temporal_workflows, agent_proxy]
|
|
|
|
logs:
|
|
description: 'Log aggregation and viewing'
|
|
capabilities:
|
|
[event_ingestion, property_definitions, property_values, logs_ingestion, nodejs_logs, nodejs_traces]
|
|
|
|
metrics:
|
|
description: 'Metric ingestion and viewing'
|
|
capabilities: [event_ingestion, property_definitions, property_values, logs_ingestion, nodejs_metrics]
|
|
|
|
workflows:
|
|
description: 'Workflow automation and orchestration'
|
|
capabilities:
|
|
[
|
|
event_ingestion,
|
|
property_definitions,
|
|
property_values,
|
|
temporal_workflows,
|
|
nodejs_cdp_workflows,
|
|
cyclotron,
|
|
]
|
|
|
|
tracing:
|
|
description: 'OpenTelemetry tracing with Jaeger UI'
|
|
capabilities: [observability]
|
|
|
|
debug_tools:
|
|
description: 'Kafka UI, Flower (Celery), maildev, webhook tester'
|
|
capabilities: [dev_tools]
|
|
|
|
mcp:
|
|
description: 'MCP server for AI assistant integration'
|
|
capabilities: [mcp_server]
|
|
|
|
stripe:
|
|
description: 'Stripe app for Insights integration'
|
|
capabilities: [stripe_app]
|
|
|
|
personinsights:
|
|
description: 'personinsights gRPC service for person data access (replaces direct DB queries)'
|
|
capabilities: [personinsights]
|
|
|
|
endpoints:
|
|
description: 'Endpoints (the product)'
|
|
capabilities:
|
|
[event_ingestion, property_definitions, property_values, celery_workers, temporal_workflows, duckgres]
|
|
|
|
revenue_analytics:
|
|
description: 'Mock Stripe API with seed billing data for revenue analytics testing'
|
|
capabilities:
|
|
[event_ingestion, property_definitions, property_values, celery_workers, temporal_workflows, stripe_mock]
|
|
|
|
dagster:
|
|
description: 'Dagster for datastore maintenance, system workflows'
|
|
capabilities: [dagster_pipelines]
|
|
|
|
desktop:
|
|
description: 'Insights Desktop app (Electron) with local task runs'
|
|
capabilities: [desktop_app, temporal_workflows, agent_proxy, llm_gateway]
|
|
|
|
# Always-required processes regardless of intent
|
|
# This is the core stack needed for any development
|
|
always_required:
|
|
- backend
|
|
- frontend
|
|
- typegen
|
|
- docker-compose
|
|
# Migrations (DBs created by postgres init scripts, run for everyone)
|
|
- migrate-postgres
|
|
- migrate-datastore
|
|
- migrate-persons-db
|
|
- migrate-behavioral-cohorts
|
|
# Core services
|
|
- celery-worker
|
|
- celery-beat
|
|
- nodejs
|
|
- capture
|
|
- feature-flags
|
|
- hypercache-server
|
|
- property-defs-rs
|
|
- personinsights-replica
|
|
- personinsights-router
|