ADR 021 — Gold Exploration Layer (exp_)¶
Date: 2026-04-28 Status: Accepted Deciders: Data Engineering
Context¶
The WBP Gold layer contains two categories of views:
- Stable production reports — backed by Tableau dashboards, subject to SLA, column contracts are public (e.g.,
rpt_wbp_email_daily,rpt_wbp_agent_performance_channel_daily) - Pilot / exploratory analysis — views built to support AI pilot tracking, ad-hoc investigation, or evolving logic; not yet adopted by a permanent Tableau dashboard and may change or be dropped without notice
The second category had been named with the rpt_ prefix, which implied the same stability contract as stable production reports. This caused confusion: consumers assumed rpt_wbp_ai_agent_qa_week_over_week was governed by the same SLA as rpt_wbp_email_daily, but it was not.
Decision¶
Introduce a new exp_ prefix for Gold exploration views. These views:
- Are materialized as
view(zero storage — identical torpt_) - Live in the same
GOLDschema asrpt_— no new Snowflake schema required - Use
tags: ['exp']instead of['report']in theirconfig()block - Follow the naming pattern
exp_{client}_{purpose}— e.g.,exp_wbp_ai_agent_qa_wow - Carry no SLA — may be modified, broken, or deleted without a migration or deprecation notice
- Are suitable for: pilot tracking, ad-hoc team-level analysis, research views, evolving logic
Rules for exp_ Models¶
| Rule | Detail |
|---|---|
| Materialization | Always view |
| Schema | GOLD (same as rpt_) |
| Tags | ['warbyparker', 'gold', 'exp'] (replace 'report' with 'exp') |
| Source | Same layering rules as rpt_: from agg_ for metric aggregation, from fct_ only for event-level record analysis |
| SLA | None — exploratory views may change or be dropped at any time |
| Schema.yml | Required entry (same as rpt_) — documents grain and columns |
| dbt-model-registry | Status: 🔬 Exploration |
Promotion path¶
When an exp_ view stabilizes — logic is settled, a Tableau dashboard has adopted it, and the team commits to maintaining it — rename it to rpt_. The rename is a one-liner (git mv) plus a schema.yml name update.
Deprecation¶
Drop without ceremony: no deprecation notice required. If a Snowflake view was created by a prior rpt_ name, the old view persists in Snowflake after the dbt rename (dbt does not clean up renamed views). Old RPT_WBP_* views must be dropped manually via Snowflake after the new EXP_WBP_* views are verified.
First Application¶
16 WBP views renamed from rpt_ → exp_ on 2026-04-28 as part of issue #944:
| Old name | New name |
|---|---|
rpt_wbp_agent_qa_trend |
exp_wbp_agent_qa_trend |
rpt_wbp_ai_agent_concurrency_daily |
exp_wbp_ai_agent_concurrency_daily |
rpt_wbp_ai_agent_qa_week_over_week |
exp_wbp_ai_agent_qa_week_over_week |
rpt_wbp_ai_agent_qa_month_over_month |
exp_wbp_ai_agent_qa_month_over_month |
rpt_wbp_ai_agents_durations_daily |
exp_wbp_ai_agents_durations_daily |
rpt_wbp_ai_qa_attributes_week_over_week |
exp_wbp_ai_qa_attributes_week_over_week |
rpt_wbp_ai_qa_attributes_month_over_month |
exp_wbp_ai_qa_attributes_month_over_month |
rpt_wbp_ai_vs_nonai_qa_wow |
exp_wbp_ai_vs_nonai_qa_wow |
rpt_wbp_ai_vs_nonai_qa_mom |
exp_wbp_ai_vs_nonai_qa_mom |
rpt_wbp_ai_vs_nonai_qa_qoq |
exp_wbp_ai_vs_nonai_qa_qoq |
rpt_wbp_ai_wave_qa_week_over_week |
exp_wbp_ai_wave_qa_week_over_week |
rpt_wbp_ai_wave_qa_month_over_month |
exp_wbp_ai_wave_qa_month_over_month |
rpt_wbp_ai_wave_qa_quarter_over_quarter |
exp_wbp_ai_wave_qa_quarter_over_quarter |
rpt_wbp_gladly_blended_ai_productivity |
exp_wbp_gladly_blended_ai_productivity |
rpt_wbp_gladly_blended_ai_productivity_weekly |
exp_wbp_gladly_blended_ai_productivity_weekly |
rpt_wbp_gladly_blended_ai_productivity_channel_daily |
exp_wbp_gladly_blended_ai_productivity_channel_daily |
These were all tied to the WBP blended AI email/SMS pilot — pilot tracking views, QA analysis views, and agent productivity exploration views with no formal Tableau adoption.
Consequences¶
- Naming is unambiguous:
rpt_= stable production.exp_= exploration / no SLA. - Zero cost: Both layers use
viewmaterialization — no additional Snowflake storage or compute. - Easy promotion: A stabilized
exp_view graduates torpt_with a file rename. - Old Snowflake views persist:
RPT_WBP_*views inWBP_DB.GOLDmust be dropped manually post-deployment.
Options Considered¶
| Option | Decision |
|---|---|
Keep all as rpt_ with docs marking some as "pilot" |
Rejected — naming still implies stability |
Use a separate EXP Snowflake schema |
Rejected — adds schema management overhead; the prefix is sufficient signal |
Use adhoc_ prefix |
Rejected — ad-hoc implies one-time; these views are recurring and actively maintained |