Commit Graph

983 Commits

Author SHA1 Message Date
master
ae9a9fab91 Simplify Deployments tabs and fix duplicate Version button
Deployments page:
- Remove redundant context chips (US East, Development, 24h) — topbar already shows these
- Rename Timeline tab → Pipeline with appropriate icon
- Remove Table tab (raw data table, low value vs Pipeline view)
- Remove Correlations tab (deployment correlations belong in Pipeline view)
- Keep only Pipeline + Approvals tabs

Releases Versions tab:
- Fix duplicate "New Version" button — ReleaseListComponent now accepts
  [embedded]="true" to suppress its pageAction when rendered inside the
  unified Releases page (which already has "New Release" page action)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:44:34 +02:00
master
d704cb6c7f Fix Deployments tab switching and approve/reject actions
Root cause: stella-page-tabs used urlParam="tab" while the component also
read the "view" query param via a manual queryParamMap subscriber. When
stella-page-tabs wrote ?tab=X to the URL, the subscriber re-read the stale
?view= param and reset viewMode back, causing tabs to appear frozen and
approve/reject button clicks to be swallowed by the stale state.

Fix:
- Change stella-page-tabs urlParam from "tab" to "view" so both the
  component and the tab widget use the same query parameter
- Guard the manual subscriber to only update viewMode if it actually
  differs, preventing feedback loops

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:12:32 +02:00
master
410e780eee Fix remaining UX inconsistencies: eyebrow, duplicate headings, delete confirm
EYE1 + NAME1: Notifications page
- Remove "Operations" inline eyebrow paragraph
- Rename "Notification Operations" → "Notifications" to match sidebar label

DUP1: Remove "Channels" h2 from Notifications tab panel (tab label suffices)
DUP2: Remove "Users" h2 from Identity & Access tab panel (tab label suffices)

DEST2: Notifications channel delete confirmation
- Replace unguarded deleteChannel() with confirmDeleteChannel() + app-confirm-dialog
- Confirmation message names the channel being deleted

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:06:17 +02:00
master
cc9ce3ff5e Fix duplicate breadcrumb and Export Center delete confirmation
BC1 — Fix "Operations > Operations > ..." duplicate breadcrumb:
- Set breadcrumb to empty string on /ops/operations parent route
  and /ops/operations (overview) route, so only the top-level
  "Operations" breadcrumb from /ops renders. Affects 7 pages:
  Feeds, Signals, Jobs, Diagnostics, Notifications, Watchlist, overview.

EC1 — Export Center delete confirmation:
- Replace window.confirm() with app-confirm-dialog variant="danger"
- Names the export profile being deleted in confirmation message
- Follows the destructive action convention from AGENTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:46:49 +02:00
master
9d5f33e450 Phase C: Merge Versions into Releases as a tab
Unify the Releases page with Pipeline + Versions tabs:
- Add stella-page-tabs with Pipeline (default) and Versions tabs
- Pipeline tab shows the existing release pipeline table
- Versions tab renders the ReleaseListComponent (version catalog) inline
- /releases/versions redirects to /releases?tab=versions for bookmarks
- Updated subtitle to "Versions, deployments, approvals, and promotion pipeline."

The Versions sidebar item was already removed in Phase A. This completes
the unification — one place for all release-related views.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:20:02 +02:00
master
71e9d1c7fa Phase B: route merges for Reports, Bundles, and bookmark redirects
Bundles route moved to /evidence/bundles:
- Add /evidence/bundles and /evidence/bundles/new routes loading existing
  TriageAuditBundlesComponent and TriageAuditBundleNewComponent
- /triage/audit-bundles and /triage/audit-bundles/new redirect to new paths

Security Reports merged into Security Posture:
- /security/reports redirects to /security (Security Posture page)
- Add Print/PDF button directly on Security Posture page header
- Reports page component retained for backward compat but no longer in sidebar or routes

All old routes have redirects to prevent bookmark breakage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:15:32 +02:00
master
f08ad767b7 Restructure sidebar navigation to match product workflows
Major IA restructure based on product-level analysis of Stella Ops core
workflows (release lifecycle, policy gates, evidence chain, security posture).

