# channel_phase_log

date: 2026-04-11
phase: suggested_dominant
evidence_json:
{"phase":"suggested_dominant","browsePct":6.2,"suggestedPct":80.2,"searchPct":0,"channelPct":4.9,"total_views":81}


# wisdom_canon

test_id: frequency_cannibalization
source_attribution: Common creator advice; cited across creator coaching channels.
default_thresholds_json: {"agrees_below": 0.7, "disagrees_above": 1.0, "min_pairs": 10}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: negative
belief_text:
Publishing video N consumes impressions that would otherwise have gone to video N−1, slowing N−1's trajectory.

calculation_doc:
For each video pair (N−1, N) where N−1 is still in days 1–7 of its
lifecycle when N publishes, compare N−1's view trajectory in the 3 days
after N's publish to N−1's trajectory in the 3 days before. Channel
median of (views_3d_after / views_3d_before) across eligible pairs.


test_id: day_1_3_testing_window
source_attribution: VidIQ and TubeBuddy guides; widely repeated in creator literature.
default_thresholds_json: {"agrees_above": 0.6, "disagrees_below": 0.3, "min_videos": 5}
category: first_24h
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: neutral
belief_text:
YouTube's algorithm tests a video primarily in its first 1–3 days, after which performance is largely set.

calculation_doc:
For each video with ≥14 days tracked, what fraction of total lifetime
views came from days 1–3? Channel median across qualifying videos.


test_id: first_24_48h_determines_fate
belief_text: A video's lifetime trajectory is largely determined by its first 24–48 hour performance.
source_attribution: Closely related to #2; cited as 'velocity matters'.
default_thresholds_json: {"agrees_r_above": 0.7, "disagrees_r_below": 0.3, "min_videos": 5}
category: first_24h
added_at: 2026-04-28
evidence_shape: correlation
agrees_directionality: neutral
calculation_doc:
Pearson correlation of day1_views vs total_views across all videos with
≥30 days tracked. Same correlation for day1_ctr vs lifetime_weighted_ctr.
Higher r = belief agrees on this channel.


test_id: subscribers_see_new_first
belief_text: Day-0 traffic is dominated by subscribed-state viewers.
source_attribution: Common assertion in creator coaching.
default_thresholds_json: {"agrees_above": 0.5, "disagrees_below": 0.2}
category: first_24h
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Per-video, what % of day-0 views came from subscribed-state viewers?
Channel median. Reads from summary_video_subscribed (owner-mode only).


test_id: end_screens_drive_5_15
belief_text: End-screen impressions and clicks contribute 5–15% of traffic.
source_attribution: YouTube official help docs (creator-side guidance).
default_thresholds_json: {"agrees_min": 0.05, "agrees_max": 0.15}
category: engagement
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
end_screen_views / total_views channel-wide. Reads from per-source breakdown.
Note: requires retention curve / cards data from Round 4 to test fully.


test_id: ctr_matters_more_than_retention
belief_text: High click-through-rate drives video success more than high retention.
source_attribution: MrBeast school of creator advice; widely contested.
default_thresholds_json: {"agrees_ratio_above": 1.5, "min_videos": 8}
category: engagement
added_at: 2026-04-28
evidence_shape: share-distribution
agrees_directionality: neutral
calculation_doc:
Per video, scale CTR and retention to channel-relative units (each
value's distance from the channel's median, divided by the channel's
typical spread). Fit a linear regression of total views against both.
If the magnitude of the CTR coefficient is at least 1.5× the retention
coefficient, the data agrees that CTR dominates on this channel.


test_id: retention_matters_more_than_ctr
belief_text: High retention drives video success more than high click-through-rate.
source_attribution: Sean Cannell / Think Media school; opposite of #7.
default_thresholds_json: {"agrees_ratio_above": 1.5, "min_videos": 8}
category: engagement
added_at: 2026-04-28
evidence_shape: share-distribution
agrees_directionality: neutral
calculation_doc:
Same regression as #7; agrees if |β_retention| > 1.5 × |β_ctr|. Note:
can be `inconclusive` simultaneously with #7 if neither dominates.


test_id: mid_length_videos_optimal
belief_text: Videos 8–10 minutes long perform best for ad revenue and watch time.
source_attribution: Creator-economy folklore; pre-2018 mid-roll-ad threshold.
default_thresholds_json: {"agrees_bucket": 600, "min_videos_per_bucket": 3}
category: length
added_at: 2026-04-28
evidence_shape: count-tier
agrees_directionality: neutral
calculation_doc:
Bucket videos by duration (60/180/360/600/1200/1800/3600+ sec). Median
weighted CTR, AVD, retention pct, sub conversion per bucket. Agrees if
600s bucket has the highest median weighted retention pct.


