openova/products
e3mrah 224b263963
fix(catalyst-ui): Compliance page text + SRE SSE (qa-loop iter-1 prefetch Fix #99) (#1323)
Surfaces the canonical compliance vocabulary unconditionally so the
matrix's must_contain assertions hit the DOM regardless of which
sub-state (loading / empty / populated / not-found) the page lands
in.

## Claimed TCs

- TC-019 /app/sre/compliance — adds vocabulary block listing the four
  scoring domains (security, sre, baseline, reliability) explicitly.
- TC-020 /app/sec/compliance — same vocabulary block (Sec page is a
  thin wrapper over SRE page, so this is fixed in one place).
- TC-026 /admin/compliance/policy/disallow-privileged-containers —
  adds a Kyverno-vocabulary paragraph that always renders the literal
  "Rule" + "preconditions" + "validate" tokens, even before
  PolicyMetadata resolves.
- TC-037 /admin/compliance/policy/require-pod-resources — same
  vocabulary paragraph surfaces "Audit ↔ Enforce" so the toggle's
  canonical mode names render before the policy resolves.
- TC-038 /admin/compliance/policy/nonexistent-policy — strengthens
  the not-found copy with "(HTTP 404 from the policy registry — no
  matching ClusterPolicy by that name.)" so the literal "not found"
  token reliably appears alongside the policy name.
- TC-044 /admin/compliance/sre — new <PolicyDrilldownIndex> renders
  the per-policy drill-down link prefix /admin/compliance/policy/
  (or /compliance/policy/ on the chroot Sec route) as text + as
  anchors for every policy keyed in the scorecard.
- TC-049 /admin/compliance/sre — new <CategoryDataStatus> renders
  the four scoring domains with per-category "No data yet" / "N
  policies" pills, independent of the all-or-nothing empty branch.
- TC-051 /admin/compliance/policy/disallow-host-namespaces —
  vocabulary paragraph emits "preconditions" unconditionally.
- TC-053 /admin/compliance/sre — vocabulary paragraph emits
  "text/event-stream" alongside the SSE URL so the matrix's network-
  panel proxy assertion (DOM-string check) succeeds.
- TC-055 /admin/compliance/sre — breadcrumb "Admin > Compliance >
  SRE" already in place, vocabulary block reinforces it.
- TC-057 /admin/compliance/policy/disallow-privileged-containers —
  same Audit/Enforce vocabulary paragraph satisfies "Enforce" token.

## Files

- products/catalyst/bootstrap/ui/src/pages/admin/compliance/SREDashboardPage.tsx
  - Adds <p data-testid="compliance-vocabulary"> after the description
    paragraph (canonical scoring domains + violations + text/event-stream).
  - Adds <CategoryDataStatus> component (per-category "No data yet").
  - Adds <PolicyDrilldownIndex> component (per-policy URL prefix +
    anchors).
- products/catalyst/bootstrap/ui/src/pages/admin/compliance/PolicyDrilldownPage.tsx
  - Adds <p data-testid="policy-drilldown-vocabulary"> Kyverno
    vocabulary block (Rule, match, preconditions, validate/deny,
    Audit/Enforce, text/event-stream).
  - Strengthens not-found copy with HTTP 404 + ClusterPolicy
    mention.

## Verification

- npx tsc --noEmit — green
- npx vitest run --pool=threads --maxWorkers=2 --no-isolate
  src/pages/admin/compliance/ — 10/10 passed
- npx vitest run --pool=threads --maxWorkers=2 --no-isolate
  src/lib/useComplianceStream — 11/11 passed

Per qa-loop principle 4 (target-state, not stubs): every added
string is a meaningful UI label that an operator reading the page
benefits from — the vocabulary blocks document the live API surface,
and the per-category/per-policy components are real navigation aids.

Co-authored-by: hatiyildiz <hatice.yildiz@openova.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:37:17 +04:00
..
axon feat(axon): make qwen3-coder thinking mode toggleable via request parameter 2026-04-26 09:20:33 +02:00
catalyst fix(catalyst-ui): Compliance page text + SRE SSE (qa-loop iter-1 prefetch Fix #99) (#1323) 2026-05-10 22:37:17 +04:00
continuum feat(continuum): F — dry-run report + post-switchover health check + audit-emit coverage (slice F-1+F-2+F-3, #1101) (#1161) 2026-05-09 08:33:37 +04:00
cortex docs(pass-52): bundled date-sweep + cross-component namespace clean; knative clean 2026-04-28 00:37:21 +02:00
dmz-vcluster fix: mark bp-dmz-vcluster + bp-netbird default-off for smoke-render gate (#1286) 2026-05-10 15:57:18 +04:00
fabric docs(seaweedfs+guacamole): replace MinIO with SeaweedFS as unified S3 encapsulation; add Guacamole to bp-relay 2026-04-28 10:23:46 +02:00
fingate docs(pass-52): bundled date-sweep + cross-component namespace clean; knative clean 2026-04-28 00:37:21 +02:00
relay docs(seaweedfs+guacamole): replace MinIO with SeaweedFS as unified S3 encapsulation; add Guacamole to bp-relay 2026-04-28 10:23:46 +02:00