1- # Per-library metadata for pygal implementation of line-retention-cohort
2- # Auto-generated by impl-generate.yml
3-
41library : pygal
52specification_id : line-retention-cohort
63created : ' 2026-03-16T20:43:49Z'
7- updated : ' 2026-03-16T20:43:49Z '
4+ updated : ' 2026-03-16T20:48:08Z '
85generated_by : claude-opus-4-5-20251101
96workflow_run : 23164943848
107issue : 4572
@@ -13,7 +10,210 @@ library_version: 3.1.0
1310preview_url : https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/pygal/plot.png
1411preview_thumb : https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/pygal/plot_thumb.png
1512preview_html : https://storage.googleapis.com/pyplots-images/plots/line-retention-cohort/pygal/plot.html
16- quality_score : null
13+ quality_score : 80
1714review :
18- strengths : []
19- weaknesses : []
15+ strengths :
16+ - Excellent data quality with realistic retention scenario and improving cohort
17+ trend
18+ - Perfect code quality — clean KISS structure with seed for reproducibility
19+ - Correct title format and legend labels with cohort sizes
20+ - Custom color palette with good accessibility
21+ weaknesses :
22+ - No visual differentiation between older and newer cohorts (opacity/line thickness)
23+ as suggested by spec
24+ - No reference/threshold line to provide benchmark context
25+ - Lines converge in later weeks without visual emphasis to guide the viewer
26+ - Lower chart area (0-20%) is mostly wasted space
27+ image_description : The plot displays a line chart with 5 cohort curves (Jan–May
28+ 2025) on a white background. Each line starts at 100% retention at week 0 and
29+ decays over 12 weeks. Colors used are steel blue (Jan), coral/salmon (Feb), muted
30+ green (Mar), gold/amber (Apr), and muted purple (May). The Y-axis is labeled "Retained
31+ Users (%)" ranging 0–100 with horizontal gridlines every 10%. The X-axis is labeled
32+ " Weeks Since Signup" with values 0–12. The title reads "line-retention-cohort
33+ · pygal · pyplots.ai" at top center. A legend at the bottom shows each cohort
34+ with its sample size (e.g., "Jan 2025 (n=1,245)"). Dots mark each data point on
35+ the lines. Older cohorts (Jan) decay fastest to ~21%, while newer cohorts (May)
36+ retain ~40% by week 12, showing an improvement trend.
37+ criteria_checklist :
38+ visual_quality :
39+ score : 26
40+ max : 30
41+ items :
42+ - id : VQ-01
43+ name : Text Legibility
44+ score : 7
45+ max : 8
46+ passed : true
47+ comment : All font sizes explicitly set and readable; slightly oversized relative
48+ to library guide but effective
49+ - id : VQ-02
50+ name : No Overlap
51+ score : 6
52+ max : 6
53+ passed : true
54+ comment : No overlapping text anywhere; legend well-separated from data
55+ - id : VQ-03
56+ name : Element Visibility
57+ score : 5
58+ max : 6
59+ passed : true
60+ comment : Lines and dots visible but converge in later weeks making series
61+ harder to distinguish
62+ - id : VQ-04
63+ name : Color Accessibility
64+ score : 4
65+ max : 4
66+ passed : true
67+ comment : Five distinct hues with good contrast; no pure red-green pairing
68+ - id : VQ-05
69+ name : Layout & Canvas
70+ score : 2
71+ max : 4
72+ passed : true
73+ comment : Decent canvas usage but significant empty space in lower portion
74+ (0-20% range mostly unused)
75+ - id : VQ-06
76+ name : Axis Labels & Title
77+ score : 2
78+ max : 2
79+ passed : true
80+ comment : Descriptive labels with units on both axes
81+ design_excellence :
82+ score : 10
83+ max : 20
84+ items :
85+ - id : DE-01
86+ name : Aesthetic Sophistication
87+ score : 5
88+ max : 8
89+ passed : true
90+ comment : Custom palette, white background, explicit font sizing — above defaults
91+ but not publication-level
92+ - id : DE-02
93+ name : Visual Refinement
94+ score : 3
95+ max : 6
96+ passed : true
97+ comment : Subtle gray grid, X-guides hidden, legend at bottom; some refinement
98+ visible
99+ - id : DE-03
100+ name : Data Storytelling
101+ score : 2
102+ max : 6
103+ passed : false
104+ comment : Data shows trend but no visual emphasis — identical line weight/opacity,
105+ no reference line
106+ spec_compliance :
107+ score : 14
108+ max : 15
109+ items :
110+ - id : SC-01
111+ name : Plot Type
112+ score : 5
113+ max : 5
114+ passed : true
115+ comment : Correct line chart with multiple cohorts
116+ - id : SC-02
117+ name : Required Features
118+ score : 3
119+ max : 4
120+ passed : true
121+ comment : Missing opacity/thickness differentiation and reference line
122+ - id : SC-03
123+ name : Data Mapping
124+ score : 3
125+ max : 3
126+ passed : true
127+ comment : X = weeks, Y = retention %, cohort = series — all correct
128+ - id : SC-04
129+ name : Title & Legend
130+ score : 3
131+ max : 3
132+ passed : true
133+ comment : Correct title format and legend labels with cohort sizes
134+ data_quality :
135+ score : 14
136+ max : 15
137+ items :
138+ - id : DQ-01
139+ name : Feature Coverage
140+ score : 5
141+ max : 6
142+ passed : true
143+ comment : 5 cohorts with different decay rates showing improving retention
144+ trend
145+ - id : DQ-02
146+ name : Realistic Context
147+ score : 5
148+ max : 5
149+ passed : true
150+ comment : Realistic product analytics scenario with plausible cohort sizes
151+ - id : DQ-03
152+ name : Appropriate Scale
153+ score : 4
154+ max : 4
155+ passed : true
156+ comment : Retention 5-100%, cohort sizes ~1000-1600, 12-week tracking — all
157+ realistic
158+ code_quality :
159+ score : 10
160+ max : 10
161+ items :
162+ - id : CQ-01
163+ name : KISS Structure
164+ score : 3
165+ max : 3
166+ passed : true
167+ comment : Clean imports → data → style → chart → save structure
168+ - id : CQ-02
169+ name : Reproducibility
170+ score : 2
171+ max : 2
172+ passed : true
173+ comment : np.random.seed(42) set
174+ - id : CQ-03
175+ name : Clean Imports
176+ score : 2
177+ max : 2
178+ passed : true
179+ comment : All imports used
180+ - id : CQ-04
181+ name : Code Elegance
182+ score : 2
183+ max : 2
184+ passed : true
185+ comment : Clean, appropriate complexity with realistic decay model
186+ - id : CQ-05
187+ name : Output & API
188+ score : 1
189+ max : 1
190+ passed : true
191+ comment : Saves as plot.png, current API
192+ library_mastery :
193+ score : 6
194+ max : 10
195+ items :
196+ - id : LM-01
197+ name : Idiomatic Usage
198+ score : 4
199+ max : 5
200+ passed : true
201+ comment : Good use of pygal.Line, Style, legend_at_bottom, truncate_legend,
202+ range
203+ - id : LM-02
204+ name : Distinctive Features
205+ score : 2
206+ max : 5
207+ passed : false
208+ comment : Uses truncate_legend=-1 and stroke_style but doesn't leverage pygal's
209+ interactive SVG or other distinctive features
210+ verdict : REJECTED
211+ impl_tags :
212+ dependencies : []
213+ techniques : []
214+ patterns :
215+ - data-generation
216+ - iteration-over-groups
217+ dataprep : []
218+ styling :
219+ - grid-styling
0 commit comments