New 7-group structure (was 5):
- Dashboard: new ungrouped home link (no group header)
- Release Control: Deployments, Releases, Environments (moved from Ops)
- Security: Vulnerabilities, Security Posture (+children), Scan Image
  (Reports removed — will merge into Posture in Phase B)
- Policy: NEW GROUP — Packs, Governance, Simulation, VEX & Exceptions,
  Release Gates, Policy Audit (promoted from buried Operations item)
- Operations: slimmed from 11→8 items (Hub, Jobs, Scripts, Signals,
  Diagnostics, Notifications, Feeds, Watchlist)
- Audit & Evidence: Overview, Capsules, Replay, Export, Audit Log,
  Bundles (route fixed to /evidence/bundles), Trust (merged name)
- Settings: unchanged

Rationale:
- Policy is a release-blocking gate with 6 deep sub-workflows — not an ops utility
- Environments define the promotion graph — belongs in Release Control
- Trust Audit + Trust Analytics merged into single "Trust" item
- Reports removed (duplicated Security Posture content)
- Versions removed from sidebar (will merge into Releases as tab in Phase C)
- Dashboard link ensures users can always navigate home without logo click

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 14:34:25 +02:00
master
27b2759b00 Promote button logic, delete confirmation, tooltips, and AGENTS.md conventions
U2 — Promote button three-state model:
- showPromote: visible only when a next promotion target exists
- canPromote: enabled only when deployed + no blocking gates
- promoteDisabledReason: tooltip explaining why promotion is disabled
- Added .rdp__btn--disabled style (opacity + pointer-events)

W1 — Script delete confirmation:
- Replace window.confirm() with app-confirm-dialog variant="danger"
- Names the script being deleted in the confirmation message

W2 — Script description tooltip:
- Add [title] binding to truncated description text in scripts table

V1 — Remove duplicate "Profile" h2 in User Preferences tab panel

X1 — Breadcrumb root "Ops" → "Operations" to match sidebar group label

AGENTS.md — Three new mandatory conventions:
- Destructive Action Convention: all deletes/revokes must use app-confirm-dialog
- Truncated Text Convention: all text-overflow:ellipsis elements must have [title]
- Promote Button Convention: three-state (hidden/disabled/enabled) model

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:20:25 +02:00
master
4912ce86c1 Remove remaining context-header eyebrow prefixes (breadcrumbs provide context)
Remove eyebrow= attributes from app-context-header on 7 pages:
- Dead-Letter Queue: "Ops / Execution"
- Offline Kit: "Ops / Feeds & Airgap"
- Pack Registry: "Ops / Execution"
- Registry Admin: "Setup / Integrations"
- Reachability: "Security / Reachability"
- Watchlist: "Trust & Signing"
- Run Graph Replay: "Releases / Runs"

The breadcrumb navigation already communicates the parent context path.
Eyebrow prefixes duplicated this information and added visual noise.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:59:18 +02:00
master
3e2a0971e6 Fix systemic UI patterns: eyebrow prefixes, duplicate headings, technical names
SYS1 — Remove redundant eyebrow/prefix text from headings (breadcrumb provides context):
- "Security / Supply-Chain Data" → "Supply-Chain Data"
- "Security / Triage" → "Triage"
- "Security / Advisories & VEX" → "Advisories & VEX"
- Certificates: remove "Setup" eyebrow paragraph

SYS2 — Remove duplicate headings inside tab panels (tab label already names the content):
- Supply-Chain Data: remove "SBOM Viewer" h2 inside viewer tab
- Certificates: remove "Signing Keys" h2 inside keys tab
- Environments: remove "Regions & Environments" h1 inside regions tab

SYS3 — Replace internal technical names with user-facing labels:
- "JobEngine" → "Scheduled Jobs" in heading, route title, and breadcrumb
- "JobEngine Quotas" → "Execution Quotas" in route title and breadcrumb