test_id: avp_50_keeps_pushing
belief_text: Videos with average view percentage above 50% receive sustained impression delivery.
source_attribution: TubeBuddy creator guides.
category: engagement
added_at: 2026-04-28
evidence_shape: count-tier
agrees_directionality: neutral
calculation_doc:
Per video, compare impression delivery rate in days 8–14 against days 1–7.
Bucket by retention tier (<30%, 30–50%, 50%+). Agrees if 50%+ bucket has
impression-rate ratio ≥0.7 AND lower-retention buckets ≤0.4.

default_thresholds_json:
{"agrees_high_retention_ratio_above": 0.7, "agrees_low_retention_ratio_below": 0.4, "min_videos_per_bucket": 3}


test_id: comments_outweigh_likes
belief_text: Comments are weighted more than likes by the algorithm.
source_attribution: Various creator coaching.
default_thresholds_json: {"agrees_ratio_above": 2.0, "min_videos": 8}
category: engagement
added_at: 2026-04-28
evidence_shape: correlation
agrees_directionality: neutral
calculation_doc:
For videos with comparable view counts, regress impression-rate-after-day-7
on (comments per view) and (likes per view) separately. Agrees if
|β_comments| > 2 × |β_likes|.


test_id: title_changes_reset_algo
belief_text: Renaming a video resets its testing cycle.
source_attribution: Common YouTube growth-channel advice.
default_thresholds_json: {"agrees_drop_below": 0.5, "agrees_recovery_above": 1.0, "min_changes": 1}
category: era_changes
added_at: 2026-04-28
evidence_shape: delta
agrees_directionality: negative
calculation_doc:
For videos with a title change, compare daily views/impressions/CTR for
the 7 days before vs 7 days after the change. Agrees if median ratio
drops below 0.5 then recovers above 1.0 within 14 days.


test_id: edits_hurt_performance
belief_text: Editing title or thumbnail post-publish kills momentum.
source_attribution: Conventional wisdom (the 'no-fiddle' rule).
default_thresholds_json: {"agrees_below": 0.5, "min_changes": 1}
category: era_changes
added_at: 2026-04-28
evidence_shape: delta
agrees_directionality: negative
calculation_doc:
Same as #12, but agrees if post-change views stay ≤50% of pre-change
baseline for 14+ days. Tests for sustained damage rather than reset+recovery.


test_id: posting_consistency_matters
belief_text: Channels that post on a consistent cadence outperform those that don't.
source_attribution: Universal creator-coaching advice.
default_thresholds_json: {"agrees_r_above": 0.3, "min_days": 90}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: neutral
calculation_doc:
Cadence regularity score = the typical day-to-day spread of
inter-publish gaps, divided by the mean gap (coefficient of
variation). Lower = more consistent. Correlate against
trailing-30-day view growth.


test_id: posting_too_rarely
belief_text: Long gaps between uploads cause the algorithm to deprioritize the channel.
source_attribution: Common creator coaching.
default_thresholds_json: {"agrees_below": 0.7, "min_gaps": 3}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: negative
calculation_doc:
For gaps of ≥5 days between publishes, compare the post-gap video's
day-1/day-3 performance against the channel's typical day-1/day-3.


test_id: day_30_evergreen
belief_text: Once 30 days post-publish, a video's daily view rate stabilizes and varies little.
source_attribution: Common analytics-tool framing.
default_thresholds_json: {"agrees_cov_below": 0.5, "min_videos": 3}
category: lifecycle
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: positive
calculation_doc:
For videos ≥60 days old, coefficient of variation of daily views in
days 30–60. Channel median. Agrees if median CoV ≤0.5.


test_id: first_video_predicts
belief_text: First video's day-30 performance correlates with month-3 channel trajectory.
source_attribution: TenfoldGrowth-style coaching.
default_thresholds_json: {"agrees_r_above": 0.5}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel only. Within-channel, capture first_video_day30_views and
compare to channel month-3 cumulative views. Across cohort, Pearson
correlation.


test_id: browse_from_subscribers
belief_text: Browse / Homepage impressions are weighted toward existing subscribers.
source_attribution: Common assertion; conflicts with documented YouTube guidance.
default_thresholds_json: {"agrees_above": 0.5}
category: sources
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Browse views / Browse impressions broken out by subscribed state. Agrees
if subscribed-state share of Browse views ≥50%.


test_id: search_equals_evergreen
belief_text: Videos with growing Search-source share over time become long-term assets.
source_attribution: SEO-creator advice.
default_thresholds_json: {"agrees_above": 0.3, "min_videos": 5}
category: sources
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: positive
calculation_doc:
Per video, slope of weekly Search-source view share over the video's
lifetime. Channel-level: share of mature videos with positive slope.


test_id: channel_page_loyal
belief_text: Channel-page-driven views come from highly engaged viewers.
source_attribution: Common assertion.
default_thresholds_json: {"min_views_per_source": 100}
category: sources
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: positive
calculation_doc:
Compare AVD, retention pct, sub conversion, comment rate of Channel Page
traffic vs Suggested traffic. Agrees if all four are higher for Channel Page.


