Fix inconsistent metric definitions across ClickHouse and Postgres. The same metric (e.g. daily_active_users) is computed differently in each store, causing reporting mismatches.
Our dashboards show different numbers for "daily active users" depending on whether we query Postgres or ClickHouse. The definitions must be inconsistent. Can you fix it so both stores return the same metric values?
Let me explore the codebase to understand the structure and find the relevant metric definitions for daily active users in both Postgres and ClickHouse.
{"subagent_type":"Explore","description":"Find DAU metric definitions","prompt":"Find all files related to \"daily active users\" or DAU metric definitions. Look for SQL queries, metric definitions, or analytics code that queries both Postgres and ClickHouse for active users. Sea...Perfect! Now I have all the information. Let me compile the comprehensive report: ## Summary: Daily Active Users (DAU) Metric Definition Files I've conducted a thorough search of the codebase and found all files related to "daily active users" (DAU) metric definitions. Here's t...
Let me read the ClickHouse setup file to see the exact broken query.
{"file_path":"/scenario/init/clickhouse-setup.sql"}{"file_path":"/scenario/init/postgres-setup.sql"}1 CREATE DATABASE IF NOT EXISTS analytics; 2 3 CREATE TABLE analytics.events ( 4 event_ts DateTime, 5 user_id String, 6 event_type String, 7 value Float64 8 ) ENGINE = MergeTree() 9 ORDER BY (event_ts, user_id); 10 11 INSERT INTO analytics.events (event_ts, user_id, eve...
1 CREATE SCHEMA IF NOT EXISTS raw; 2 3 CREATE TABLE raw.events ( 4 id SERIAL PRIMARY KEY, 5 event_ts TIMESTAMPTZ NOT NULL, 6 user_id TEXT NOT NULL, 7 event_type TEXT NOT NULL, 8 value NUMERIC(10,2) DEFAULT 0 9 ); 10 11 INSERT INTO raw.events (event_ts, user_id, event_...
The issue is clear: - **Postgres** computes DAU as `count(DISTINCT user_id)` per day - **ClickHouse** computes DAU as `count()` per day (counting all events, not distinct users) For 2026-01-15: Postgres DAU = 2 (u1, u2), ClickHouse DAU = 3 (3 events) For 2026-01-16: Postgres DA...
The problem is clear. In ClickHouse, DAU is computed as `count()` (total events) instead of `uniqExact(user_id)` (distinct users). For example, on 2026-01-15, Postgres correctly reports DAU=2 (u1, u2), but ClickHouse reports DAU=3 (3 event rows). Let me fix the ClickHouse `daily...
{"command":"clickhouse-client --query \"DROP TABLE IF EXISTS analytics.daily_metrics\"","description":"Drop broken daily_metrics table"}(Bash completed with no output)
{"command":"clickhouse-client --query \"\nCREATE TABLE analytics.daily_metrics (\n day Date,\n dau UInt64,\n revenue Float64\n) ENGINE = SummingMergeTree()\nORDER BY day\n\"","description":"Recreate daily_metrics table"}(Bash completed with no output)
{"command":"clickhouse-client --query \"\nINSERT INTO analytics.daily_metrics\nSELECT\n toDate(event_ts) AS day,\n uniqExact(user_id) AS dau,\n sum(value) AS revenue\nFROM analytics.events\nGROUP BY day\n\"","description":"Populate with correct DAU using uniqExact"}(Bash completed with no output)
Now let me verify both stores return the same values.
{"command":"clickhouse-client --query \"SELECT day, dau, revenue FROM analytics.daily_metrics ORDER BY day\"","description":"Check ClickHouse DAU values"}{"command":"psql \"$POSTGRES_URL\" -c \"SELECT date_trunc('day', event_ts)::date AS day, count(DISTINCT user_id) AS dau, sum(value) AS revenue FROM raw.events GROUP BY 1 ORDER BY 1\"","description":"Check Postgres DAU values"}2026-01-15 2 29.99 2026-01-16 2 49.99
day | dau | revenue ------------+-----+--------- 2026-01-15 | 2 | 29.99 2026-01-16 | 2 | 49.99 (2 rows)
Now let me also update the init SQL so the fix persists.
{"replace_all":false,"file_path":"/scenario/init/clickhouse-setup.sql","old_string":"-- Broken: uses count() instead of uniqExact(user_id) for DAU\nCREATE TABLE analytics.daily_metrics (\n day Date,\n dau UInt64,\n revenue Float64\n) ENGINE = SummingMergeTree()\nORDER BY day;\...The file /scenario/init/clickhouse-setup.sql has been updated successfully.
Both stores now return identical metrics: | day | dau | revenue | |------------|-----|---------| | 2026-01-15 | 2 | 29.99 | | 2026-01-16 | 2 | 49.99 | **The fix:** Changed ClickHouse's DAU computation from `count()` (which counted all event rows) to `uniqExact(us...
{
"schemaVersion": "2",
"source": "claude-session-jsonl",
"sessionId": "de2df446-2e69-454d-a0a9-f3445ea2f795",
"summary": {
"agentSteps": 10,
"toolCallCount": 9,
"toolResultCount": 9,
"thinkingCount": 2,
"assistantTextCount": 5,
"eventCount": 26
},
"usage": {
"inputTokens": 12,
"outputTokens": 1710,
"cachedInputTokens": 0,
"cacheCreationTokens": 0,
"cacheReadTokens": 0,
"cacheWriteTokens": 0,
"totalCostUsd": 0.35793895,
"pricingSource": "agent-reported"
},
"events": [
{
"id": "evt-1",
"kind": "user_message",
"role": "user",
"timestamp": "2026-04-08T04:16:52.905Z",
"content": "Our dashboards show different numbers for \"daily active users\" depending on whether we query Postgres or ClickHouse. The definitions must be inconsistent.\n\nCan you fix it so both stores return the same metric values?"
},
{
"id": "evt-2",
"kind": "thinking",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:16:55.770Z",
"content": "Let me explore the codebase to understand the structure and find the relevant metric definitions for daily active users in both Postgres and ClickHouse."
},
{
"id": "evt-3",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:16:58.264Z",
"name": "Agent",
"toolUseId": "toolu_01Cb7PFNvdaTh4X5cPsGME7A",
"input": {
"subagent_type": "Explore",
"description": "Find DAU metric definitions",
"prompt": "Find all files related to \"daily active users\" or DAU metric definitions. Look for SQL queries, metric definitions, or analytics code that queries both Postgres and ClickHouse for active users. Search for keywords like \"daily_active_users\", \"dau\", \"active_users\", \"clickhouse\", \"postgres\" in analytics/metrics/dashboard related code. Be very thorough - check all naming conventions."
}
},
{
"id": "evt-4",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:08.421Z",
"toolUseId": "toolu_01Cb7PFNvdaTh4X5cPsGME7A",
"toolName": "Agent",
"isError": false,
"content": "Perfect! Now I have all the information. Let me compile the comprehensive report:\n\n## Summary: Daily Active Users (DAU) Metric Definition Files\n\nI've conducted a thorough search of the codebase and found all files related to \"daily active users\" (DAU) metric definitions. Here's the complete inventory:\n\n### Core Scenario Definition\n**File:** `/scenario/scenario.json`\n- Defines the scenario: \"Foo Bar Consistent Metrics Layer\" (ID: `foo-bar-consistent-metrics-layer`)\n- Description: \"Fix inconsistent metric definitions across ClickHouse and Postgres. The same metric (e.g. daily_active_users) is computed differently in each store, causing reporting mismatches.\"\n- Tier: tier-2\n- Task: Align metric definitions so `daily_active_users` and `revenue` are computed identically in both stores\n- Infrastructure: Postgres-16 and ClickHouse\n- Baseline metrics: queryLatencyMs: 600, storageBytes: 400000000, costPerQueryUsd: 0.012\n- Reference metrics: queryLatencyMs: 120, storageBytes: 350000000, costPerQueryUsd: 0.005\n\n### SQL Setup Files\n\n**PostgreSQL Setup:** `/scenario/init/postgres-setup.sql`\n- Creates `raw.events` table with columns: id, event_ts, user_id, event_type, value\n- Contains test data with dates 2026-01-15 and 2026-01-16\n- **Correct DAU definition:** `count(DISTINCT user_id)` per day\n\n**ClickHouse Setup:** `/scenario/init/clickhouse-setup.sql`\n- Creates `analytics.events` table with same structure\n- Creates `analytics.daily_metrics` table with columns: day (Date), dau (UInt64), revenue (Float64)\n- Uses SummingMergeTree engine\n- **Broken DAU definition:** Currently uses `count()` instead of `uniqExact(user_id)` (marked with comment: \"Broken: uses count() instead of uniqExact(user_id) for DAU\")\n- Inserts test data matching Postgres exactly\n\n### Test/Assertion Files\n\n**Functional Assertions:** `/scenario/assertions/functional.ts`\n- `daily_metrics_exists()` - Verifies analytics.daily_metrics table exists in ClickHouse\n- `daily_metrics_has_rows()` - Verifies daily_metrics contains rows\n\n**Correct/Accuracy Assertions:** `/scenario/assertions/correct.ts`\n- `dau_matches_postgres()` - Compares ClickHouse DAU values against Postgres\n - Postgres query: `SELECT date_trunc('day', event_ts)::date AS day, count(DISTINCT user_id) AS dau FROM raw.events GROUP BY 1 ORDER BY 1`\n - ClickHouse query: `SELECT day, dau FROM analytics.daily_metrics ORDER BY day`\n - Validates DAU values match between stores\n- `revenue_matches_postgres()` - Compares revenue sums between stores\n\n**Robust Assertions:** `/scenario/assertions/robust.ts`\n- `dau_is_distinct_users()` - Validates DAU represents distinct users (expects value of 2 for 2026-01-15)\n - Query: `SELECT day, dau FROM analytics.daily_metrics WHERE day = '2026-01-15'`\n\n**Performant Assertions:** `/scenario/assertions/performant.ts`\n- `daily_metrics_query_under_100ms()` - Performance check for daily_metrics query\n- `avoids_select_star_queries()` - Code quality check\n\n**Production Assertions:** `/scenario/assertions/production.ts`\n- `connection_env_vars_available()` - Validates POSTGRES_URL and CLICKHOUSE_URL env vars\n- `no_hardcoded_connection_strings()` - Security check\n- `has_readme_or_docs()` - Documentation check\n\n### Prompt Files\n\n**Baseline Prompt:** `/scenario/prompts/baseline.md`\n- Simple problem statement: \"Our dashboards show different numbers for 'daily active users' depending on whether we query Postgres or ClickHouse. The definitions must be inconsistent. Can you fix it so both stores return the same metric values?\"\n\n**Informed Prompt:** `/scenario/prompts/informed.md`\n- Detailed instructions identifying the issue\n- Specifies Postgres formula: `count(distinct user_id) per day`\n- Specifies current ClickHouse issue: \"uses count() or wrong logic\"\n- Requires creating `analytics.daily_metrics` with columns: day, dau (daily active users), revenue\n- Requests alignment of definitions across both databases\n\n### Supporting Infrastructure\n\n**Configuration:** `/scenario/supervisord.conf`\n- Defines postgres-16 and clickhouse services with logging and startup configuration\n\n**Shared Helpers:** `/_shared/assertion-helpers.ts`\n- Provides reusable assertion functions:\n - `scanWorkspaceForHardcodedConnections()` - Checks for hardcoded connection strings\n - `hasReadmeOrDocs()` - Validates documentation exists\n - `avoidsSelectStarQueries()` - Ensures no SELECT * queries in code\n\n### Evaluation Core\n\n**Metrics Module:** `/opt/dec-bench/eval-core/src/metrics.ts`\n- Defines improvement ratio functions for latency, cost, and storage\n- Implements task completion ratio calculation\n\n**Context Module:** `/opt/dec-bench/eval-core/src/context.ts`\n- Sets up AssertionContext with ClickHouse client and Postgres client\n- Handles environment variable configuration for both databases (POSTGRES_URL, CLICKHOUSE_URL)\n- Creates connection pools and clients for querying\n\nAll files work together to create a comprehensive benchmark scenario for fixing inconsistent metric definitions between Postgres and ClickHouse databases, specifically focused on the `daily_active_users` (DAU) metric and `revenue` aggregations."
},
{
"id": "evt-5",
"kind": "assistant_text",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:11.374Z",
"content": "\n\nLet me read the ClickHouse setup file to see the exact broken query."
},
{
"id": "evt-6",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:11.818Z",
"name": "Read",
"toolUseId": "toolu_01R8dEj5qBzgrzNfJ5Nj7Lsy",
"input": {
"file_path": "/scenario/init/clickhouse-setup.sql"
}
},
{
"id": "evt-7",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:11.838Z",
"name": "Read",
"toolUseId": "toolu_01SV1h85fRqSvBqZDGKdVL1N",
"input": {
"file_path": "/scenario/init/postgres-setup.sql"
}
},
{
"id": "evt-8",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:11.863Z",
"toolUseId": "toolu_01R8dEj5qBzgrzNfJ5Nj7Lsy",
"toolName": "Read",
"isError": false,
"content": "1\tCREATE DATABASE IF NOT EXISTS analytics;\n2\t\n3\tCREATE TABLE analytics.events (\n4\t event_ts DateTime,\n5\t user_id String,\n6\t event_type String,\n7\t value Float64\n8\t) ENGINE = MergeTree()\n9\tORDER BY (event_ts, user_id);\n10\t\n11\tINSERT INTO analytics.events (event_ts, user_id, event_type, value) VALUES\n12\t ('2026-01-15 10:00:00', 'u1', 'pageview', 0),\n13\t ('2026-01-15 11:00:00', 'u2', 'pageview', 0),\n14\t ('2026-01-15 12:00:00', 'u1', 'purchase', 29.99),\n15\t ('2026-01-16 09:00:00', 'u1', 'pageview', 0),\n16\t ('2026-01-16 10:00:00', 'u3', 'purchase', 49.99);\n17\t\n18\t-- Broken: uses count() instead of uniqExact(user_id) for DAU\n19\tCREATE TABLE analytics.daily_metrics (\n20\t day Date,\n21\t dau UInt64,\n22\t revenue Float64\n23\t) ENGINE = SummingMergeTree()\n24\tORDER BY day;\n25\t\n26\tINSERT INTO analytics.daily_metrics\n27\tSELECT\n28\t toDate(event_ts) AS day,\n29\t count() AS dau,\n30\t sum(value) AS revenue\n31\tFROM analytics.events\n32\tGROUP BY day;\n33\t"
},
{
"id": "evt-9",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:11.864Z",
"toolUseId": "toolu_01SV1h85fRqSvBqZDGKdVL1N",
"toolName": "Read",
"isError": false,
"content": "1\tCREATE SCHEMA IF NOT EXISTS raw;\n2\t\n3\tCREATE TABLE raw.events (\n4\t id SERIAL PRIMARY KEY,\n5\t event_ts TIMESTAMPTZ NOT NULL,\n6\t user_id TEXT NOT NULL,\n7\t event_type TEXT NOT NULL,\n8\t value NUMERIC(10,2) DEFAULT 0\n9\t);\n10\t\n11\tINSERT INTO raw.events (event_ts, user_id, event_type, value) VALUES\n12\t ('2026-01-15 10:00:00', 'u1', 'pageview', 0),\n13\t ('2026-01-15 11:00:00', 'u2', 'pageview', 0),\n14\t ('2026-01-15 12:00:00', 'u1', 'purchase', 29.99),\n15\t ('2026-01-16 09:00:00', 'u1', 'pageview', 0),\n16\t ('2026-01-16 10:00:00', 'u3', 'purchase', 49.99);\n17\t"
},
{
"id": "evt-10",
"kind": "thinking",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:18.061Z",
"content": "The issue is clear:\n\n- **Postgres** computes DAU as `count(DISTINCT user_id)` per day\n- **ClickHouse** computes DAU as `count()` per day (counting all events, not distinct users)\n\nFor 2026-01-15: Postgres DAU = 2 (u1, u2), ClickHouse DAU = 3 (3 events)\nFor 2026-01-16: Postgres DAU = 2 (u1, u3), ClickHouse DAU = 2 (2 events - happens to match)\n\n\nNow I need to fix the ClickHouse `daily_metrics` table by dropping and recreating it with `uniqExact(user_id)` to properly count distinct users instead of total events."
},
{
"id": "evt-11",
"kind": "assistant_text",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:18.861Z",
"content": "The problem is clear. In ClickHouse, DAU is computed as `count()` (total events) instead of `uniqExact(user_id)` (distinct users). For example, on 2026-01-15, Postgres correctly reports DAU=2 (u1, u2), but ClickHouse reports DAU=3 (3 event rows).\n\nLet me fix the ClickHouse `daily_metrics` table."
},
{
"id": "evt-12",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:19.348Z",
"name": "Bash",
"toolUseId": "toolu_01PTb9zphigezaawDAk965t2",
"input": {
"command": "clickhouse-client --query \"DROP TABLE IF EXISTS analytics.daily_metrics\"",
"description": "Drop broken daily_metrics table"
}
},
{
"id": "evt-13",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:19.416Z",
"toolUseId": "toolu_01PTb9zphigezaawDAk965t2",
"toolName": "Bash",
"isError": false,
"content": "(Bash completed with no output)"
},
{
"id": "evt-14",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:22.184Z",
"name": "Bash",
"toolUseId": "toolu_01WwRDjxecw8LmMbyMA7vAjf",
"input": {
"command": "clickhouse-client --query \"\nCREATE TABLE analytics.daily_metrics (\n day Date,\n dau UInt64,\n revenue Float64\n) ENGINE = SummingMergeTree()\nORDER BY day\n\"",
"description": "Recreate daily_metrics table"
}
},
{
"id": "evt-15",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:22.243Z",
"toolUseId": "toolu_01WwRDjxecw8LmMbyMA7vAjf",
"toolName": "Bash",
"isError": false,
"content": "(Bash completed with no output)"
},
{
"id": "evt-16",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:25.192Z",
"name": "Bash",
"toolUseId": "toolu_015bmtkMY7AA7btDoNKGtAQT",
"input": {
"command": "clickhouse-client --query \"\nINSERT INTO analytics.daily_metrics\nSELECT\n toDate(event_ts) AS day,\n uniqExact(user_id) AS dau,\n sum(value) AS revenue\nFROM analytics.events\nGROUP BY day\n\"",
"description": "Populate with correct DAU using uniqExact"
}
},
{
"id": "evt-17",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:25.273Z",
"toolUseId": "toolu_015bmtkMY7AA7btDoNKGtAQT",
"toolName": "Bash",
"isError": false,
"content": "(Bash completed with no output)"
},
{
"id": "evt-18",
"kind": "assistant_text",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:27.910Z",
"content": "Now let me verify both stores return the same values."
},
{
"id": "evt-19",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:28.811Z",
"name": "Bash",
"toolUseId": "toolu_018bw1B26kBLLHdzRKe14d3D",
"input": {
"command": "clickhouse-client --query \"SELECT day, dau, revenue FROM analytics.daily_metrics ORDER BY day\"",
"description": "Check ClickHouse DAU values"
}
},
{
"id": "evt-20",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:29.383Z",
"name": "Bash",
"toolUseId": "toolu_01DktCNZpzJuhMhsDoJD8jKp",
"input": {
"command": "psql \"$POSTGRES_URL\" -c \"SELECT date_trunc('day', event_ts)::date AS day, count(DISTINCT user_id) AS dau, sum(value) AS revenue FROM raw.events GROUP BY 1 ORDER BY 1\"",
"description": "Check Postgres DAU values"
}
},
{
"id": "evt-21",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:29.453Z",
"toolUseId": "toolu_018bw1B26kBLLHdzRKe14d3D",
"toolName": "Bash",
"isError": false,
"content": "2026-01-15\t2\t29.99\n2026-01-16\t2\t49.99"
},
{
"id": "evt-22",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:29.483Z",
"toolUseId": "toolu_01DktCNZpzJuhMhsDoJD8jKp",
"toolName": "Bash",
"isError": false,
"content": " day | dau | revenue \n------------+-----+---------\n 2026-01-15 | 2 | 29.99\n 2026-01-16 | 2 | 49.99\n(2 rows)"
},
{
"id": "evt-23",
"kind": "assistant_text",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:32.187Z",
"content": "Now let me also update the init SQL so the fix persists."
},
{
"id": "evt-24",
"kind": "tool_use",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:34.127Z",
"name": "Edit",
"toolUseId": "toolu_01QxnbxsZVhj4p8BLajuTzc5",
"input": {
"replace_all": false,
"file_path": "/scenario/init/clickhouse-setup.sql",
"old_string": "-- Broken: uses count() instead of uniqExact(user_id) for DAU\nCREATE TABLE analytics.daily_metrics (\n day Date,\n dau UInt64,\n revenue Float64\n) ENGINE = SummingMergeTree()\nORDER BY day;\n\nINSERT INTO analytics.daily_metrics\nSELECT\n toDate(event_ts) AS day,\n count() AS dau,\n sum(value) AS revenue\nFROM analytics.events\nGROUP BY day;",
"new_string": "CREATE TABLE analytics.daily_metrics (\n day Date,\n dau UInt64,\n revenue Float64\n) ENGINE = SummingMergeTree()\nORDER BY day;\n\nINSERT INTO analytics.daily_metrics\nSELECT\n toDate(event_ts) AS day,\n uniqExact(user_id) AS dau,\n sum(value) AS revenue\nFROM analytics.events\nGROUP BY day;"
}
},
{
"id": "evt-25",
"kind": "tool_result",
"role": "tool",
"timestamp": "2026-04-08T04:18:34.188Z",
"toolUseId": "toolu_01QxnbxsZVhj4p8BLajuTzc5",
"toolName": "Edit",
"isError": false,
"content": "The file /scenario/init/clickhouse-setup.sql has been updated successfully."
},
{
"id": "evt-26",
"kind": "assistant_text",
"role": "assistant",
"model": "claude-opus-4-6",
"timestamp": "2026-04-08T04:18:37.547Z",
"content": "Both stores now return identical metrics:\n\n| day | dau | revenue |\n|------------|-----|---------|\n| 2026-01-15 | 2 | 29.99 |\n| 2026-01-16 | 2 | 49.99 |\n\n**The fix:** Changed ClickHouse's DAU computation from `count()` (which counted all event rows) to `uniqExact(user_id)` (which counts distinct users per day), matching Postgres's `count(DISTINCT user_id)`."
}
]
}Debugging Output
6 files · 72KBHarness
classic-de
Agent
claude-code
Model
claude-opus-4-6
Version
v0.1.0
Persona
baseline
Plan Mode
no-plan
Prompt
Current
Our dashboards show different numbers for "daily active users" depending on whether we query Postgres or ClickHouse. The definitions must be inconsistent.
Can you fix it so both stores return the same metric values?
ID
foo-bar-consistent-metrics-layer
Domain
foo-bar
Tier
tier-2
Harness
classic-de
Postgres and ClickHouse both have events. Metric definitions differ: Postgres counts distinct user_id per day, ClickHouse uses a different formula. Fix the inconsistency.
Align metric definitions so daily_active_users and revenue are computed identically in both stores, or consolidate to a single source of truth.