SYS4 — Remove duplicate Refresh button on Certificates signing-key dashboard
(parent trust-admin shell already provides Refresh via page action)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:55:47 +02:00
master
07f8d1d0e4 Docs: update workflow engine documentation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:28:56 +02:00
master
95357ffbb9 Web UI: feature updates across all modules
Broad UI improvements spanning auth, branding, notifications, agents, analytics,
approvals, audit-log, bundles, configuration, console-admin, dashboard,
deployments, doctor, environments, evidence, feed-mirror, graph, integration-hub,
issuer-trust, lineage, notify, offline-kit, policy, promotions, quota, registry,
release-orchestrator, releases, sbom, scans, secret-detection, security, settings,
setup-wizard, system-health, topology, triage, trust-admin, unknowns, vex-hub,
vulnerabilities, and watchlist features.

Adds new shared components (page-action-outlet, stella-action-card, stella-form-field),
scripts feature module, audit-trust component, e2e test helpers, and release page
e2e specs. Updates auth session model, branding service, color tokens, form styles,
and i18n translations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:28:48 +02:00
master
f767489e26 Authority: update console admin endpoint extensions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:28:24 +02:00
master
7abdb5334d Platform: add script variables API and scope/policy updates
Add CRUD endpoints for script variables with validation and diff-compatible
models (ScriptEndpoints, ScriptApiModels, IScriptService, InMemoryScriptService).
Update PlatformScopes and PlatformPolicies for script.read/write permissions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:28:17 +02:00
master
c58a236d70 Doctor plugin checks: implement health check classes and documentation
Implement remediation-aware health checks across all Doctor plugin modules
(Agent, Attestor, Auth, BinaryAnalysis, Compliance, Crypto, Environment,
EvidenceLocker, Notify, Observability, Operations, Policy, Postgres, Release,
Scanner, Storage, Vex) and their backing library counterparts (AI, Attestation,
Authority, Core, Cryptography, Database, Docker, Integration, Notify,
Observability, Security, ServiceGraph, Sources, Verification).

Each check now emits structured remediation metadata (severity, category,
runbook links, and fix suggestions) consumed by the Doctor dashboard
remediation panel.

Also adds:
- docs/doctor/articles/ knowledge base for check explanations
- Advisory AI search seed and allowlist updates for doctor content
- Sprint plan for doctor checks documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:28:00 +02:00
master
fbd24e71de Add empty states for audit tables and trim Jobs & Queues description
Empty states:
- Audit Log "Recent Events" table: show "No audit events recorded yet." when empty
- Audit Log "All Events" table: show "No events match the current filters." when empty