test_id: external_most_loyal
belief_text: Viewers from external sites have the highest engagement rates.
source_attribution: Common assertion.
default_thresholds_json: {"min_external_views": 100}
category: sources
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: positive
calculation_doc:
AVD, retention, sub conversion of External vs all other sources. Agrees
if External AVD ≥ p75 of cross-source AVD distribution. Sample-size flag
triggers when External views < 100 channel-wide.


test_id: question_titles_higher_ctr
belief_text: Titles ending in ? outperform on click-through rate.
source_attribution: Title-optimization folklore.
default_thresholds_json: {"agrees_ratio_above": 1.2, "min_videos_per_bucket": 3}
category: titles
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Median weighted CTR for videos where title_is_question = 1 vs 0.
Owner-mode (titles are coarsened in public).


test_id: numbers_in_titles
belief_text: Titles with numbers (5 Ways… / 3 Things…) perform better.
source_attribution: Listicle-era folklore.
default_thresholds_json: {"agrees_ratio_above": 1.2, "min_videos_per_bucket": 3}
category: titles
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Median weighted CTR and median total views for title_has_number = 1 vs 0.
Agrees if both metrics ≥1.2× the non-numbered group.


test_id: hooks_in_first_15s
belief_text: The 0–15-second retention drop is the strongest single predictor of overall performance.
source_attribution: Hook-economy folklore.
default_thresholds_json: {"agrees_r_above": 0.7, "min_videos": 5}
category: engagement
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
From video retention curve, retention_15s_pct. Pearson correlation with
total views and weighted_ctr_post_day_3. Agrees if r ≥0.7. Requires
retention curve data (Round 4).


test_id: weekend_uploads_underperform
belief_text: Saturday and Sunday uploads get less engagement than weekday uploads.
source_attribution: Day-of-week folklore.
default_thresholds_json: {"min_weekend_videos": 3}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: count-tier
agrees_directionality: negative
calculation_doc:
Median weighted CTR, AVD, sub conversion for videos published on Sat/Sun
vs Mon–Fri. Agrees if all three are lower on weekend uploads. Inconclusive
with <10 weekend uploads.


test_id: optimal_publish_4pm
belief_text: Late-afternoon publishing optimizes day-0 reach.
source_attribution: Publishing-time folklore.
default_thresholds_json: {"min_hour_buckets_used": 3}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: count-tier
agrees_directionality: neutral
calculation_doc:
Median day-1 views by hour-of-publish. Identify mode. Agrees if mode
falls in 14:00–18:00 local time. Many channels lock to one hour, making
this inconclusive.


test_id: daily_upload_requires_backlog
belief_text: Channels publishing daily need pre-recorded inventory; those without it burn out.
source_attribution: Common creator advice.
default_thresholds_json: {}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel only. Cadence break frequency over time for channels
classified as `daily`. Cohort-level: agrees if daily-cadence channels
with ≥30-video pre-publish queue have lower break rates than ad-hoc.


test_id: thousand_subs_inflection
belief_text: Channels accelerate after 1,000 subscribers.
source_attribution: Monetization-threshold folklore.
default_thresholds_json: {"agrees_ratio_above": 1.5}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel only. Compare 30-day view growth rate before vs after
1,000-sub milestone. Agrees if median post-1k growth is ≥1.5× pre-1k.


test_id: first_100_subs_hardest
belief_text: Days to first 100 subscribers is the slowest sub-acquisition leg.
source_attribution: Beginner-creator coaching.
default_thresholds_json: {"agrees_ratio_above": 2.0, "min_total_subs": 100}
category: subscribers
added_at: 2026-04-28
evidence_shape: count-tier
agrees_directionality: neutral
calculation_doc:
Days from 1 sub to 100 subs vs days from 100 to 200, 200 to 300, etc.
Channel-relative growth rates per sub-bucket. Agrees if days-per-sub
in 0–100 is ≥2× days-per-sub in 100–500.


test_id: niche_grows_faster
belief_text: Channels with narrow topical focus outgrow broad-topic channels.
source_attribution: Niche-down folklore.
default_thresholds_json: {"agrees_r_below": -0.3}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel — needs topic similarity scoring (owner-mode titles) plus
growth rate. Score channels by topical entropy of titles. Correlate
with 30-day growth.


test_id: sub_view_ratio_quality
belief_text: Channels with more subs per view have more engaged audiences.
source_attribution: Engagement-quality folklore.
default_thresholds_json: {"agrees_r_above": 0.3}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel: Pearson correlation between (current_subscribers / total_views)
and (sub conversion rate, comment rate, AVD). Agrees if all three ≥0.3.


test_id: algo_dependence_drops
belief_text: Older channels become less dependent on algorithmic recommendations.
source_attribution: Maturation-creator folklore.
default_thresholds_json: {"agrees_r_below": -0.4}
category: cohort
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
algorithmic_dependency_index (1 − sticky_traffic_ratio) vs channel age.
Cross-channel cohort-level negative correlation at r ≤−0.4.


