Skip to content

Commit 86057ef

Browse files
csharpfritzCopilotCopilot
authored
Milestone 9: Migration Fidelity and Hardening (#349)
* Initial plan * Add Calendar component implementation with basic structure Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> * Add unit tests for Calendar component - all 19 tests passing Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> * Add Calendar sample page and documentation Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> * Add Calendar sample page and documentation * Fix code review issues: safe substring and synchronous event handling Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> * fix: refactor Calendar to use CalendarSelectionMode enum (#333) - Create CalendarSelectionMode enum (None, Day, DayWeek, DayWeekMonth) - Refactor Calendar.SelectionMode from string to CalendarSelectionMode enum - Remove .GetAwaiter().GetResult() blocking call in CreateDayRenderArgs - Add Caption, CaptionAlign, UseAccessibleHeader properties - Update tests and samples to use enum values * samples: add demo pages for Calendar, FileUpload, ImageMap - Calendar: date selection, selection modes, styling, day/title formats, events - FileUpload: basic upload, file type filtering, multiple files, disabled, styled - ImageMap: navigate/postback/mixed hot spot modes, rectangle/circle/polygon shapes - Updated NavMenu and ComponentList with links to all three new components * docs: add documentation for Calendar, FileUpload, ImageMap, PageService * fix: restore .ai-team agent history and decisions lost in PR #338 merge The FileUpload PR (#338) inadvertently reverted Sprint 1 gate review entries from agent histories (beast, cyclops, forge, jubilee, rogue) and downgraded the FileUpload InputFile decision in decisions.md. Restored from commit f85aa42 (docs(ai-team): Sprint 1 gate review results). * feat: add Copilot custom agent definitions in .github/agents/ Creates .agent.md files for all 6 team agents (Beast, Cyclops, Forge, Jubilee, Rogue, Scribe) so they appear in GitHub Copilot's agent picker. Content sourced from existing .ai-team/agents/*/charter.md files. * fix: replace individual agent files with Squad coordinator agent Squad is the single Copilot agent that delegates to the specialized agents defined in .ai-team/agents/. Individual agent files were incorrectly created the correct pattern is one coordinator agent (squad.agent.md) that routes work to Forge, Cyclops, Beast, Jubilee, Rogue, and Scribe based on task type. * docs(ai-team): log Sprint 2 completion Session: 2026-02-10-sprint2-complete Requested by: Jeffrey T. Fritz Changes: - Logged Sprint 2 session (4 components shipped with docs, samples, tests) - Merged Sprint 2 design review decision from inbox - Removed duplicate FileUpload InputFile decision from inbox (already consolidated) - Appended Sprint 2 completion decision to decisions.md - Propagated cross-agent updates to all 5 agent histories * Updated the squad * docs(ai-team): Sprint 3 planning session Session: 2026-02-11-sprint3-planning Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-11-sprint3-planning.md - Merged 3 decisions from inbox into decisions.md - Updated status.md to reflect 48/53 components complete - Sprint 3 scope: DetailsView + PasswordRecovery - Propagated cross-agent updates to all agent history files * docs(ai-team): Sprint 3 execution complete Session: 2026-02-12-sprint3-execution Requested by: Jeffrey T. Fritz Changes: - Logged Sprint 3 execution session - Merged 7 decisions from inbox into decisions.md - Sprint 3 gate review: DetailsView + PasswordRecovery APPROVED - Propagated cross-agent updates to Beast, Colossus, Cyclops, Rogue, Jubilee - status.md updated to 50/53 (94%) * 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 * docs(ai-team): Summarize Forge history (13.2KB -> 4.3KB) Session: 2026-02-12-milestone4-planning Requested by: Scribe (automatic) Changes: - Summarized Forge history.md (exceeded ~12KB threshold) - Preserved all team updates and key patterns * feat: Milestone 6 — Feature Gap Closure (54 work items, ~345 gaps closed) Closes the highest-impact feature gaps from the 53-control audit. P0 — Base class fixes (~180 gaps): AccessKey, ToolTip on all controls; DataBoundComponent inherits BaseStyledComponent; ValidatorDisplay + SetFocusOnError; Image/Label base class upgrades. P1 — Control improvements (~120 gaps): GridView paging/sorting/row editing; Calendar style sub-components + enums; FormView header/footer/empty data; HyperLink NavigateUrl rename; ValidationSummary HeaderText/ShowSummary/ValidationGroup. P2 — Nice-to-have (~45 gaps): DataTextFormatString + AppendDataBoundItems on BaseListControl; CausesValidation on CheckBox/RadioButton/TextBox; Menu Orientation; Label AssociatedControlID; Login controls base class upgrade. 168 files changed, +5,712 / -1,775 lines 1,065 tests passing, 0 failures * fix: Menu JS interop crash, Calendar attribute rendering, Menu auto-ID generation - Add null safety and try/catch in Menu.js to prevent circuit crash - Fix Calendar.razor attribute rendering issue - Auto-generate Menu ID when not explicitly provided Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Cyclops history and decision inbox for M8 bug fixes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: formally defer Substitution/Xml, polish documentation - Mark Substitution and Xml as Deferred in status.md - Create DeferredControls.md with migration guidance - Fix mkdocs.yml nav issues - Update README component stats - Remove Chart hedging language Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add shared PagerSettings sub-component for GridView/FormView/DetailsView - Add PagerButtons and PagerPosition enums - Add PagerSettings class with Web Forms-compatible properties - Add IPagerSettingsContainer interface - Add UiPagerSettings base component - Wire PagerSettings into GridView, FormView, and DetailsView - Follow existing style sub-component CascadingParameter pattern Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): M8 session log and decision merge Session: 2026-02-24-m8-release-readiness Requested by: Jeffrey T. Fritz Changes: - Logged M8 session to .ai-team/log/2026-02-24-m8-release-readiness.md - Merged 18 decisions from inbox (Menu auto-ID, Substitution/Xml deferral, M8 scope, PagerSettings, M7 plan, integration tests, TreeView, GridView, DataGrid, ListView, FormView, DetailsView, validators, Menu improvements, Playwright patterns, rendermode fix) - Propagated team updates to all 6 agent histories - Deduplicated decisions.md (0 exact heading duplicates found) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: bump version to 0.14 for Milestone 8 release Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): log v0.14 release completion Session: 2026-02-25-v014-release Requested by: Jeffrey T. Fritz Changes: - Logged v0.14 release final session (docs fix, CI green, release created) - Decision inbox checked (empty, no merges needed) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: ToolTip base class, ValidationSummary comma fix, SkinID type fix - Move ToolTip parameter to BaseStyledComponent (fixes 28+ controls) - Fix ValidationSummary comma-split data corruption bug - Change SkinID from bool to string (matches Web Forms) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update Cyclops history and decisions for M9 code fixes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update documentation for ToolTip universality Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: add ToolTip rendering to all styled component templates Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: ToolTip base class tests + ValidationSummary comma-split tests - Add ToolTip rendering tests for 9 controls that gained ToolTip from base class - Verify Button/Image/HyperLink ToolTip regression - Add ValidationSummary tests for commas in error messages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): milestone 9 session log and decisions merge Session: 2026-02-25-milestone9-wave1 Requested by: Jeffrey T. Fritz Changes: - Logged M9 Wave 1+2 session - Merged 5 decisions from inbox - Consolidated ToolTip and ValidationSummary decisions - Removed duplicate rendermode decision - Updated 6 agent histories with cross-agent propagation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: TreeView caret not rotating on expand/collapse (#361) The NodeImage property's fallback paths (when ShowLines=false) did not check ShowExpandCollapse, relying solely on ImageSet.Collapse being non-empty. This made the logic fragile and returned Default_NoExpand.gif for any ImageSet where Collapse was empty, even when ShowExpandCollapse was true. Restructured NodeImage to: - Explicitly check ShowExpandCollapse in non-ShowLines code paths - Always return distinct expand/collapse images when ShowExpandCollapse=true - Fall back to Default_Collapse.gif / Default_Expand.gif when an ImageSet does not provide its own collapse/expand images - Return Default_NoExpand.gif only when ShowExpandCollapse is false Extracted ExpandCollapseImage() helper to DRY the ImageSet-to-filename resolution with guaranteed defaults. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): M10 setup session log and decisions merge Session: 2026-02-25-m10-setup-and-treeview-fix Requested by: Jeffrey T. Fritz Changes: - Logged session to .ai-team/log/2026-02-25-m10-setup-and-treeview-fix.md - Merged 3 decision(s) from inbox into decisions.md - Propagated updates to agent history files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs(ai-team): summarize oversized agent history files Summarized older entries in 4 agent history files exceeding ~12KB: - cyclops: 30.6KB -> 12KB (M6/M7 implementation details consolidated) - beast: 14.5KB -> 11.3KB (doc conventions and audit findings summarized) - forge: 13.9KB -> 12.4KB (M7 planning details condensed) - rogue: 12.6KB -> 11.7KB (duplicate team updates removed) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: sample site nav caret rotation and link contrast (#362) - Add missing AfterBlazorServerSide.styles.css link to App.razor (NavMenu.razor.css scoped styles were completely ignored) - Scope a.component-link blue color to .main-content only - Remove unused data-bs-toggle attributes (Bootstrap JS not loaded) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: Chart.js dataset z-order for mixed charts (#363) Line/area series now render on top of bar/column series by default, matching ASP.NET Web Forms Chart control behavior. Added Order parameter to ChartSeries for explicit control. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: csharpfritz <78577+csharpfritz@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 17e5378 commit 86057ef

119 files changed

Lines changed: 920 additions & 169 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@
99

1010
<!-- Append new learnings below. Each entry is something lasting about the project. -->
1111

12-
- **Doc structure pattern:** Each component doc follows a consistent structure: title → intro paragraph with MS docs link → Features Supported → Features NOT Supported → Web Forms Declarative Syntax → Blazor Razor Syntax (with examples) → HTML Output → Migration Notes (Before/After) → Examples → See Also. Admonitions (`!!! note`, `!!! warning`, `!!! tip`) are used for gotchas and important notes.
13-
- **mkdocs.yml nav is alphabetical:** Components are listed alphabetically within their category sections (Editor Controls, Data Controls, Validation Controls, Navigation Controls, Login Controls, Utility Features).
14-
- **Calendar doc already existed:** The Calendar component doc was already present at `docs/EditorControls/Calendar.md` and in the mkdocs nav — likely created alongside the component PR. No changes needed.
15-
- **PageService doc existed on PR branch but not on dev:** The basepage services branch (`copilot/create-basepage-for-services`) already had a comprehensive `docs/UtilityFeatures/PageService.md`. I created a fresh version on dev that matches the project doc conventions.
16-
- **ImageMap is in Navigation Controls, not Editor Controls:** Despite being image-related, ImageMap is categorized under Navigation Controls in the mkdocs nav, alongside HyperLink, Menu, SiteMapPath, and TreeView.
17-
- **Style migration pattern:** Web Forms used `TableItemStyle` child elements (e.g., `<TitleStyle BackColor="Navy" />`). The Blazor components use CSS class name string parameters (e.g., `TitleStyleCss="my-class"`). This is a key migration note for Calendar, and should be documented for any future components with similar style patterns.
18-
- **Branch naming varies:** PR branches on upstream use `copilot/create-*` naming (not `copilot/fix-*` as referenced in some task descriptions). Always verify branch names via `git ls-remote` or GitHub API.
19-
- **Deferred controls doc pattern:** For controls permanently excluded from the library, use `docs/Migration/DeferredControls.md` with per-control sections: What It Did → Why It's Not Implemented → Recommended Alternatives → Migration Example (Before/After). Include a summary table at the end. This is distinct from the component doc pattern — deferred controls don't have Features Supported/Not Supported sections since they have zero Blazor implementation.
20-
- **Migration section nav is semi-alphabetical:** The Migration section in mkdocs.yml keeps "Getting started" and "Migration Strategies" at the top, then remaining entries in alphabetical order.
12+
<!-- ⚠ Summarized 2026-02-25 by Scribe — original entries covered 2026-02-10 through 2026-02-12 -->
13+
14+
### Summary: Documentation Conventions (2026-02-10 through 2026-02-12)
15+
16+
**Doc structure:** title → intro (MS docs link) → Features Supported → NOT Supported → Web Forms syntax → Blazor syntax → HTML Output → Migration Notes (Before/After) → Examples → See Also. Admonitions for gotchas. mkdocs.yml nav is alphabetical within category sections. Migration section keeps "Getting started" and "Migration Strategies" at top.
17+
18+
**Key patterns:** Style migration: Web Forms `TableItemStyle` child elements → Blazor CSS class string parameters. Deferred controls use `docs/Migration/DeferredControls.md` with What/Why/Alternatives/Before-After (no Features sections). ImageMap is in Navigation Controls. Branch naming: `copilot/create-*` on upstream. Chart doc introduces JS interop "HTML Output Exception" pattern and multi-component (child) doc pattern. Chart Type Gallery at `docs/images/chart/chart-{type}.png`.
2119

2220
📌 Team update (2026-02-10): Docs and samples must ship in the same sprint as the component — decided by Jeffrey T. Fritz
2321
📌 Team update (2026-02-10): PRs #328 (ASCX CLI) and #309 (VS Snippets) shelved indefinitely — decided by Jeffrey T. Fritz
@@ -38,13 +36,9 @@
3836
- **Child component docs pattern:** Chart introduces a multi-component documentation pattern (Chart, ChartSeries, ChartArea, ChartLegend, ChartTitle) with separate parameter tables for each. This nested-component doc approach should be used for any future components with required child components.
3937
- **Chart Type Gallery added:** Added a "Chart Type Gallery" section to `docs/DataControls/Chart.md` between "Chart Palettes" and "Web Forms Features NOT Supported". Contains 8 subsections (Column, Line, Bar, Pie, Doughnut, Area, Scatter, Stacked Column) each with a screenshot, `SeriesChartType` enum value, and 1-2 sentence usage guidance. Includes `!!! warning` admonitions on Pie and Doughnut for the Phase 1 palette limitation (single series color instead of per-segment colors).
4038
- **Chart image path convention:** Chart screenshots live at `docs/images/chart/chart-{type}.png` (lowercase, hyphenated). Referenced from Chart.md using relative paths: `../images/chart/chart-{type}.png`. This `docs/images/{component}/` pattern should be used for any future component screenshots.
41-
- **AccessKey and ToolTip missing across all WebControl-based components:** Neither `BaseWebFormsComponent` nor `BaseStyledComponent` defines `AccessKey` or `ToolTip` parameters. Every control inheriting from WebControl in Web Forms has these, so they are universally 🔴 Missing. Adding them to `BaseStyledComponent` would fix all styled controls in one shot.
42-
- **Label uses wrong base class for style support:** `Label` inherits `BaseWebFormsComponent` (no style) instead of `BaseStyledComponent`. Web Forms `Label` inherits from `WebControl` and supports all style properties (CssClass, BackColor, Font, etc.). This is the biggest gap for Label — 11 style properties are missing.
43-
- **ListControl-derived components share common gaps:** ListBox, RadioButtonList (and CheckBoxList, DropDownList) all have the same missing properties: `AppendDataBoundItems`, `DataTextFormatString`, `CausesValidation`, `ValidationGroup`, and `TextChanged` event. These could be fixed once in a shared base.
44-
- **Literal/Localize/PlaceHolder/View/MultiView are near-complete:** Controls inheriting from `Control` (not `WebControl`) have no style properties by design. The Blazor implementations are essentially feature-complete — matching all relevant properties and events.
45-
- **Substitution and Xml are permanently deferral candidates:** Both controls are tightly coupled to server-side ASP.NET infrastructure (output caching and XSLT transformation respectively). Neither concept maps to Blazor's component model. Recommend documenting migration alternatives rather than implementing.
46-
- **Style property computed but not directly settable:** Across all `BaseStyledComponent`-derived controls, the `Style` property is computed from BackColor/ForeColor/Font/etc. via `IStyle.ToStyle()`. Web Forms allowed direct `Style["property"] = "value"` assignment. This pattern difference is consistent but worth noting in migration guides.
47-
- **Panel is the most feature-complete styled control:** Panel implements 6 out of 7 specific Web Forms properties (only BackImageUrl missing). Combined with full BaseStyledComponent inheritance, it has the highest coverage of any editor control.
39+
### Summary: Feature Audit Findings (2026-02-23)
40+
41+
AccessKey/ToolTip missing from base classes (universal gap). Label needs BaseStyledComponent. ListControl-derived components share common gaps (AppendDataBoundItems, DataTextFormatString, CausesValidation). Literal/Localize/PlaceHolder/View/MultiView near-complete. Substitution/Xml permanently deferred. Style property is computed (not directly settable). Panel is most feature-complete styled control.
4842

4943

5044
Team update (2026-02-23): AccessKey/ToolTip must be added to BaseStyledComponent decided by Beast, Cyclops
@@ -62,3 +56,20 @@
6256
Team update (2026-02-24): Menu auto-ID pattern components with JS interop should auto-generate IDs decided by Cyclops
6357
Team update (2026-02-24): M8 scope excludes version bump to 1.0 and release decided by Jeffrey T. Fritz
6458
Team update (2026-02-24): PagerSettings shared sub-component created update docs when component stabilizes decided by Cyclops
59+
60+
- **M9 Doc Gap Audit (WI-09):** Audited all docs against M6-M8 features. GridView, TreeView, Menu, Validators (ControlToValidate), and Login are fully documented. Gaps found in: FormView (ItemCommand event, styles, PagerSettings not in Blazor sections), DetailsView (Caption missing, styles/PagerSettings listed as unsupported but may be stale), DataGrid (paging listed as unsupported, needs verification), ChangePassword (Orientation and TextLayout not documented despite Login having them), and PagerSettings (no dedicated doc page exists). Full report in `.ai-team/decisions/inbox/beast-m9-doc-audit.md`.
61+
- **M9 Planning-Docs Historical Headers (WI-10):** Added `> ⚠️ Historical Snapshot (Pre-Milestone 6)` header to all 54 per-control audit files and SUMMARY.md in `planning-docs/`. Excluded README.md and MILESTONE*-PLAN.md files (still current/active). This prevents future contributors from treating pre-M6 gap data as current.
62+
- **ChangePassword/Login parity gap:** Login.md documents Orientation and TextLayout with full reference tables and migration examples, but ChangePassword.md has neither. Both controls should have identical coverage for these shared layout properties.
63+
- **ToolTip universality documented (WI-04):** Added ToolTip to Features Supported in Label.md, TextBox.md, and GridView.md (Button.md already had it). Added "Common Properties on All Styled Controls" section to Migration/readme.md explaining that ToolTip (renders as `title` attribute) is universally available on all BaseStyledComponent-derived controls. Used `!!! tip` admonition and code examples. No dedicated Common Properties page created — kept it inline in the migration guide for minimal footprint.
64+
65+
Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls), ValidationSummary comma-split fixed, SkinID boolstring fixed decided by Cyclops
66+
Team update (2026-02-25): M9 plan ratified 12 WIs across P0/P1/P2, migration fidelity theme decided by Forge
67+
68+
- **M9 Consolidated Audit Report:** Created `planning-docs/AUDIT-REPORT-M9.md` combining findings from three M9 audits: Doc Gap Audit (5 findings → #359), Integration Test Coverage Audit (5 findings → #358), and Sample Navigation Audit (19 findings → #350). All 29 findings mapped to M10 GitHub Issues with 100% coverage. Report includes 6 additional post-M9 findings (component gaps and TreeView bug). Used the planning-docs historical snapshot header convention (`> ⚠️ Historical Snapshot (Milestone 9)`).
69+
- **Audit report convention established:** Consolidated audit reports should live at `planning-docs/AUDIT-REPORT-M{N}.md` with the standard historical snapshot header, summary table, per-audit sections with findings + resolution status, and an appendix issue tracker. This pattern can be reused for future milestone audits.
70+
71+
Team update (2026-02-25): TreeView NodeImage now checks ShowExpandCollapse independently of ShowLines; ExpandCollapseImage() helper added (#361) decided by Cyclops
72+
73+
74+
Team update (2026-02-25): M12 introduces Migration Analysis Tool PoC (`bwfc-migrate` CLI, regex-based ASPX parsing, 3-phase roadmap) decided by Forge
75+

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,17 @@ Added 9 smoke tests and 9 interaction tests for M7 sample pages: GridView Select
3636
Team update (2026-02-24): M8 scope excludes version bump to 1.0 and release decided by Jeffrey T. Fritz
3737

3838
Team update (2026-02-25): Deployment pipeline patterns established compute Docker version with nbgv before build, gate on secrets, dual NuGet publishing decided by Forge
39+
40+
## Summary: M9 Integration Test Coverage Audit (WI-11)
41+
42+
Audited all sample page `@page` routes against ControlSampleTests.cs and InteractiveComponentTests.cs. Found 105 sample routes total; 100 covered by smoke tests, 57 interaction tests exist. Identified **5 pages without any smoke test**: ListView/CrudOperations (M7 — highest priority), Label, Panel/BackImageUrl, LoginControls/Orientation, and DataGrid/Styles. All other M7 features (GridView Selection/DisplayProperties, TreeView Selection/ExpandCollapse, Menu Selection, FormView Events/Styles, DetailsView Styles/Caption) have full smoke + interaction test coverage. Report written to `.ai-team/decisions/inbox/colossus-m9-test-audit.md`.
43+
44+
Team update (2026-02-25): ToolTip moved to BaseStyledComponent (28+ controls), ValidationSummary comma-split fixed, SkinID boolstring fixed decided by Cyclops
45+
Team update (2026-02-25): M9 plan ratified 12 WIs, migration fidelity decided by Forge
46+
Team update (2026-02-25): Test coverage audit merged 5 gaps identified, P0: ListView CrudOperations decided by Colossus
47+
48+
Team update (2026-02-25): Consolidated audit reports now use `planning-docs/AUDIT-REPORT-M{N}.md` pattern for all milestone audits decided by Beast
49+
50+
51+
Team update (2026-02-25): M12 introduces Migration Analysis Tool PoC (`bwfc-migrate` CLI, regex-based ASPX parsing, 3-phase roadmap) decided by Forge
52+

0 commit comments

Comments
 (0)