Ticket Masala v3.0 - MVP Roadmap¶
Version: 3.0
Date: December 2025
Status: In Progress
Overview¶
This document covers the v3.0 MVP improvements focused on developer experience, observability, and API foundations. These are low-effort, high-impact items that should be completed first.
⚠️ Critical Architectural Principles¶
[!CAUTION] The following principles are non-negotiable for v3 development.
🚫 Principle 1: "Compile, Don't Interpret"¶
- Use Expression Trees to compile YAML rules into delegates at startup
- Store in
ConcurrentDictionary<string, Func<Ticket, bool>> - Status: ✅
RuleCompilerServicealready implemented
💾 Principle 2: SQLite Performance Discipline¶
- Enable WAL Mode for concurrent read/write
- Use Generated Columns for JSON field indexing
- Never query directly on non-indexed
json_extract()
🚀 Principle 3: The "Lite Doctrine"¶
| Area | ❌ Rejected | ✅ Required |
|---|---|---|
| Queuing | RabbitMQ | System.Threading.Channels |
| Caching | Redis | IMemoryCache |
| ML | Python Sidecar | ML.NET (In-Process) |
v3.0 Improvements¶
1. Universal Entity Model Terminology ✅¶
Status: Completed
- API supports
/api/v1/ticketsand/api/v1/workitemsroutes CreateWorkItemRequest/WorkItemResponseDTOs added- Views use domain-configurable labels
- See ADR-001
2. OpenAPI/Swagger Documentation¶
Problem: No API reference for external integrators.
Solution: Add Swashbuckle with XML comments.
// Program.cs
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Ticket Masala API",
Version = "v1"
});
c.IncludeXmlComments(Path.Combine(
AppContext.BaseDirectory,
$"{Assembly.GetExecutingAssembly().GetName().Name}.xml"));
});
[!IMPORTANT] XML comments must document which config files govern field values (e.g.,
masala_domains.yaml).
Effort: Low (1 sprint) | Priority: 🔴 Critical
3. Structured Logging with Correlation¶
Problem: Hard to trace requests through layers.
Solution: Serilog with correlation IDs.
builder.Host.UseSerilog((context, config) =>
{
config
.ReadFrom.Configuration(context.Configuration)
.Enrich.FromLogContext()
.Enrich.WithCorrelationId()
.WriteTo.Console(new RenderedCompactJsonFormatter());
});
[!IMPORTANT] Enrich logs with
TicketIdandProjectIdthroughout the GERDA pipeline.
Effort: Low (1 sprint) | Priority: 🔴 Critical
4. Integration Test Fixtures¶
Problem: Brittle tests with hardcoded data.
Solution: Builder pattern for test data.
public class TicketBuilder
{
private readonly Ticket _ticket = new() { /* defaults */ };
public TicketBuilder WithDomain(string d) { _ticket.DomainId = d; return this; }
public TicketBuilder WithCustomField(string k, object v) { /* ... */ return this; }
public Ticket Build() => _ticket;
}
[!WARNING]
Build()must sync with SQLite Generated Columns logic.
Effort: Low (1 sprint) | Priority: 🔴 Critical
5. ML.NET Model Persistence¶
Problem: Models trained on each startup; slow and loses improvements.
Solution: Persist models to disk.
public class ModelPersistenceService
{
public async Task SaveModelAsync(ITransformer model, string name)
{
_mlContext.Model.Save(model, null, $"models/{name}.zip");
}
public ITransformer? LoadModel(string name)
{
var path = $"models/{name}.zip";
return File.Exists(path) ? _mlContext.Model.Load(path, out _) : null;
}
}
[!IMPORTANT] Link model versions to
DomainConfigVersionfor reproducibility.
Effort: Low (1 sprint) | Priority: 🔴 Critical
6. Dev Container Configuration¶
Problem: Setup friction for new developers.
Solution: VS Code Dev Container.
// .devcontainer/devcontainer.json
{
"name": "Ticket Masala Dev",
"image": "mcr.microsoft.com/dotnet/sdk:8.0",
"postCreateCommand": "dotnet restore && dotnet tool restore"
}
Effort: Low (0.5 sprint) | Priority: 🟢 Low
Implementation Priority¶
| # | Item | Effort | Status |
|---|---|---|---|
| 1 | UEM Terminology | Low | ✅ Done |
| 2 | OpenAPI/Swagger | Low | ✅ Done |
| 3 | Structured Logging | Low | ✅ Done |
| 4 | Test Fixtures | Low | ✅ Done |
| 5 | Model Persistence | Low | ✅ Done |
| 6 | Dev Container | Low | ✅ Done |
Next Steps¶
After completing v3.0 MVP, proceed to v3.1+ Roadmap for:
- Configuration Hot Reload
- AI Explainability API
- Plugin Architecture
- Prometheus Metrics
See v3-roadmap-future.md for v3.1+ improvements.