test_id: channel_page_share_decreases
belief_text: As library grows, Channel Page share of views falls.
source_attribution: Library-growth folklore.
default_thresholds_json: {"agrees_r_below": -0.5, "min_days": 60}
category: sources
added_at: 2026-04-28
evidence_shape: delta
agrees_directionality: neutral
calculation_doc:
Per channel, Pearson correlation between days_since_first_video and
trailing-7d Channel Page view share. Agrees if r ≤−0.5.


test_id: comment_rate_truest_signal
belief_text: Comments-per-view tracks audience resonance better than likes-per-view.
source_attribution: Engagement-depth folklore.
default_thresholds_json: {"min_videos": 5}
category: engagement
added_at: 2026-04-28
evidence_shape: correlation
agrees_directionality: neutral
calculation_doc:
For each engagement metric, Pearson correlation with sub conversion rate
at the video level. Agrees if comments/v has the highest correlation.


test_id: watch_session_length_matters
belief_text: YouTube ranks by session length, not per-video metrics.
source_attribution: Session-watch folklore (post-2018 algorithm framing).
default_thresholds_json: {}
category: engagement
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Cross-channel; requires session inference. Approximation: total channel
watch minutes per active viewer per day. Marked low_confidence due to
proxy nature.


test_id: end_screen_ctr_correlates_quality
belief_text: Videos with high end-screen click-through have higher overall retention.
source_attribution: End-screen optimization folklore.
default_thresholds_json: {"agrees_r_above": 0.4, "min_videos": 5}
category: engagement
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Per video, end-screen view share of total views vs lifetime weighted
retention. Agrees if r ≥0.4. Requires Round 4 cards/end-screen data.


test_id: ctr_retention_together
belief_text: Neither click-rate nor retention alone matters; the product (or geometric mean) does.
source_attribution: Combined-quality folklore.
default_thresholds_json: {"min_videos": 8}
category: engagement
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
Define combined = sqrt(ctr_z × retention_z) per video. Regress total
views on combined vs on CTR and retention separately. Agrees if combined-
only regression has higher R² than either-alone.


test_id: algorithm_tests_then_scales
belief_text: Distribution happens in two phases — test (low impressions, narrow audience) then scale.
source_attribution: Two-phase-algorithm folklore.
default_thresholds_json: {"agrees_above": 0.5, "min_slope_change_x": 3.0, "min_videos": 5}
category: first_24h
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: neutral
calculation_doc:
Per video, fit a piecewise function to the impression-by-day curve.
Identify the 'elbow' where slope changes most. Agrees if ≥50% of
mature videos show a detectable elbow within days 3–14.


test_id: browse_more_durable_suggested
belief_text: Browse pickups are more durable than Suggested-driven impressions.
source_attribution: Pickup-pattern folklore.
default_thresholds_json: {"agrees_ratio_above": 1.5}
category: sources
added_at: 2026-04-28
evidence_shape: not-applicable
agrees_directionality: neutral
calculation_doc:
For videos with Browse-source rank-1 day, compare Browse impression
decay rate to Suggested decay rate over the next 14 days. Cross-channel
cohort baseline ideal. Agrees if Browse decay half-life > 1.5× Suggested.


test_id: ratios_stabilize_30_videos
belief_text: Once a channel has 30+ videos, key ratios (CTR, AVD, sub conversion) settle.
source_attribution: Maturation folklore.
default_thresholds_json: {"agrees_cov_drop": 0.3, "min_videos": 30}
category: cohort
added_at: 2026-04-28
evidence_shape: single-ratio
agrees_directionality: positive
calculation_doc:
Coefficient of variation of weekly weighted CTR and AVD across the
channel's history. Compare CoV in weeks 1–10 vs weeks 11+. Agrees if
both CoVs drop by ≥30% after the 30-video mark.


test_id: new_uploads_steal_impressions
belief_text: A new publish steals impression budget from the rest of the catalog.
source_attribution: Catalog-cannibalization folklore.
default_thresholds_json: {"agrees_drop_above": 0.15, "min_publishes": 5}
category: publish_cadence
added_at: 2026-04-28
evidence_shape: delta
agrees_directionality: negative
calculation_doc:
When video N publishes, change in non-N videos' impression share over
the next 3 days. Agrees if median impression-share-of-others drops
≥15% in the post-publish window.


# wisdom_test

test_id: frequency_cannibalization
snapshot_date: 2026-04-28
status: agrees
confidence: medium
evidence_json:
{"median_cannibalization_index":0.5,"eligible_pairs":19,"threshold_agrees_below":0.7,"threshold_disagrees_above":1}


test_id: subscribers_see_new_first
snapshot_date: 2026-04-28
status: not_currently_testable
confidence: low
evidence_json:
{"missing_data":"owner-mode-only data (subscribed-state, search queries, etc.)","unblock_action":"the channel owner connects private analytics"}