Descriptions:
- Jobs & Queues: trim verbose 4-line description to single line

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:09:48 +02:00
master
c7c758e3b9 Fix navigation structure, verbose descriptions, and naming mismatches
Navigation:
- Move Diagnostics and Notifications from Settings to Operations sidebar group (routes are /ops/operations/*)
- Policy: skip redundant Overview tab, land directly on Packs (the first actionable tab)
- Policy: remove "Ops / Policy" eyebrow prefix (breadcrumb already shows this)

Naming:
- Audit Log: "Unified Audit Log" → "Audit Log" to match sidebar label
- Evidence: "Evidence & Audit" → "Evidence Overview" to match sidebar label

Verbose descriptions trimmed:
- Policy shell: single-line subtitle, remove default contextNote
- Evidence overview: remove second paragraph about Operator/Auditor modes
- Operations hub: trim to "Platform health, execution control, diagnostics, and airgap workflows."
- Deployments: trim to "Deployment runs, approvals, and promotion activity."
- Integrations Hub tab: remove duplicate heading (parent shell already provides it)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 12:06:20 +02:00
master
cf20a8bc06 Fix 11 UI consistency issues across web console
Naming consistency:
- Dashboard heading "Mission Board" → "Dashboard" to match breadcrumb/title
- Vulnerabilities page: "Artifact workspace" → "Vulnerabilities" (heading, breadcrumb, route title)
- Doctor checks: "NOT RAN" → "NOT RUN" (grammar fix)
- Doctor pack categories: add label overrides for "servicegraph" → "Service Graph" and "binaryanalysis" → "Binary Analysis"
- Release digest placeholder: "digest-unavailable" → "Pending digest"

Bug fixes:
- Register locale data for all 8 supported locales (bg-BG, de-DE, ru-RU, es-ES, fr-FR, uk-UA, zh-TW, zh-CN) to fix NG02100 InvalidPipeArgument errors on Audit Log and other pages using Angular built-in pipes
- Null-safe json/number pipes in audit-log components (audit-log-table, audit-event-detail, audit-integrations, audit-export)
- Approval version fallback: use empty string instead of releaseName to prevent duplicate text in approval cards
- Approval card template: hide version span when it matches the release name

Layout/UX:
- stella-page-tabs: enable horizontal scroll on desktop (was mobile-only), prevents tab wrapping on Diagnostics (11 tabs), Audit Log (9 tabs)
- Triage date formatting: use DateFormatService for locale-aware dates instead of bare toLocaleString()

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 11:46:17 +02:00
master
2bc06169f8 Fix fake orthogonal target-entry hook detection 2026-03-26 14:39:55 +02:00
master
c210115224 Fix ElkSharp gateway target peer conflict polish 2026-03-26 13:57:47 +02:00
master
71edccd485 elksharp stabilization 2026-03-24 08:38:09 +02:00
master
d788ee757e release control ui simplificatiosn 2026-03-24 01:20:40 +02:00
master
dd29786e38 Implement missing backend endpoints for release orchestration
TASK-002: 11 deployment monitoring endpoints in JobEngine
  (list, get, logs, events, metrics, pause/resume/cancel/rollback/retry)
TASK-003: 6 evidence management endpoints in JobEngine
  (list, get, verify, export, raw, timeline)
TASK-005: 3 release dashboard endpoints in JobEngine
  (dashboard summary, approve/reject promotion)
TASK-006: 2 registry image search endpoints in Scanner
  (search with 9 mock images, digests lookup)

All endpoints return seed/mock data for testing. Auth policies
match existing patterns. Dual route registration on both
/api/ and /api/v1/ prefixes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:52:20 +02:00
master
d3353e9d16 Fix release API proxy routes + wire pipeline to real data
- Add nginx proxy blocks for /api/v1/release-orchestrator/,
  /api/v1/release-control/, /api/v2/releases/, /api/v1/releases/,
  /api/v1/registries/ in Dockerfile.console
- All release UI calls now reach JobEngine (401 not 404)
- Registry search reaches Scanner service
- Pipeline page uses ReleaseManagementStore (real API, no mock data)
- Deployment wizard uses BundleOrganizerApi for create/seal
- Inline version/hotfix creation in deployment wizard wired to API
- Version detail shows "not found" error instead of blank screen
- Version wizard has promotion lane + duplicate component detection
- Sprint plan for 41 missing backend endpoints created

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:38:16 +02:00
master
66d84fb17a Fix Create Deployment wizard: add missing SlicePipe import
Root cause: the | slice pipe was used in the template but SlicePipe
was not in the standalone component's imports array. This caused
Angular's resolveDirective to throw 'Cannot read factory' on every
change detection cycle, preventing mock version cards from rendering
and breaking the Continue button validation.

Also: removed unused RouterModule import, converted computed signals
to methods for PlatformContextStore-dependent values, added
platformCtx.initialize() in constructor.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 14:05:30 +02:00
master
eb27a69778 Improve rendering 2026-03-23 13:23:19 +02:00
master
d2e542f77e release control ui improvements 2026-03-21 00:09:17 +02:00
master
f5b5f24d95 Add StellaOps.Workflow engine: 14 libraries, WebService, 8 test projects
Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into
standalone StellaOps.Workflow.* libraries targeting net10.0.

Libraries (14):
- Contracts, Abstractions (compiler, decompiler, expression runtime)
- Engine (execution, signaling, scheduling, projections, hosted services)
- ElkSharp (generic graph layout algorithm)
- Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg
- Signaling.Redis, Signaling.OracleAq
- DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle

WebService: ASP.NET Core Minimal API with 22 endpoints

Tests (8 projects, 109 tests pass):
- Engine.Tests (105 pass), WebService.Tests (4 E2E pass)
- Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests
- Signaling.Redis.Tests, IntegrationTests.Shared

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 19:14:44 +02:00
master
e56f9a114a Unified releases page + dashboard layout redesign + sidebar restructure
- Create unified releases pipeline page with decision capsules
  (Deploy, Approve, Review Gates, View Evidence, Promote)
- Replace raw select filters with app-filter-bar on releases and activity pages
- Dashboard: single-column layout with Pending Actions card (pipeline + action
  badges), 4-column status lane (Vuln Summary + Feed Status | SBOM Health |
  Env Health | Environments at Risk), loading skeleton, reduced-motion support
- Sidebar: Dashboard at Release Control root, flat menu items
  (Releases, Versions, Approvals, Activity), remove Promotions/Hotfixes
- Metric card labels: proper font size with ellipsis + title tooltip
- Badge cap changed from 99+ to 9+
- Action badges on sidebar: blocked gates, critical findings, failed runs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 12:55:08 +02:00
master
5d67287d0a UI fixes 2026-03-20 08:45:28 +02:00
master
d4530b2ae8 prune temp files 2026-03-18 00:05:13 +02:00
master
8e6cbeab97 Polish UI across all route groups + redesign welcome page
- Welcome: split-panel layout with Sign In always above fold, feature cards, trust badges
- Release Control: dashboard, releases, promotions, approvals — design token alignment
- Security: posture, findings, scan submit, unknowns, reports — compact tables, severity badges
- Operations: ops hub, jobengine, scheduler, doctor, notifications, feeds — consistent styling
- Audit & Evidence: evidence overview, audit log, export center, replay — shimmer loading
- Setup & Admin: topology, integrations, identity, trust, system — hover lift, focus rings
- Shared: buttons, tabs, forms, colors — unified design tokens (btn-primary, tab-active, focus-ring)
- Archive 3 completed sprints (SPRINT_20260317_001/002/003)
- Add QA journey reports and route map

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:04:38 +02:00
master
b851aa8300 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>
2026-03-17 15:10:36 +02:00
master
4b7d3587ca Fix remaining 403s: Authority envelope middleware + preferences scope
- Add UseIdentityEnvelopeAuthentication() to Authority service, fixing
  /console/tenants 403. Authority was the last service missing it.
- Add ui.preferences.read and ui.preferences.write to OIDC scope request
  in config.json and PlatformServiceOptions, fixing preferences/language 403.
  The scopes existed in Authority but were never requested by the frontend.

All services now have identity envelope middleware:
  Gateway, Platform, Scanner, JobEngine, Timeline, Integrations,
  Concelier, Authority (8/8 complete)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:03:35 +02:00
master
6d91cf36b7 Add identity envelope middleware to Platform service (fixes 403s)
Platform was the ONLY service missing UseIdentityEnvelopeAuthentication().
Sprint 008 added it to Scanner, JobEngine, Timeline, Integrations, Concelier
but missed Platform. This caused ALL context API calls to return 403:
- /api/v2/context/regions
- /api/v2/context/environments
- /api/v2/context/preferences

The gateway strips JWT and sends signed identity envelope headers instead.
Without the middleware, Platform couldn't read the scopes from the envelope,
so every authorization check failed.

This also fixes the "Events: DEGRADED" SSE status indicator since the
context store's error was caused by these 403 responses.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 07:45:00 +02:00
master
e157563d05 Fix navigation root cause: probe auto-recovery + auth persistence + 4 bugs
Fix 1 (CRITICAL): BackendProbeService now auto-recovers from "unreachable".
  When probe fails, schedules retry every 10s (max 5 attempts). Guard
  re-probes before redirecting if probe was previously reachable. This
  fixes ALL 9 guarded route groups that redirected to /setup mid-session.

Fix 2: wasEverAuthenticated latch now persists in sessionStorage instead
  of class field. Survives page reloads (F5), cleared on logout.

Fix 3: Console-admin routes now use requireAnyScopeGuard with ui.admin
  bypass instead of plain requireAuthGuard. Admin user can access all
  /console-admin/* pages (tenants, clients, tokens, branding).

Fix 4: Governance sub-tab routerLinks changed from relative to absolute
  paths. Clicking Trust Weights, Staleness, etc. now stays on governance
  instead of navigating to random pages.

Fix 5: Integration empty-state buttons show proper display names
  ("Runtime Host" not "runtimehost", "SCM Integration" not "scm").

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 00:58:56 +02:00
master
5c24f18f50 Archive Sprint 025 and Sprint 002: zero active sprints remaining
Sprint 025 (FE cleanup): 4/4 DONE — all cleanup verified, build clean
Sprint 002 (Scanner entry): 7/7 DONE — scan page, sidebar, policies, CTAs

No active sprints remain in docs/implplan/.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:42:30 +02:00
master
768386fc62 Fix 3 test spec compilation errors, close Sprint 025
- integration-hub-ui.component.spec: fix integrationId → id property
- orphan-revival-regression: fix index signature access for getViewMode
- integration-detail-page.spec: fix mock Integration type
- Install @vitest/browser-playwright for test runner
- Sprint 025 FE-CLN-004: DONE — build verified, cleanup confirmed clean,
  test runner Karma→Vitest migration is infrastructure not regression

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:42:13 +02:00
master
079284f4b7 Add scan policy CRUD system (Sprint 002 S1-T03)
Backend (Scanner .NET):
- New ScanPolicyEndpoints.cs with GET/POST/PUT/DELETE /api/v1/scan-policies
- In-memory ConcurrentDictionary storage (no migration needed)
- Auth: scanner:read for list, orch:operate for mutations
- Registered in Scanner Program.cs

Frontend (Angular):
- New scan-policy.component.ts with table view, inline create/edit form,
  enable/disable toggle, dynamic rules (type/severity/action)
- Route added at /security/scan-policies in security-risk.routes.ts

Gateway route already exists in router-gateway-local.json.
Sprint 002: all 7 tasks now DONE.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:20:26 +02:00
master
5e850d056b Archive Sprint 021: all 3 tasks DONE (auth latch, registry 500, pack UI)
Verified on deployed stack:
- Sprint A: Harbor fixture returns 7 repos + 3 artifacts (curl verified)
- Sprint B: Scan timeout at 3 min (code verified, build clean)
- Sprint C: /console/profile shows Insufficient Permissions page (Playwright verified)
- Sprint D: Events chip shows CONNECTED, no DEGRADED flicker (Playwright verified)
- Sprint E: Policy pack creation form in empty state (build verified)
- Sprint F: Export button disabled tooltip (build verified)
- Sprint G: Audit log empty guidance text (Playwright verified)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:05:50 +02:00
master
ea5942fa1b Ship 7 remaining journey fixes: Harbor data, scan timeout, permissions,
flicker, pack creation, export tooltip, audit guidance

Sprint A: Harbor fixture now returns realistic search results (7 repos)
  and artifact digests (3 versions with tags). Release creation wizard
  Step 2 now shows actual images to select.

Sprint B: Scan polling caps at 60 polls (3 min). Shows timeout banner
  with guidance link to Scheduled Jobs and "Keep Waiting" button.

Sprint C: /console/profile route now renders InsufficientPermissions
  component instead of 404. Shows user/tenant, guidance, and nav links.
  Catches all 24 guard redirect dead-ends.

Sprint D: Event stream chip no longer flickers DEGRADED during context
  reloads. Loading state treated as connected (transient, not error).

Sprint E: Policy Packs empty state now has inline Create Pack form.
  Calls existing PolicyApiService.createPack() backend endpoint.

Sprint F: Diagnostics Export button shows disabled tooltip "Run a
  diagnostic check first" when no results available.

Sprint G: Audit Log shows guidance text when all module counts are 0.
  Lists automatically captured event types. Confirms audit is active.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:00:20 +02:00
master
d80acadcd7 Update Sprint 021: registry search fix DONE
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 22:25:28 +02:00
master
757f5b3f0d Fix registry search 500: handle non-JSON Harbor fixture response
Harbor fixture returns plain text, not JSON. The RegistrySearchEndpoints
deserialization crashed with an unhandled JsonException causing 500 on
every /api/v1/registries/images/search request. This blocked the release
creation wizard at Step 2 (Components).

Fix: catch JsonException and return empty results gracefully. The release
wizard now shows "no results" instead of silently failing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 22:25:16 +02:00
master
15e06db230 Create Sprint 021: auth latch fix + honest product gap assessment
Documents the auth session latch fix (DONE), remaining backend blockers
(registry search 500, policy pack creation), and an honest product quality
assessment from 3 iterations of first-time user journey testing.

UI/UX: 9/10. Navigation: 9/10 (was 2/10). Backend completeness: 6/10.
End-to-end workflow: 5/10.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 22:19:05 +02:00
master
78681e71d0 Fix auth session latch: prevent redirects during token refresh
Root cause: AuthSessionStore.isAuthenticated is a computed signal that
returns false during token refresh ('loading' status). Since all routes
use canMatch guards that read isAuthenticated, a token refresh causes
ALL routes to fail guard evaluation simultaneously, redirecting the user
to random pages.

Fix: Add wasEverAuthenticated latch that stays true once set. During
transient 'loading' states, isAuthenticated returns true if the user
was previously authenticated — the session is being refreshed, not lost.

This eliminates the "phantom redirect" bug that made every page in the
app unstable (pages would load then silently navigate away after 1-5
seconds). Verified stable on /setup/identity-access and /evidence/audit-log
with 12-second wait after navigation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 22:15:17 +02:00
master
092779f0f4 Polish empty states: policy packs, shadow mode prereqs, jobengine hint
- Policy Packs: show "No policy packs configured" with description and
  link to overview when pack list is empty
- Shadow Mode: add prerequisite text below disabled Enable/View Results
  buttons — "Shadow mode requires at least one active policy pack" with
  link to Packs tab. Applied to both indicator and dashboard components.
- JobEngine: show guidance "No jobs have been submitted yet..." when all
  counts are 0, auto-hides when jobs appear

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:48:56 +02:00
master
ad92f1c855 Archive completed Sprint 020 (all 6 quality fixes shipped)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:37:21 +02:00
master
7211d9bf48 Update Sprint 020: all 6 tasks DONE including critical route redirect fix
Sprint 020 complete: scan ID mismatch, user ID display, feed status text,
route redirect race condition, exception scope mismatch, admin scope bypass.
All verified via Playwright on fresh install.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:22:55 +02:00
master
378b52a5cb Fix critical route redirect race + scope mismatches + UX polish
Critical fixes:
- Replace router.navigateByUrl() with Location.replaceState() in
  PlatformContextUrlSyncService to prevent re-evaluating canMatch guards
  during query param sync. This was causing random page redirects across
  all routes when auth session signals hadn't settled yet.
- Fix exception scope mismatch: Authority issues 'exceptions:read' (plural)
  but guards checked 'exception:read' (singular). Aligned to plural form.
- Fix admin scope bypass: guards checked 'admin' scope but token has
  'ui.admin'. Now both are accepted as superuser bypass.
- Remove duplicate scope entries in description map.

UX polish (from fix agents):
- Integration detail: formatActor() truncates raw user ID hashes to
  "User 9a2d0730..." instead of showing full 32-char hex string.
- Dashboard feed status: show "Not checked yet" instead of "0 healthy"
  when no advisory source health checks have run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 21:20:38 +02:00
master
f4eb64fefc Fix scan submit field mismatch, archive verified sprints, deep journey iteration 2
- Fix scan-submit.component.ts: Scanner API returns `scanId` (not `id`) and
  PascalCase status. Component now resolves `scanId ?? id` and normalizes
  status to lowercase. Scan progress tracking now works end-to-end.
- Archive 3 verified sprints (001 FTUX, 007 Journey fixes, 008 Identity envelope)
  after fresh wipe + rebuild + behavioral verification.
- Update Sprint 002 task statuses to reflect actual implementation (6/7 done).
- Create Sprint 020 for remaining journey quality fixes (J-02 user ID display,
  J-03 feed auto-check).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 19:21:53 +02:00