Commit Graph

316 Commits

Author SHA1 Message Date
master
ed6cd76c62 Fix critical journey blockers: audit endpoints, registry mock, topology auth
Fix #20 — Audit log empty:
  Wire app.MapAuditEndpoints() in JobEngine Program.cs. The endpoint file
  existed but was never registered, so /api/v1/jobengine/audit returned 404
  and the Timeline unified aggregation service got 0 events.

Fix #22 — Registry search returns mock data:
  Replace the catchError() synthetic mock fallback in searchImages() with
  an empty array return. The release wizard will now show "no results"
  instead of fabricating fake "payment-service" with "sha256:payment..."
  digests. getImageDigests() returns an empty-tags placeholder on failure.

Fix #13 — Topology wizard 401 (identity envelope passthrough):
  Add TryAuthenticateFromIdentityEnvelope() to Concelier's JwtBearer
  OnMessageReceived handler. When no JWT bearer token is present (stripped
  by gateway's IdentityHeaderPolicyMiddleware on ReverseProxy routes),
  the handler reads X-StellaOps-Identity-Envelope + signature headers,
  verifies the HMAC-SHA256 signature using the shared signing key, and
  populates ClaimsPrincipal with subject/tenant/scopes/roles from the
  envelope. This enables ReverseProxy routes to Concelier topology
  endpoints to authenticate the same way Microservice/Valkey routes do.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 09:24:04 +02:00
master
da76d6e93e Add topology auth policies + journey findings notes
Concelier:
- Register Topology.Read, Topology.Manage, Topology.Admin authorization
  policies mapped to OrchRead/OrchOperate/PlatformContextRead/IntegrationWrite
  scopes. Previously these policies were referenced by endpoints but never
  registered, causing System.InvalidOperationException on every topology
  API call.

Gateway routes:
- Simplified targets/environments routes (removed specific sub-path routes,
  use catch-all patterns instead)
- Changed environments base route to JobEngine (where CRUD lives)
- Changed to ReverseProxy type for all topology routes

KNOWN ISSUE (not yet fixed):
- ReverseProxy routes don't forward the gateway's identity envelope to
  Concelier. The regions/targets/bindings endpoints return 401 because
  hasPrincipal=False — the gateway authenticates the user but doesn't
  pass the identity to the backend via ReverseProxy. Microservice routes
  use Valkey transport which includes envelope headers. Topology endpoints
  need either: (a) Valkey transport registration in Concelier, or
  (b) Concelier configured to accept raw bearer tokens on ReverseProxy paths.
  This is an architecture-level fix.

Journey findings collected so far:
- Integration wizard (Harbor + GitHub App): works end-to-end
- Advisory Check All: fixed (parallel individual checks)
- Mirror domain creation: works, generate-immediately fails silently
- Topology wizard Step 1 (Region): blocked by auth passthrough issue
- Topology wizard Step 2 (Environment): POST to JobEngine needs verify
- User ID resolution: raw hashes shown everywhere

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 08:12:39 +02:00
master
1461eb5394 Fix Check All timeout and remove last dashboard fallback data
Advisory sources:
- Replace batch /check endpoint call (504 timeout after 30s for 42+
  sources) with parallel individual checks in batches of 6. Progress
  indicator now shows live "Checking (N/M)..." as each source completes.
  Verified: 54/55 sources healthy on fresh install.

Dashboard:
- Remove the 5-element fallbackEnvironments array that was still
  rendering fake environment cards. Empty array now correctly triggers
  the setup guide on installs without PlatformContextStore environments.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:15:35 +02:00
master
534aabfa2a First-time user experience fixes and platform contract repairs
FTUX fixes (Sprint 316-001):
- Remove all hardcoded fake data from dashboard — fresh installs show
  honest setup guide instead of fake crisis data (5 fake criticals gone)
- Curate advisory source defaults: 32 sources disabled by default
  (ecosystem, geo-restricted, exploit, hardware, mirror). ~43 core
  sources remain enabled. StellaOps Mirror no longer enabled at priority 1.
- Filter Mirror-category sources from Create Domain wizard to prevent
  circular mirror-from-mirror chains
- Add 404 catch-all route — unknown URLs show "Page Not Found" instead
  of silently rendering the dashboard
- Fix arrow characters in release target path dropdown (? → →)
- Add login credentials to quickstart documentation
- Update Feature Matrix: 14 release orchestration features marked as
  shipped (was marked planned)

Platform contract repairs (from prior session):
- Add /api/v1/jobengine/quotas/summary endpoint on Platform
- Fix gateway route prefix matching for /policy/shadow/* and
  /policy/simulations/* (regex routes instead of exact match)
- Fix VexHub PostgresVexSourceRepository missing interface method
- Fix advisory-vex-sources sweep text expectation
- Fix mirror operator journey auth (session storage token extraction)

Verified: 110/111 canonical routes passing (1 unrelated stale approval ref)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 02:05:38 +02:00
master
9add6af221 Add mirror client setup wizard for consumer configuration
Backend: 4 consumer API endpoints (GET/PUT /consumer config, POST
/consumer/discover for index parsing, POST /consumer/verify-signature
for JWS header detection), air-gap bundle import endpoint with manifest
parsing and SHA256 verification, IMirrorConsumerConfigStore and
IMirrorBundleImportStore interfaces.

Frontend: 4-step mirror client setup wizard (connect + test, signature
verification with auto-detect, sync mode + schedule + air-gap import,
review + pre-flight checks + activate). Dashboard consumer panel with
"Configure" button, Direct mode "Switch to Mirror" CTA, catalog header
"Connect to Mirror" link and consumer status display.

E2E: 9 Playwright test scenarios covering wizard steps, connection
testing, domain discovery, signature detection, mode selection,
pre-flight checks, dashboard integration, and catalog integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 14:35:19 +02:00
master
2da76588d4 Close first-time user operator journey remediation
Promotions: replace empty-state stub with operator landing surface
showing pipeline stages, prerequisites, and onboarding guidance.

Operations: unify naming across sidebar, breadcrumb, title, and H1
from "Platform Ops" to "Operations".

Playwright: add promotions and operations landing journey checks to
the retained first-time-user remediation and aggregate audit suites.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 14:33:27 +02:00
master
e884b4bddd Repair first-time user reporting truthfulness journeys 2026-03-15 14:21:18 +02:00
master
ab14636f85 Repair first-time identity, trust, and integrations operator journeys
Identity/Trust: replace developer jargon with operator-facing language
on trust overview, trust admin summary, and trust analytics. Add context-
aware error handling (404/503 vs generic) for fresh-install guidance.
Add navigation cards for Watchlist and Analytics in trust overview grid.

Integrations: replace raw alert() calls in test-connection and health-
check actions with inline feedback banners using Angular signals. Add
dismissible error banner for delete failures on integration detail.

Supporting fixes: admin notifications, evidence audit, replay controls,
notify panel, sidebar, route ownership, offline-kit, reachability,
topology, and platform feeds components hardened with tests and
operator-facing empty states.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 13:35:56 +02:00
master
0c723b4e07 Add advisory source catalog UI, mirror wizard, and mirror dashboard
Source catalog component: browsable catalog of 75 advisory sources grouped
by 14 categories with search, filter, enable/disable toggles, batch
operations, health checks, and category descriptions.

Mirror domain builder: 3-step wizard (select sources → configure domain →
review & create) with category-level selection, auto-naming, format
choice, rate limits, signing options, and optional immediate generation.

Mirror dashboard: domain cards with staleness indicators, regenerate and
delete actions, consumer config panel, endpoint viewer, and empty-state
CTA leading to the wizard.

Catalog mirror header: mode badge, domain stats, and quick-access buttons
for mirror configuration integrated into the source catalog.

Supporting: source management API client (9 endpoints), mirror management
API client (12 endpoints), integration hub route wiring, onboarding hub
advisory section, security page health display fix, E2E Playwright tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 13:31:04 +02:00
master
27d27b1952 Align release create wizard with canonical bundle lifecycle
Wire orch:operate scope into console bootstrap so the browser token can
execute release-control actions. Replace the silent-redirect fallback
with the canonical createBundle → publishVersion → materialize flow and
surface truthful error messages on 403/409/503. Add focused Angular
tests and Playwright journey evidence for standard and hotfix paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 13:26:20 +02:00
master
08390f0ca4 Repair first-time identity and trust operator journeys 2026-03-15 12:33:56 +02:00
master
7bdfcd5055 Stabilize release confidence approval decision journey 2026-03-15 04:04:36 +02:00
master
4a5185121d Stabilize setup admin onboarding journeys 2026-03-15 03:38:48 +02:00
master
2661bfefa4 Close iteration 013 release confidence operator journey repairs 2026-03-15 02:16:29 +02:00
master
bd78523564 Widen scratch iteration 011 with fixture-backed integrations QA 2026-03-14 03:11:45 +02:00
master
bf4ff5bfd7 Close scratch iteration 009 grouped policy and VEX audit repairs 2026-03-13 19:25:48 +02:00
master
c9a30331ce Close scratch iteration 008 and enforce full surface audits 2026-03-13 11:00:12 +02:00
master
27d0247058 Close scratch iteration 006 grouped readiness repairs 2026-03-13 02:27:03 +02:00
master
9c3d1f8d4a Stabilize scratch iteration 005 aggregate audit 2026-03-12 23:03:19 +02:00
master
317e55e623 Complete scratch iteration 004 setup and grouped route-action fixes 2026-03-12 19:28:42 +02:00
master
d8d3133060 Share shadow mode state and fix operations quota routing 2026-03-12 13:13:06 +02:00
master
29b68f5bee Repair search result routing and advisory query ranking 2026-03-12 11:57:40 +02:00
master
6964a046a5 Close admin trust audit gaps and stabilize live sweeps 2026-03-12 10:14:00 +02:00
master
ebc70a3611 Make notifications action sweep wait for cold-load shell 2026-03-11 21:19:54 +02:00
master
66e67f1a97 Restore Doctor search after AdvisoryAI cold-start race 2026-03-11 21:19:42 +02:00
master
4a84f901ab Harden changed-surfaces registry-admin selector 2026-03-11 19:17:12 +02:00
master
8eec0a9dee Make registry-admin audit route self-identifying 2026-03-11 19:09:46 +02:00
master
6afd8f951e Harden canonical route sweep rechecks 2026-03-11 18:44:38 +02:00
master
f0b2ef3319 Align live evidence export with audit bundles 2026-03-11 18:21:47 +02:00
master
8cf132798d Repair setup admin branding and action routes 2026-03-11 17:05:49 +02:00
master
dc98d5a758 Throttle sidebar pending approvals badge refresh 2026-03-11 15:51:22 +02:00
master
9dd8592a2a Repair triage artifact scope and evidence contracts 2026-03-11 14:25:59 +02:00
master
4dc5db4efb Harden scratch-stack live QA sweeps 2026-03-11 12:07:00 +02:00
master
568a1df468 Fix watchlist draft hydration and update contracts 2026-03-11 10:56:31 +02:00
master
7a1c090f2e Harden live Playwright action sweeps for cold-loaded surfaces 2026-03-11 09:44:42 +02:00
master
3865b93091 Repair live jobs queues action handoffs 2026-03-10 20:46:55 +02:00
master
f727ec24fd Auto-rebuild AdvisoryAI knowledge corpus on startup 2026-03-10 20:18:12 +02:00
master
d93006a8fa Align release publisher scopes and preserve promotion submit context 2026-03-10 19:01:16 +02:00
master
f401a7182c Repair hotfix route and action flows 2026-03-10 18:06:14 +02:00
master
bb8327087d Harden live route ownership verification 2026-03-10 17:27:26 +02:00
master
6ef5ff5b43 Restructure navigation UX: sidebar groups, route aliases, and phase 3-6 polish
Sidebar (phases 1-4, committed in parent sprint):
- Dashboard childless; Releases gains Health child
- Operations moved to release-control group with 8 promoted children
- Evidence renamed to Audit; Logs/Bundles as canonical sub-items
- Setup Notifications removed (consolidated)

Route fixes and canonical restore (Sprint 030):
- releases.routes: /health loads EnvironmentPosturePageComponent;
  /environments and /environments/:environmentId kept as canonical Releases routes
- legacy-redirects: release-orchestrator/environments and
  release-control/environments both redirect to /releases/environments
- app.routes: release-control/{environments,regions} alias → /releases/environments
- route-surface-ownership spec updated to match canonical Releases paths
- live-route-surface-ownership-check expected paths aligned

Phase 3: Remove in-page "Create Hotfix" button from hotfixes-queue component;
  topbar action is the sole create affordance.

Phase 6 UX polish:
- security-reports-page: stub link-list → tabbed layout (Risk, VEX, Export)
- filter-bar: Search button + Enter key trigger; top-row / filter-row layout
- approvals-inbox: horizontal chip-style status filters replacing pill buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 17:16:26 +02:00
master
8a1fb9bd9b OpenAPI query param discovery and header cleanup completion
Backend: ExtractParameters() now discovers query params from [AsParameters]
records and [FromQuery] attributes via handler method reflection. Gateway
OpenApiDocumentGenerator emits parameters arrays in the aggregated spec.
QueryParameterInfo added to EndpointSchemaInfo for HELLO payload transport.

Frontend: Remaining spec files and straggler services updated to canonical
X-Stella-Ops-* header names. Sprint 026 archived (tasks 01-06 DONE,
07-09 TODO for backend service rename pass).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-10 17:13:58 +02:00
master
8578065675 Fix notifications surface ownership and frontdoor contracts 2026-03-10 16:54:25 +02:00
master
2859c751e6 Fix setup wizard shuffle assignment 2026-03-10 16:38:28 +02:00
master
e49236f630 Stabilize web context propagation and header constants 2026-03-10 16:37:59 +02:00
master
72746e2f7b Align route ownership and sidebar surface exposure 2026-03-10 15:32:34 +02:00
master
5c10aa7f71 Restore mission control leaves and alert drilldown return path 2026-03-10 15:00:59 +02:00
master
ec22b8ee46 Fix topology scope hydration and live sweep readiness 2026-03-10 14:37:38 +02:00
master
b302a5a3d6 Preserve deployment evidence navigation scope 2026-03-10 13:35:00 +02:00
master
1fe3f489f1 Finalize topbar status chip ownership split 2026-03-10 13:20:17 +02:00