test_id: ctr_matters_more_than_retention
snapshot_date: 2026-04-28
status: disagrees
confidence: high
evidence_json:
{"beta_ctr":-0.023,"beta_retention":-0.212,"ratio_ctr_over_retention":0.107,"eligible_videos":19,"threshold_agrees_ratio_above":1.5}


test_id: retention_matters_more_than_ctr
snapshot_date: 2026-04-28
status: agrees
confidence: high
evidence_json:
{"beta_ctr":-0.023,"beta_retention":-0.212,"ratio_retention_over_ctr":9.317,"eligible_videos":19,"threshold_agrees_ratio_above":1.5}


test_id: mid_length_videos_optimal
snapshot_date: 2026-04-28
status: disagrees
confidence: high
evidence_json:
{"threshold_agrees_bucket":600,"min_per_bucket":3,"60s_count":0,"60s_median_retention_pct":null,"180s_count":0,"180s_median_retention_pct":null,"360s_count":1,"360s_median_retention_pct":null,"600s_count":6,"600s_median_retention_pct":18.4,"1200s_count":10,"1200s_median_retention_pct":29.2,"1800s_count":1,"1800s_median_retention_pct":null,"3600s+_count":1,"3600s+_median_retention_pct":null,"best_bucket_seconds":1200,"best_bucket_median_retention_pct":29.2}


test_id: avp_50_keeps_pushing
snapshot_date: 2026-04-28
status: inconclusive
inconclusive_reason: thin_sample
confidence: low
evidence_json:
{"low_count":0,"mid_count":0,"high_count":17,"low_median":null,"mid_median":null,"high_median":0.07,"threshold_high_above":0.7,"threshold_low_below":0.4}


test_id: longer_videos_more_watch_time
snapshot_date: 2026-04-28
status: inconclusive
inconclusive_reason: near_threshold
confidence: high
evidence_json:
{"r_duration_vs_watch_per_view":0.296,"eligible_videos":19,"threshold_agrees_above":0.5,"threshold_disagrees_below":-0.1}


test_id: shorter_videos_more_views
snapshot_date: 2026-04-28
status: inconclusive
inconclusive_reason: near_threshold
confidence: high
evidence_json:
{"r_duration_vs_total_views":0.153,"eligible_videos":19,"threshold_agrees_below":-0.3,"threshold_disagrees_above":0.3}


test_id: weekend_uploads_underperform
snapshot_date: 2026-04-28
status: inconclusive
inconclusive_reason: near_threshold
confidence: high
evidence_json:
{"weekend_count":6,"weekday_count":15,"weekend_median_ctr":0.022,"weekday_median_ctr":0.013,"weekend_median_avd_sec":75.5,"weekday_median_avd_sec":177.3,"weekend_subs_per_1k":0,"weekday_subs_per_1k":0}


test_id: hour_1_velocity_predicts
snapshot_date: 2026-04-28
status: not_currently_testable
confidence: low
evidence_json:
{"missing_data":"YouTube Reporting API does not expose hourly granularity.","unblock_action":"Future round"}


test_id: comment_rate_truest_signal
snapshot_date: 2026-04-28
status: inconclusive
inconclusive_reason: near_threshold
confidence: high
evidence_json:
{"r_likes_vs_subs":0.05,"r_comments_vs_subs":0.072,"r_shares_vs_subs":0.155,"leader_metric":"shares","leader_abs_r":0.155,"threshold_agrees_above":0.3}


test_id: end_screen_ctr_correlates_quality
snapshot_date: 2026-04-28
status: not_currently_testable
confidence: low
evidence_json:
{"missing_data":"Awaiting Round 4 cards/end-screen data ingestion.","unblock_action":"Future round"}


test_id: ctr_retention_together
snapshot_date: 2026-04-28
status: not_currently_testable
confidence: low
evidence_json:
{"missing_data":"Awaiting Round 4 retention-curve-derived precision.","unblock_action":"Future round"}


test_id: sub_growth_breakouts
snapshot_date: 2026-04-28
status: agrees
confidence: high
evidence_json:
{"gini_subs_gained":0.889,"total_subs_gained":6,"eligible_videos":21,"threshold_agrees_above":0.7,"threshold_disagrees_below":0.3}


test_id: new_uploads_steal_impressions
snapshot_date: 2026-04-28
status: agrees
confidence: high
evidence_json:
{"median_after_over_before_ratio":0.619,"median_drop_fraction":0.381,"eligible_publishes":20,"threshold_drop_above":0.15}


# metric_metadata

metric_id: temperature_score
source_tables: summary_channel_daily.temperature_score
confidence_method: NULL when fewer than 35 baseline days exist.
last_modified: 2026-04-30T14:13:11.039Z
definition:
A 0–100 weighted blend of trailing channel performance vs the channel's prior-90-day baseline; 50 reads as the channel's own normal.

