Fix journey cluster defects + UX improvements across 7 clusters

P0 fixes (clean-start + route contracts):
- VexHub: fix migration 002 table name + add repair migration 003
- Gateway: add /console/admin and /api/v1/unknowns routes
- IDP: add platform.idp.admin scope to OAuth client + web config
- Risk: fix URL construction from authority to gateway base
- Unknowns: fix client path from /api/v1/scanner/unknowns to /api/v1/unknowns

P1 fixes (trust + shell integrity):
- Audit: fix module name normalization, add Authority audit source
- Stage: add persistence across web store, API contracts, DB migration 059
- Posture: add per-source error tracking + degradation banner

P2 fixes (adoption + workflow clarity):
- Rename Triage to Findings in navigation + breadcrumbs
- Command palette: show quick actions for plain text queries, fix scan routes
- Scan: add local-mode limitation messaging + queue hints
- Release: add post-seal promotion CTA with pre-filled release ID
- Welcome: rewrite around operator adoption model (Get Started + What Stella Replaces)

UX improvements:
- Status rail: convert to icon-only with color state + tooltips
- Event Stream Monitor: new page at /ops/operations/event-stream
- Sidebar: collapse Operations by default
- User menu: embed theme switcher (Day/Night/System), remove standalone toggle
- Settings: add Profile section with email editing + PUT /api/v1/platform/preferences/email endpoint
- Docs viewer: replace custom parser with ngx-markdown (marked) for proper table/code/blockquote rendering

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
master
2026-03-17 15:10:36 +02:00
parent 4b7d3587ca
commit b851aa8300
50 changed files with 2163 additions and 551 deletions

View File

@@ -62,6 +62,15 @@ namespace StellaOps.Platform.Database.EfCore.CompiledModels
timeWindow.AddAnnotation("Relational:ColumnName", "time_window");
timeWindow.AddAnnotation("Relational:DefaultValueSql", "'24h'");
var stage = runtimeEntityType.AddProperty(
"Stage",
typeof(string),
propertyInfo: typeof(UiContextPreference).GetProperty("Stage",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly),
fieldInfo: null,
nullable: true);
stage.AddAnnotation("Relational:ColumnName", "stage");
var updatedAt = runtimeEntityType.AddProperty(
"UpdatedAt",
typeof(DateTime),

View File

@@ -107,6 +107,9 @@ public partial class PlatformDbContext : DbContext
entity.Property(e => e.TimeWindow)
.HasDefaultValueSql("'24h'")
.HasColumnName("time_window");
entity.Property(e => e.Stage)
.IsRequired(false)
.HasColumnName("stage");
entity.Property(e => e.UpdatedAt)
.HasDefaultValueSql("now()")
.HasColumnName("updated_at");

View File

@@ -14,6 +14,8 @@ public partial class UiContextPreference
public string TimeWindow { get; set; } = null!;
public string? Stage { get; set; }
public DateTime UpdatedAt { get; set; }
public string UpdatedBy { get; set; } = null!;

View File

@@ -0,0 +1,5 @@
-- Add stage column to ui_context_preferences for persisting the user's
-- selected deployment stage (dev/staging/production/all) across sessions.
ALTER TABLE platform.ui_context_preferences
ADD COLUMN IF NOT EXISTS stage TEXT NULL;