.NET add-on
tagout-migrate takes a legacy .NET application to verified production with the seven-phase /migrate pipeline. RoselineMCP does every C# analysis and edit, so it needs the .NET 10 SDK. It installs next to tagout, the issue → pull request lifecycle:
claude plugin marketplace add phmatray/tagout
claude plugin install tagout@tagout-marketplace
claude plugin install tagout-migrate@tagout-marketplace
Lock-out record: four dead platforms, cleared
Four apps from 2013–2016, built for platforms nothing runs any more, were audited, migrated to Blazor WebAssembly and verified live: characterization tests first, legacy data and art byte for byte, measured WCAG AA, offline proven with the network cut. The minutes come from the gate commits, not a stopwatch.
| App, live | Locked on | Cleared in |
|---|---|---|
| Chords | Windows Phone | 18 minpipeline, measured |
| Les Fleurs du Mal | WinRT 8.1 | ~30 minpipeline, measured |
| Pokédex G | UWP, SQLite 49 MB | ~1 hpipeline, measured |
| Sokoban | WinRT 8.1 | First wavenot timed |
The audit, the per-app reports and what each wave taught the kit: the case study.
A refusal, as the gate writes it
The roseline gate denies a Read of a C# file and names the tool that replaces it. Why the gate exists.
Refusal, as written by the gatehooks/roseline-gate.sh
- Locked by
roseline-gate.sh- On
ReadofProgram.cs- Reason
- Program.cs is C#, and this kit routes all C# analysis through RoselineMCP.
- Use instead
mcp__roseline__search_symbolsfor the file's shape,mcp__roseline__get_symbol_infoto read one member's body.
What the gates refuse
Two ways an agent-driven upgrade goes wrong without anyone noticing, and the lock that stops each one.
Upgrading means bumping the target framework and hoping.
Seven phases, each ending at a build, test and diagnostics gate. A red gate stops the pipeline.
The agent reads whole C# files instead of asking Roslyn.
The roseline gate denies a
Readof a.csfile and names the RoselineMCP tool that replaces it.
Which command?
Once installed, say what you have.
| Situation | Reach for |
|---|---|
| A legacy .NET app | /migrate-assess, then /migrate |
| A migrated app to re-verify | /migrate-verify |
| A portfolio to cost | /migrate-audit |
| Open follow-ups across migrated repos | /migrate-followups |
More: a real pipeline run on the bundled legacy fixture, and the audit, the per-app reports and what each wave taught the kit.