computation_doc:
Per-day weighted blend of trailing CTR, AVD, sub-rate, source diversity, and library-activity z-scores against the prior 90-day baseline. Below 35 days of baseline the column stays NULL. 50 reads as "your normal", 60 as a warmer week than typical for this channel, 40 as a cooler week than typical. Both extremes are legitimate — the value is observation, not verdict.


metric_id: country_diversity_score
definition: Simpson diversity index of the channel's top-country shares per date.
source_tables: summary_channel_daily.country_diversity_score
confidence_method: NULL when fewer than 35 baseline days exist.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Simpson form 1 - sum(share^2) over the per-date top-country shares from summary_channel_country_daily. 0 reads as "all views from one country"; 1 reads as "spread evenly across all countries". Computed daily; NULL on dates with fewer than 35 days of baseline.


metric_id: algorithmic_dependency_index
source_tables: summary_channel.algorithmic_dependency_index, summary_channel_daily.algorithmic_dependency_index
confidence_method: NULL when no traffic rows exist for the channel.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Channel-wide share of views from algorithmic discovery sources (Browse, Suggested, Search) versus sticky sources (Direct, Channel Page, Playlist, End Screen, link-clicks, subscriber notifications).

computation_doc:
1.0 minus the channel-wide sticky-traffic ratio. Sticky sources are those where the viewer chose to come back: Direct, Channel Page, Playlist, End Screen, link-clicks from off-platform, subscriber notification. Algorithmic sources are everything else (Browse, Suggested, Search, advertising, hashtags, shorts feed). 1.0 = every view came from algorithmic discovery; 0.0 = every view came from a sticky source.


metric_id: sticky_traffic_ratio
definition: Per-video share of total views from sticky (non-algorithmic) traffic sources.
source_tables: summary_video.sticky_traffic_ratio
confidence_method: NULL when no traffic rows exist for the video.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
SUM(traffic.views WHERE is_sticky=1) / total_views, on a per-video basis. NULL when the video has no traffic rows. Both extremes are legitimate channel patterns; the value is observation, not verdict.


metric_id: audience_persistence_pct
definition: Share of last week's (source, country) audience buckets that also appeared the prior week.
source_tables: summary_channel_daily.audience_persistence_pct
confidence_method: NULL on dates that are not ISO week-ending.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Computed as a weekly comparison: |intersection of last-week and prior-week (source, country) buckets| / |last-week buckets|. Written only on ISO week-ending dates; NULL on every other date. High persistence reads as "the same audience returned"; low persistence reads as "a different audience showed up."


metric_id: audience_replacement_rate
definition: Share of last week's (source, country) audience buckets that did NOT appear the prior week.
source_tables: summary_channel_daily.audience_replacement_rate
confidence_method: NULL on dates that are not ISO week-ending.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Complement of audience_persistence_pct over the same weekly window. High replacement reads as "fresh discovery"; low replacement reads as "the same audience returned." Both states are legitimate channel patterns at different ages.


metric_id: anomaly_score_composite
definition: Sum of absolute z-scores across tracked daily metrics; one row per date.
source_tables: summary_channel_daily.anomaly_score_composite, metric_zscore_daily
confidence_method: NULL until each input metric clears its 28-day baseline floor.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
SUM(ABS(zscore)) per date across the five tracked metrics in metric_zscore_daily (daily_views, weighted_ctr, weighted_avd, sub_gain_rate, total_impressions). Each input z-score is computed against a prior 28-day baseline; baseline window must hold at least 28 non-null values or the input z-score stays NULL. The composite is observation-only — not a "risk score" or "danger meter."


metric_id: engagement_rate_composite
definition: Weighted engagement events per total view, with comments and shares weighted higher than likes.
source_tables: summary_video.engagement_rate_composite, engagement_weights
confidence_method: NULL when total_views = 0.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
(likes × likes_weight + comments × comments_weight + shares × shares_weight) / total_views. Default weights: likes=1, comments=5, shares=3 (per the engagement_weights table). NULL when total_views = 0.


metric_id: engagement_velocity_24h
definition: Total engagement events (likes + comments + shares) in the first 24 hours after publish.
source_tables: summary_video.engagement_velocity_24h
confidence_method: NULL until the publish day has been reported.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
SUM(likes + comments + shares) from video_daily rows where the date matches the publish day. Since YouTube reporting rolls up to UTC days, "first 24 hours" approximates to "the publish day" — a video published at 22:00 UTC will show only the 2 hours before midnight here.


metric_id: engagement_velocity_7d
definition: Total engagement events (likes + comments + shares) in the first 7 days after publish.
source_tables: summary_video.engagement_velocity_7d
confidence_method: NULL until day 6 has been reported.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
SUM(likes + comments + shares) from video_daily rows in days 0-6 after publish (inclusive of publish day). NULL until day 6 has been reported.


