16 KiB
Stella Ops — QA Issues Report
Date: 2026-02-19
Tester: Claude Code (Playwright automated walkthrough)
Stack: Fresh docker compose up from devops/compose/docker-compose.stella-ops.yml
Auth: admin / default credentials
Base URL: https://stella-ops.local/
Build: v1.0.0 (as shown in sidebar footer)
Summary
| Severity | Count |
|---|---|
| 🔴 Critical | 1 |
| 🟠 High | 4 |
| 🟡 Medium | 7 |
| 🔵 Low | 6 |
| Total | 18 |
🔴 Critical
ISSUE-001 — All v2 navigation routes redirect to home (/)
Pages: /release-control/*, /security-risk/*, /evidence-audit/*, /platform-ops/*, /administration/*, /dashboard
Reproduction: Navigate to any of the 22+ new v2 IA routes introduced in SPRINT_20260218_006–016.
Observed: Every route silently redirects to / (Control Plane dashboard). No 404, no error — just home.
Expected: Each route renders its designated v2 component.
Impact: The entire v2 information architecture (Release Control, Security & Risk, Evidence & Audit, Platform Ops, Administration, Dashboard v3) is inaccessible. Only the old v1 routes work.
Notes: This is the primary blocker for SPRINT_20260218 sprint delivery. The new sidebar components exist in source but the routes are not wired to the deployed build. The /integrations route is the only v2-era route that partially works.
Affected routes tested:
/release-control → / (Control Plane)
/release-control/releases → /
/release-control/approvals → /
/release-control/environments→ /
/release-control/bundles → /
/release-control/promotions → /
/release-control/runs → /
/security-risk → /
/security-risk/findings → /
/security-risk/advisory-sources → /
/security-risk/vulnerabilities → /
/evidence-audit → /
/evidence-audit/packs → /
/evidence-audit/proofs → /
/evidence-audit/audit → /
/platform-ops → /
/platform-ops/health → /
/platform-ops/feeds → /
/administration → /
/administration/identity-access → /
/administration/policy-governance → /
/dashboard → /
🟠 High
ISSUE-002 — Integration Hub (/integrations) fires 10 API errors on load
Page: https://stella-ops.local/integrations
Reproduction: Navigate to /integrations.
Observed: Page loads visually (shows Integration Hub with all category counts as 0) but generates 10 console errors:
Failed to load resource: server responded with an error
/api/v1/integrations?type=0&pageSize=1
/api/v1/integrations?type=1&pageSize=1
/api/v1/integrations?type=2&pageSize=1
/api/v1/integrations?type=3&pageSize=1
/api/v1/integrations?type=4&pageSize=1
(plus 5x "ERROR N @ chunk-2UEM7CYT.js:3")
Expected: API calls succeed; summary counts reflect actual integration state (the old /settings/integrations shows 8 integrations with seed data).
Impact: The v2 Integration Hub is broken — all counts show 0 and the "Recent Activity" section shows a placeholder ("Integration activity timeline coming soon…"). Users cannot use this page.
Note: /settings/integrations works correctly (8 integrations shown). The backend API endpoint /api/v1/integrations may not be connected to the integrations service.
ISSUE-003 — After creating a release, redirects to orphaned route /release-orchestrator/releases
Page: /releases/create
Reproduction: Create a release through the 3-step wizard → click "Create Release" on step 3.
Observed: After submit, browser navigates to /release-orchestrator/releases.
Expected: Should navigate to /releases (the current releases list route).
Impact: The post-create redirect lands on an old route that no longer exists in the sidebar IA and was renamed. The URL works (Angular handles it), but it's a stale reference that will break when the old route aliases are removed during the v2 cutover (SPRINT_20260218_016).
ISSUE-004 — Identity & Access (/settings/admin) shows "No users found" with admin logged in
Page: https://stella-ops.local/settings/admin
Reproduction: Navigate to Settings → Identity & Access → Users tab.
Observed: "No users found" message shown even though the admin user is currently authenticated.
Expected: At minimum the admin user should appear in the user list.
Impact: Administrators cannot view or manage users from this page. User management is effectively broken.
Screenshot context: Bootstrap admin email is admin@unknown.local (possibly indicating the user was seeded without persisting to the listing query).
ISSUE-005 — Approvals badge count (3) does not match Pending filter results (2)
Page: /approvals
Reproduction: Observe sidebar badge → click through to Approvals page → filter defaults to "Pending" status.
Observed:
- Sidebar badge: 3 pending
- Pending filter: Results (2)
- All filter: Results (4) Expected: Badge should equal the "Pending" filtered count. The badge logic and the pending query are sourced differently. Impact: Misleading count for approvers — could cause someone to think they've missed an item or search for a non-existent third pending approval.
🟡 Medium
ISSUE-006 — Platform Health shows "NaNms" P95 latency and "/" service count
Page: https://stella-ops.local/operations/health
Reproduction: Navigate to Operations → Platform Health.
Observed:
- "Avg Latency NaNms — P95 across services"
- "Services / Healthy" (shows a bare
/instead of a number) - "No services available in current snapshot"
- "Dependencies: 0 nodes · 0 connections" Expected: Should show either real service health data or a meaningful empty state ("No health data available yet" with guidance). Impact: The health dashboard is completely non-functional on a fresh install. The NaN renders because it divides by zero services. The "/" is a formatting bug where a fraction like "0/0" is rendered without the surrounding numbers.
ISSUE-007 — Approve button on Approvals list has no confirmation step
Page: /approvals
Reproduction: On the approvals list, click "Approve" directly on any approval card.
Observed: No confirmation dialog, modal, or reason input appears. The action fires silently (or may silently fail — no success/error toast was observed).
Expected: A confirmation dialog or inline form should appear asking for a decision reason, especially since approvals are policy-gated actions that must produce signed evidence.
Impact: Accidental approvals are possible with a single click. Audit trail for the decision reason is missing if no reason is captured.
ISSUE-008 — SBOM Graph is a placeholder: "not yet available in this build"
Page: https://stella-ops.local/security/sbom
Reproduction: Navigate to Security → SBOM Graph.
Observed: Page renders with heading "SBOM Graph" and single message: "SBOM graph visualization is not yet available in this build."
Expected: SBOM dependency graph visualization.
Impact: Feature is advertised in navigation but completely unimplemented in the deployed build.
ISSUE-009 — Vulnerabilities page is a placeholder: "pending data integration"
Page: https://stella-ops.local/security/vulnerabilities
Reproduction: Navigate to Security → Vulnerabilities.
Observed: Page renders with heading "Vulnerabilities" and message: "Vulnerability list is pending data integration."
Expected: Vulnerability explorer with CVE list, filters, and triage actions.
Impact: Feature is advertised in navigation but has no functional content.
ISSUE-010 — Promote button on a deployed release does nothing
Page: /releases/rel-001 (Platform Release 1.2.3 — DEPLOYED)
Reproduction: Click the "Promote" button on a deployed release detail page.
Observed: No navigation, no modal, no drawer — the page stays unchanged.
Expected: A promotion dialog or navigation to the promotion wizard.
Impact: Users cannot initiate a promotion from the release detail page — a core workflow action is broken.
ISSUE-011 — Security sub-pages carry wrong <title>: "Security Overview - StellaOps"
Pages affected:
/security/findings→ title: "Security Overview - StellaOps"/security/vex→ title: "Security Overview - StellaOps"/security/sbom→ title: "Security Overview - StellaOps" Expected: Each page should have its own title, e.g. "Security Findings - StellaOps", "VEX Hub - StellaOps". Impact: Browser tabs, bookmarks, and screen-reader announcements all say "Security Overview" regardless of which security sub-page is open. Causes confusion and breaks accessibility.
ISSUE-012 — Integration Hub "Recent Activity" is a permanent placeholder
Page: https://stella-ops.local/integrations
Observed: "Integration activity timeline coming soon…" italic placeholder text under Recent Activity heading.
Expected: Activity timeline showing integration sync events, errors, and status changes.
Impact: The activity view the section promises is not implemented.
🔵 Low
ISSUE-013 — Many pages have generic <title> "StellaOps" (no page context)
Pages affected:
| Route | Title |
|---|---|
/security/vulnerabilities |
StellaOps |
/evidence/proof-chains |
StellaOps |
/evidence/replay |
StellaOps |
/evidence/export |
StellaOps |
/operations/orchestrator |
StellaOps |
/settings/integrations |
StellaOps |
/settings/release-control |
StellaOps |
/settings/security-data |
StellaOps |
/settings/admin |
StellaOps |
/settings/system |
StellaOps |
Expected: <Page Name> - StellaOps
Impact: Browser tabs are undifferentiable, bookmarks are unlabelled, screen readers announce the wrong page context. This likely affects all pages whose route modules don't call Angular's Title service.
ISSUE-014 — Release detail breadcrumb references old "Release Orchestrator" path
Page: /releases/rel-001
Observed: Breadcrumb reads: Release Orchestrator / Releases / Platform Release 1.2.3
Links to: /release-orchestrator and /release-orchestrator/releases
Expected: Releases / Platform Release 1.2.3 (linking to /releases)
Impact: Clicking the breadcrumb links navigates to old route aliases that will be removed at v2 cutover. Low impact now; will become a broken link after SPRINT_20260218_016.
ISSUE-015 — Evidence Proof Chains page shows error state on load with no input
Page: https://stella-ops.local/evidence/proof-chains
Observed: Page immediately shows "Subject digest is required — Retry" with no input field offered.
Expected: An empty state with a search or input field to enter a subject digest; error should only appear after a failed search.
Impact: Page is confusing on first load — appears broken but is just waiting for a digest input that it never prompts for.
ISSUE-016 — /evidence redirects to /evidence/bundles (not to Packets)
Page: Navigate to /evidence (from Evidence nav button).
Observed: Redirects to /evidence/bundles — heading "Evidence Bundles".
Expected per sidebar label: "Packets" (sidebar link text) — /evidence should land on Evidence Packets, not Evidence Bundles. The sub-page URL /evidence/bundles is not in the sidebar nav.
Impact: Minor navigation inconsistency — sidebar says "Packets", page says "Bundles", route says "bundles". Naming is not aligned.
ISSUE-017 — Scheduler nav link lands on /operations/scheduler/runs not /operations/scheduler
Page: Click Operations → Scheduler in the sidebar.
Observed: Navigates to /operations/scheduler/runs.
Expected: /operations/scheduler (the root scheduler page) with the runs as a sub-view.
Impact: Minor — the redirect is functional but means the scheduler root route appears to have no direct landing page.
ISSUE-018 — /settings/admin is labeled "Identity & Access" in sidebar but Settings section uses "Identity & Access" inconsistently
Page: Settings group in sidebar.
Observed: The Settings sidebar link for the admin page reads "Identity & Access", which is correct — but the page was also previously accessible at the legacy path /settings/admin. The link in the sidebar still uses /settings/admin (the implementation path) rather than a semantic path like /settings/identity.
Impact: Minor URL semantics issue; the path exposes an internal implementation name (admin) rather than the user-facing label (identity-access).
Pages Verified — No Issues
| Page | URL | Status |
|---|---|---|
| Welcome / Sign In | /welcome |
✅ |
| Control Plane Dashboard | / |
✅ |
| Releases List | /releases |
✅ |
| Release Detail | /releases/rel-001 |
✅ (Promote broken, see ISSUE-010) |
| Approvals List | /approvals |
✅ (count mismatch, see ISSUE-005) |
| Approval Detail | /approvals/apr-001 |
✅ |
| Security Overview | /security/overview |
✅ |
| Security Findings | /security/findings |
✅ |
| Security VEX Hub | /security/vex |
✅ |
| Security Exceptions | /security/exceptions |
✅ |
| SBOM Lake | /analytics/sbom-lake |
✅ |
| Evidence Bundles | /evidence/bundles |
✅ |
| Verdict Replay | /evidence/replay |
✅ |
| Export Center | /evidence/export |
✅ |
| Orchestrator Dashboard | /operations/orchestrator |
✅ |
| Scheduler Runs | /operations/scheduler/runs |
✅ |
| Quota Dashboard | /operations/quotas |
✅ |
| Dead-Letter Queue | /operations/dead-letter |
✅ |
| Feed Mirror & AirGap | /operations/feeds |
✅ |
| Integrations (legacy) | /settings/integrations |
✅ |
| Integrations SCM | /integrations/scm |
✅ |
| Integrations Registries | /integrations/registries |
✅ |
| Integration Detail | /settings/integrations/jenkins-1 |
✅ |
| Integration Onboarding | /integrations/onboarding/registry |
✅ |
| Release Control Settings | /settings/release-control |
✅ |
| Trust & Signing | /settings/trust |
✅ |
| Security Data | /settings/security-data |
✅ |
| Tenant / Branding | /settings/branding |
✅ |
| Usage & Limits | /settings/usage |
✅ |
| Notifications | /settings/notifications |
✅ |
| Policy Governance | /settings/policy |
✅ |
| System | /settings/system |
✅ |
| Create Release Wizard (3 steps) | /releases/create |
✅ (redirect bug, see ISSUE-003) |
Actions Verified
| Action | Result |
|---|---|
| Sign In (OAuth/OIDC) | ✅ Works |
| Global Search (type "hotfix") | ✅ Inline results shown |
| Sidebar expand/collapse all sections | ✅ Works |
| Release list filter by status/environment | ✅ Works |
| Release detail Timeline tab | ✅ Works |
| Approval list filter by Status/Environment | ✅ Works |
| Approval detail Explain gate | ✅ Opens explanation |
| Approval detail Add Comment | ✅ Comment saved |
| Create Release wizard (3 steps) | ✅ Completes (bad redirect after) |
| Export CSV (Findings) | ✅ Button present |
| Add Integration (opens onboarding) | ✅ Navigates to onboarding |
| User menu (Profile / Settings / Sign out) | ✅ All present |
Environment Notes
- Fresh install with no scan data → all security counters (CVE counts, SBOM, reachability) are zero. Zero counts are expected, not bugs.
- Seed data is present for: Releases (5), Approvals (4), Integrations (8), and some environmental data.
- Several services reported
unhealthyin Docker (stellaops-signals,stellaops-smremote,stellaops-advisory-ai-worker, etc.) — these backend health states may explain some of the data gaps (Platform Health no snapshot, Integration Hub API failures).