Skip to content

Commit c5cff70

Browse files
committed
docs(ai-team): Milestone 4 planning - Chart component
Session: 2026-02-12-milestone4-planning Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-12-milestone4-planning.md - Merged decisions from inbox (Chart.js evaluation, milestone plan, milestones directive) - Propagated milestone 4 updates to 5 agent history files
1 parent e5399ae commit c5cff70

7 files changed

Lines changed: 343 additions & 0 deletions

File tree

.ai-team/agents/beast/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,6 @@
3030
- **Sprint 3 docs delivered:** DetailsView and PasswordRecovery documentation created with full structure (features, Web Forms syntax, Blazor syntax, HTML output, migration notes, examples, See Also). Added to mkdocs.yml nav (alphabetical) and linked in README.md.
3131

3232
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. Action item: fix DetailsView docs to replace `DataSource=` with `Items=` in Blazor code samples. — decided by Forge
33+
34+
Team update (2026-02-12): Milestone 4 planned Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. decided by Forge + Squad
35+

.ai-team/agents/colossus/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,6 @@
2626
- PasswordRecovery Step 1 uses `input[type='text']` for username, button for submit
2727

2828
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). Library effectively feature-complete. — decided by Forge
29+
30+
Team update (2026-02-12): Milestone 4 planned Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. decided by Forge + Squad
31+

.ai-team/agents/cyclops/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,6 @@
4343
📌 Team update (2026-02-11): Sprint 3 scope: DetailsView + PasswordRecovery. Chart/Substitution/Xml deferred. 48/53 → target 50/53. — decided by Forge
4444
📌 Team update (2026-02-11): Colossus added as dedicated integration test engineer. Rogue retains bUnit unit tests. — decided by Jeffrey T. Fritz
4545
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). — decided by Forge
46+
47+
Team update (2026-02-12): Milestone 4 planned Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. decided by Forge + Squad
48+

.ai-team/agents/forge/history.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,36 @@
116116
- Library is effectively feature-complete for practical Web Forms migration
117117

118118
📌 Team update (2026-02-11): Sprint 3 gate review — DetailsView APPROVED, PasswordRecovery APPROVED. 50/53 complete (94%). — decided by Forge
119+
120+
### 2026-02-12 — Chart Component JS Library Evaluation
121+
122+
**Requested by Jeffrey T. Fritz.** Performed full architectural evaluation of using a JavaScript charting library to implement the Web Forms `System.Web.UI.DataVisualization.Charting.Chart` control (previously deferred as "very high complexity").
123+
124+
**Key findings:**
125+
- Web Forms Chart renders an `<img>` tag pointing to a server-generated PNG via `ChartImg.axd` — this is architecturally impossible to replicate in Blazor (no GDI+, no server-side image handler pipeline). Any implementation must accept a HTML output deviation.
126+
- The `SeriesChartType` enum has 35 chart types (Point through Pyramid). Realistic Phase 1 subset: 8 types (Column, Bar, Line, Pie, Area, Doughnut, Scatter, StackedColumn) covering 90%+ of real-world usage.
127+
- Chart's key sub-objects: Series, DataPoint, ChartArea, Axis, Legend, Title — must be mirrored as Blazor sub-components.
128+
129+
**Library evaluation results:**
130+
- **D3.js — REJECTED.** Low-level SVG manipulation toolkit, not a charting library. Zero built-in chart types. No Blazor wrapper. Would require building an entire charting engine from scratch (XL effort). Jeffrey's suggestion, but wrong abstraction level.
131+
- **Chart.js — RECOMMENDED.** MIT license, ~60KB gzipped, ~10 built-in chart types covering all Phase 1 needs, multiple Blazor wrappers exist (though we recommend bundling chart.min.js directly and writing thin interop, not depending on community wrapper NuGet packages).
132+
- **ApexCharts — STRONG ALTERNATIVE.** MIT, ~120KB gz, 20+ chart types, official Blazor wrapper (Blazor-ApexCharts). Better coverage but double the bundle size and the wrapper has its own opinionated API.
133+
- **Plotly.js — REJECTED.** 3-4MB gzipped bundle size is disqualifying. Scientific/3D features are overkill.
134+
135+
**Architecture recommendation:**
136+
- Use Chart.js bundled as a static asset (~60KB)
137+
- Thin JS interop layer (`chart-interop.js`) translating C# config → Chart.js config
138+
- Blazor Chart component mirrors Web Forms property names (Series, ChartAreas, etc.)
139+
- `<canvas>` output instead of `<img>` — documented as justified exception
140+
- Inherit `DataBoundComponent<T>` (consistent with Web Forms Chart inheriting DataBoundControl)
141+
- Effort: L (Large) — first component requiring JS interop, new testing challenges (canvas can't be bUnit-tested)
142+
143+
**Risks identified:**
144+
1. JS interop is unprecedented in this project — new build/packaging complexity
145+
2. Canvas content not testable via bUnit — Playwright becomes primary quality gate
146+
3. Chart.js version pinning required — major version upgrades could break interop
147+
4. SSR/prerendering needs special handling (canvas requires DOM)
148+
149+
**Recommendation: Proceed, but as Sprint 4** — not tacked onto Sprint 3. The JS interop pattern warrants dedicated design review and planning.
150+
151+
📌 Team update (2026-02-12): Chart component feasibility confirmed — Chart.js recommended via JS interop. HTML output deviation (`<canvas>` not `<img>`) justified and documented. Effort: L. Target Sprint 4. — decided by Forge

.ai-team/agents/jubilee/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,6 @@
4242
- **Nav ordering note:** Data Components section in NavMenu.razor is not strictly alphabetical (DataList before DataGrid). I placed DetailsView after DataGrid and before FormView to maintain the closest alphabetical order without rearranging existing entries.
4343

4444
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 50/53 components (94%). — decided by Forge
45+
46+
Team update (2026-02-12): Milestone 4 planned Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. decided by Forge + Squad
47+

.ai-team/agents/rogue/history.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@
2525
📌 Test pattern: DetailsView is a generic DataBoundComponent<ItemType> — tests must use `ItemType="Widget"` and provide `Items` parameter as a list. PasswordRecovery requires NavigationManager service registration (`Services.AddSingleton<NavigationManager>(new Mock<NavigationManager>().Object)`). Both follow the .razor test file pattern inheriting BlazorWebFormsTestContext via _Imports.razor. — Rogue
2626

2727
📌 Team update (2026-02-12): Sprint 3 gate review — DetailsView and PasswordRecovery APPROVED. 71 new tests verified. 797 total. — decided by Forge
28+
29+
Team update (2026-02-12): Milestone 4 planned Chart component with Chart.js via JS interop. 8 work items, design review required before implementation. decided by Forge + Squad
30+

0 commit comments

Comments
 (0)