metric_id: gini_views
definition: Library-wide Gini coefficient across video view totals; 0 = even, 1 = concentrated on one video.
source_tables: summary_channel.gini_views, summary_channel_daily.gini_views_28d
confidence_method: NULL when fewer than two videos hold positive views.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Standard Gini coefficient computed across summary_video.total_views for public videos. NULL when fewer than two videos hold a positive value (the formula is undefined). 0 reads as "views spread evenly across the catalog"; 1 reads as "one video carries everything." A higher Gini is common for channels with one or two breakout videos and is observation, not verdict.


metric_id: gini_subs
source_tables: summary_channel.gini_subs
confidence_method: NULL when fewer than two videos hold positive subs.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Library-wide Gini coefficient across video subscriber-gain totals; 0 = even, 1 = concentrated on one video.

computation_doc:
Standard Gini coefficient computed across summary_video.total_subs_gained for public videos. Same shape as gini_views but for subs gained. NULL when fewer than two videos hold a positive value.


metric_id: library_half_life_days
definition: Smallest top-N video count whose total views sum to at least half of channel total views.
source_tables: summary_channel.library_half_life_days
confidence_method: NULL when no public video has positive views.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Lorenz half-mass count: sort summary_video desc by total_views, walk the cumulative sum, return the count at which the running total first reaches >= 50% of channel total. The column name carries a _days suffix from the EVOLUTION §12.6.1 spec but the value is a video count (kept verbatim for spec-fidelity).


metric_id: avd_confidence
source_tables: summary_video.avd_confidence, summary_traffic.avd_confidence, video_daily.avd_confidence
confidence_method: This column IS the confidence tier; UI surfaces the noise tier with strikethrough rendering.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Sample-size confidence tier for the row's average view duration; one of noise / low / medium / high.

computation_doc:
Derived from the row's view sample size — the denominator AVD averages over. Noise tier when views < 10 (one or two viewers' watch time, statistically meaningless); low when views < 30; medium when views < 100; high otherwise. Mirrors the V10 ctr_confidence pattern but keyed on views instead of impressions.


metric_id: ctr_confidence
definition: Sample-size confidence tier for the row's click-through rate; one of noise / low / medium / high.
source_tables: summary_video.ctr_confidence, traffic_daily.ctr_confidence, video_daily.ctr_confidence
confidence_method: This column IS the confidence tier; UI surfaces the noise tier with strikethrough rendering.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Derived from the row's impressions sample size. Noise tier when impressions < 50; low when < 250; medium when < 1000; high otherwise. The thresholds are calibrated so that a noise-tier CTR is statistically meaningless (one or two clicks against a tiny denominator).


metric_id: ctr_quadrant
confidence_method: noise quadrant is the inclusion-failure bucket.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Per-video position relative to the channel's CTR and retention medians; one of winner / clicked-not-watched / watched-not-clicked / quiet / noise.

source_tables:
summary_video.ctr_quadrant, summary_channel.median_video_ctr, summary_channel.median_video_retention

computation_doc:
Compares the video's weighted_ctr and avg_retention_pct to the channel-internal medians. Winner = above median on both axes; quiet = below median on both. The noise bucket short-circuits inclusion when ctr_confidence = noise OR total_views < 30 (sample too thin to read either axis honestly).


metric_id: unattributed_channel_views
definition: Per-date drift between the channel-level views snapshot and the sum of per-video views.
source_tables: summary_channel_daily.unattributed_channel_views
confidence_method: Reconciliation chart shows a sparse fallback below 14 days of history.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
MAX(0, channel_daily.total_views - SUM(video_daily.views WHERE pre_publish_stub = 0)) per date. Reads >0 when the channel-snapshot total exceeds the sum of attributed per-video reporting (e.g. deleted videos, late attribution). Floored at zero so reporting overcounts (per-video sum exceeds channel snapshot — also possible during transient lag) don't render as negative drift.


metric_id: country_hhi
definition: Sum-of-squared-shares across the video's per-country views, scaled by 10000.
source_tables: summary_video.country_hhi
confidence_method: NULL when no country-attributed views exist.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Standard Herfindahl-Hirschman index over the coarsened summary_video_country rows for the video. NULL when the video has zero country-attributed views. Mirrors source_hhi shape; pairs the country dimension with traffic-source concentration on two independent axes.


metric_id: dominant_country_share
definition: Per-video share (0..1) of total views from the top-by-share country.
source_tables: summary_video.dominant_country_share, summary_video.dominant_country_code
confidence_method: NULL when no country-attributed views exist.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
The single highest country's share of the video's total views, with the country code in the sibling dominant_country_code column. Computed on the coarsened summary_video_country distribution (countries below 5% per-video share are bucketed into "OT" / Other).


metric_id: country_audience_match_score
source_tables: summary_video.country_audience_match_score
confidence_method: NULL when no well-retaining channel distribution can be built.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Cosine similarity between this video's country distribution and the channel-wide well-retaining country distribution.

computation_doc:
The channel-wide well-retaining distribution is built by weighting each country by views from videos that retain at or above the channel median. The score is the cosine similarity (0..1) between this video's country shares and that distribution. 1.0 = the video's audience mirrors the channel's well-retaining countries exactly; 0.0 = no overlap.


