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,10 @@ public partial class VexHubDbContext : DbContext
.HasDefaultValueSql("now()")
.HasColumnName("created_at");
entity.Property(e => e.UpdatedAt).HasColumnName("updated_at");
entity.Property(e => e.ConsecutiveFailures)
.HasDefaultValue(0)
.HasColumnName("consecutive_failures");
entity.Property(e => e.NextEligiblePollAt).HasColumnName("next_eligible_poll_at");
});
// ── statements ───────────────────────────────────────────────────

View File

@@ -18,4 +18,6 @@ public partial class VexSource
public string Config { get; set; } = null!;
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public int ConsecutiveFailures { get; set; }
public DateTimeOffset? NextEligiblePollAt { get; set; }
}

View File

@@ -2,6 +2,6 @@
-- Sprint: Advisory & VEX Source Management
-- Adds failure tracking columns for exponential backoff
ALTER TABLE vexhub.vex_sources
ALTER TABLE vexhub.sources
ADD COLUMN IF NOT EXISTS consecutive_failures INT NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS next_eligible_poll_at TIMESTAMPTZ NULL;

View File

@@ -0,0 +1,9 @@
-- Migration: 003_fix_source_backoff_columns
-- Repairs migration 002 which referenced wrong table name (vexhub.vex_sources instead of vexhub.sources)
-- Uses IF NOT EXISTS so this is safe on both fresh and partially-migrated databases
ALTER TABLE vexhub.sources
ADD COLUMN IF NOT EXISTS consecutive_failures INT NOT NULL DEFAULT 0;
ALTER TABLE vexhub.sources
ADD COLUMN IF NOT EXISTS next_eligible_poll_at TIMESTAMPTZ NULL;