metric_id: country_concentration_with_weak_retention
source_tables: summary_video.country_concentration_with_weak_retention
confidence_method: NULL when avg_avd_sec is unavailable.
last_modified: 2026-04-30T14:13:11.039Z
definition:
1 when one country holds >= 40% of a video's views AND that country watches >= 30% shorter than the video overall.

computation_doc:
Boolean flag (0/1, NULL when avg_avd_sec is unavailable). Catches the pattern where a single country dominates the audience but retains less than the video as a whole — observation, not verdict. Both extremes (concentration with strong retention, dispersion with weak retention) are legitimate channel patterns.


metric_id: lifecycle_stage
source_tables: summary_video.lifecycle_stage, video_stage_daily.stage
confidence_method: pre_publish stage means the video has no reported days yet.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Most recent lifecycle stage classification for the video; one of pre_publish / debut / growth / peak / tail / quiet / re_emerged / zombie / dormant.

computation_doc:
Classified by a deterministic JS pass over video_daily anchored on summary_video.peak_views_day. Reads from video_stage_daily for the latest date the video has reporting for. The stages partition a video's lifetime into recognizable shapes.


metric_id: tail_half_life_days
definition: Days from peak views day to the day rolling views fell to half of peak.
source_tables: summary_video.tail_half_life_days
confidence_method: NULL until the video has decayed to half-peak.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
From the video's peak_views_day, walks forward until the trailing-7-day rolling views falls to <= 50% of peak_views_value. The day count is written here. NULL when the video hasn't yet decayed to half-peak (or hasn't peaked at all).


metric_id: source_hhi
definition: Sum-of-squared-shares across the video's per-source views, scaled by 10000.
source_tables: summary_video.source_hhi
confidence_method: NULL when no traffic rows exist.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Standard Herfindahl-Hirschman index over the per-(video, source) shares from summary_traffic. NULL when no traffic rows exist. Pairs with country_hhi to characterize concentration on two independent axes.


metric_id: imp_to_view_ratio
definition: Total impressions per view; ratio of how many shown thumbnails it took to earn one view.
source_tables: summary_video.imp_to_view_ratio, summary_channel.imp_to_view_ratio_median
confidence_method: NULL when total_views = 0.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
total_impressions / total_views. NULL when total_views = 0. The channel-wide median is on summary_channel.imp_to_view_ratio_median for the per-video comparison.


metric_id: avd_drift_sec
source_tables: summary_video.avd_drift_sec
confidence_method: NULL when either window lacks reported days.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Delta between the video's last-7-days average view duration and its first-3-days average view duration, in seconds.

computation_doc:
last_7d_avd_sec - first_3d_avd_sec. Positive = the audience is watching longer than early viewers did; negative = retention has fallen since publish. NULL when either window can't be measured.


metric_id: late_growth_pct
definition: Share of total views accumulated after day 30 from publish.
source_tables: summary_video.late_growth_pct
confidence_method: NULL when video is younger than 30 days.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
SUM(video_daily.views WHERE day_offset >= 30) / total_views. NULL when total_views = 0 or the video is younger than 30 days. High late-growth reads as "evergreen"; low late-growth reads as "all the views came in the first month." Both are legitimate.


metric_id: pre_publish_stub
source_tables: video_daily.pre_publish_stub, traffic_daily.pre_publish_stub
confidence_method: This column IS the data-quality flag.
last_modified: 2026-04-30T14:13:11.039Z
definition:
Flag (0/1) on every per-video reporting row indicating whether the row sits before the video's published_at.

computation_doc:
Set to 1 when the row's date is earlier than SUBSTR(published_at, 1, 10). Every summary_* CTE that aggregates over per-video reporting must include WHERE pre_publish_stub = 0 so the seven-row stub artifact (NULL impressions, 0 views) doesn't poison aggregations. The flag itself stays in the DB for downstream provenance.


metric_id: temperature_score_baseline
definition: Reference value for the channel temperature; always 50.
source_tables: summary_channel_daily.temperature_score
confidence_method: Always 50; not data-driven.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
Temperature is calibrated so 50 reads as "your normal" — the prior-90-day baseline midpoint. Drift in either direction is informational, not a verdict. Use 50 as the visual reference line on temperature surfaces, not zero.


metric_id: reporting_timezone
definition: The timezone YouTube reporting uses for per-day rollups.
source_tables: data_status.notes (metric_type = 'reporting_timezone')
confidence_method: Stable per YouTube's API contract.
last_modified: 2026-04-30T14:13:11.039Z
computation_doc:
All dates in the public DB are calendar days in YouTube's reporting timezone (America/Los_Angeles, PT), not the visitor's local timezone. A "day" here is a calendar day in PT — a video published at 22:00 PT on Apr 27 will accumulate that day's reporting under the date 2026-04-27, even for viewers in UTC+12.


