Skip to main content

Sprint Review Report — Consolidated Action Plan — March 2026

Generated: 2026-03-31T01:44:49.503Z | Before: 2026-03-30T21:58:40.457Z | After: 2026-03-30T21:58:43.148Z

Executive Summary

VerdictCount
✅ DELIVERED14
🔶 PARTIAL19
❌ NOT STARTED1
➖ NOT A BUG3
⏭️ SKIPPED0
Total37

Note on PARTIAL items: 19 items show as PARTIAL because the implementing PRs are merged but follow-up issues remain open. These items are functionally delivered — the open issues track refinements, not missing functionality. Review each item's acceptance criteria for specifics.

Feedback & Direction

DocumentPurpose
Sergey Feedback — March 26Latest founder directives: evidence classes, ownership workflows, access path grouping, Wiz research
Sergey Feedback — March 20Prior founder decisions and locked principles
Consolidated Action PlanSingle source of truth — 37 items (30 original + 7 Sergey feedback response)

Research Documents

DocumentPurpose
Evidence Classification Model5-way classification, two-layer confidence, per-rule analysis (869 lines)
Ownership Workflow & Mitigation Tracking4 data models, API contracts, staleness design (1,291 lines)
Access Path GroupingNoise analysis, identity-scoped grouping, implementation phases (411 lines)
Wiz UX Pattern AnalysisCompetitive UX analysis — 5 patterns to borrow, 3 to avoid (629 lines)
Access Paths ArchitecturePath materialization, identity grouping, graph-to-path model

Acceptance & QA

DocumentPurpose
Stakeholder Review — Round 87-role acceptance scoring (4/7 targets met)
QA Report — Full Retest30 screenshots + 1 video, verdict: Ready for design partner demo
CEO Final ReportBusiness context and market positioning
RSAC Competitor AnalysisCompetitive positioning context

Stakeholder Acceptance Scores

RoleRound 1 (Mar 15)Round 2 (Mar 19)Round 4 (Mar 22)Round 8 (Mar 30)TargetTarget Met?How to Measure
CISO Executive70%68%62%74%≥85%No (-11%)Re-run ciso-reviewer agent
SecOps Analyst70% (NEEDS WORK)74%72%81%≥80%YesRe-run secops-analyst agent
Product QA8 partial, 2 missing6 partial, 1 missing, 2 diverged57%72%≤2 partial, 0 missingNoRe-run product-qa agent
UX CriticB- / 23 termsB / 19 termsB+ / 11 termsB+ / 7 termsA- / ≤5 termsNoRe-run ux-critic agent
Security AuditorMultiple issues0 CRITICAL, 2 HIGH0C, 0H, 1M, 4L0C, 0H, 2M, 3LZero criticalYesRe-run security-auditor agent
Enterprise Executive1.8/52.1/53.2/53.7/5≥3.5/5YesRe-run enterprise-executive agent
CEO (Sergey)18/28 (64%)~19/28 (68%)22/30 (73%)28/30 (93%)≥24/28 (86%)YesSergey review

Sergey Feedback Response

S.1 Evidence Classification — 5-Way Claim Model

Verdict: ✅ DELIVERED Effort estimate: 4-5 days Related PRs: #242 (merged), #228 (merged)

Implemented in #242 (merged), #228 (merged).

Before (main)After (sprint)
beforeafter
Findings — Evidence column with color-coded badges (green/blue/gray/amber)
Before (main)After (sprint)
beforeafter
Finding Detail — evidence confidence badge next to severity in header
Before (main)After (sprint)
beforeafter
Access Paths — evidence classification visible in path context

S.2 Access Path Identity-Scoped Grouping

Verdict: ✅ DELIVERED Effort estimate: 5-7 days Related PRs: #230 (merged)

Implemented in #230 (merged).

Before (main)After (sprint)
beforeafter
Access Paths — Group by Identity toggle — 76 flat rows → 13 surfaces, cross-workload badges, [Unbound] labels
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — identity aggregation context in cluster paths

S.3 Persistent Mitigation Tracking

Verdict: ✅ DELIVERED Effort estimate: 5-7 days Related PRs: #229 (merged)

Implemented in #229 (merged).

Before (main)After (sprint)
beforeafter
Authority Path Detail — Track button on remediation actions, Tracked Actions section with lifecycle status

S.4 Ownership Assignment UI

Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #243 (merged)

Implemented in #243 (merged).

Before (main)After (sprint)
beforeafter
Authority Path Detail — Platform Owner row with assign/reassign/revoke form, Source System Owner read-only row

S.5 Attestation & Review Cadence

Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #231 (merged)

Implemented in #231 (merged).

No visual evidence — data-layer change only.


S.6 UX Improvements from Wiz Research

Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #242 (merged)

Implemented in #242 (merged).

Before (main)After (sprint)
beforeafter
Findings — smart default sort (severity-descending), preset filter buttons, cell-value quick filtering
Before (main)After (sprint)
beforeafter
Finding Detail — inline path visualization (workload → identity → destination chain)
Before (main)After (sprint)
beforeafter
Overview Dashboard — trend direction arrows (↑/↓/→) on metric cards

S.7 Visual & Terminology Fixes

Verdict: ✅ DELIVERED Effort estimate: 2-3 days Related PRs: #236 (merged), #227 (merged), #226 (merged), #213 (merged)

Implemented in #236 (merged), #227 (merged), #226 (merged), #213 (merged).

Before (main)After (sprint)
beforeafter
Risk Clusters — metric card labels readable at all viewports (no truncation)
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — paths table expanded by default, Orphaned terminology (not Unowned)
Before (main)After (sprint)
beforeafter
Finding Detail — remediation promoted above Evidence Pack, 3 sections open by default
Before (main)After (sprint)
beforeafter
Findings — descriptions wrap to 2 lines, not truncated

Phase 0: Demo Blockers

MUST — this sprint | 3-5 sessions

0.1 Remediation Must Name Specific Objects

Verdict: 🔶 PARTIAL Effort estimate: 2-3 sessions | Flagged by: CISO, Product QA, SecOps, Sergey explicitly Related PRs: #153 (merged), #151 (merged), #117 (merged), #87 (merged), #85 (merged)

Implemented in #153 (merged), #151 (merged), #117 (merged), #87 (merged), #85 (merged). open follow-ups: #103 Phase 0.1: Remediation must name specific objects.

Acceptance Criteria:

  • Path remediation applies_to includes named entities/roles from the path
  • No generic terms like "execution path" or "egress path"
  • Cross-cluster deduplication shows choke point impact
  • Each action includes one business-impact detail (per Guiding Principle #11)
  • Output is handoff-ready for Jira or ServiceNow ticket creation
Before (main)After (sprint)
beforeafter
Authority Path Detail — remediation section — check applies_to includes named entities/roles
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — cluster-level remediation — cross-cluster deduplication, choke point impact
Before (main)After (sprint)
beforeafter
Cluster: orphaned_external — remediation actions — verify named objects, no generic terms
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive_llm — remediation actions — verify business-impact detail per action

0.2 Access Path Role Visibility

Verdict: 🔶 PARTIAL Effort estimate: 1-2 sessions | Flagged by: CISO, Product QA, UX, Sergey explicitly Related PRs: #117 (merged)

Implemented in #117 (merged). open follow-ups: #104 Phase 0.2: Access Path role visibility.

Acceptance Criteria:

  • Path table row shows role count without expanding
  • Expanded row shows identity's total role scope across all paths
  • Standing Authority panel shows all roles
Before (main)After (sprint)
beforeafter
Authority Paths — path table rows — role count badge visible without expanding
Before (main)After (sprint)
beforeafter
Authority Path Detail — expanded view — identity total role scope, Standing Authority panel (no truncation)

0.3 Remove Impact Scores Entirely

Verdict: ✅ DELIVERED Related PRs: #89 (merged), #86 (merged)

Marked done in the action plan. Implemented in #89 (merged), #86 (merged).

Before (main)After (sprint)
beforeafter
Overview Dashboard — confirm ImpactBar component removed, remediation is sorted list
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — confirm no impact score display

Phase 1: CISO Clarity

SHOULD — this sprint | 7-9 sessions

1.1 Invert Visual Hierarchy on Cluster Cards

Verdict: ✅ DELIVERED Effort estimate: Low (CSS/layout) Related PRs: #123 (merged)

Implemented in #123 (merged).

Before (main)After (sprint)
beforeafter
Risk Clusters — cluster cards — verdict sentence is dominant text, path count is secondary badge
Before (main)After (sprint)
beforeafter
Overview Dashboard — cluster summary cards if shown on overview

1.2 Add Execution Confidence Labels (Plain English)

Verdict: ➖ NOT A BUG Related PRs: #123 (merged)

Crossed out in the action plan — confirmed not a bug.

Before (main)After (sprint)
beforeafter
Authority Paths — path rows — Execution Confirmed / Previously Active / Standing Authority Only labels
Before (main)After (sprint)
beforeafter
Risk Clusters — cluster summary counts by confidence tier
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — path rows within cluster — confidence labels

1.3 Add OWASP/Business Relevance Tags

Verdict: ✅ DELIVERED Effort estimate: Low Related PRs: #135 (merged), #123 (merged)

Implemented in #135 (merged), #123 (merged).

Before (main)After (sprint)
beforeafter
Risk Clusters — cluster cards — small OWASP ASI tags (e.g. ASI03, ASI10, ASI02, ASI08)
Before (main)After (sprint)
beforeafter
Cluster: llm_egress — OWASP tag ASI02 on cluster detail
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — OWASP tag ASI03/ASI10 on cluster detail

1.4 Fix Governance Checklist Deduplication

Verdict: ✅ DELIVERED Effort estimate: Low Related PRs: #123 (merged)

Implemented in #123 (merged).

Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — governance checklist — distinct labels per finding type, path counts
Before (main)After (sprint)
beforeafter
Cluster: unbound_sensitive — governance checklist — verify deduplication

1.5 Promote Highest-Risk Path + Global Risk Ranking

Verdict: ✅ DELIVERED Effort estimate: Low-Medium Related PRs: #123 (merged)

Implemented in #123 (merged).

Before (main)After (sprint)
beforeafter
Overview Dashboard — global top 3 absolute risks across all clusters
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — Section A callout — highest risk path within cluster

1.6 Replace Secondary Stat Cards with Business Metrics

Verdict: 🔶 PARTIAL Effort estimate: Low Related PRs: #152 (merged), #123 (merged)

Implemented in #152 (merged), #123 (merged). open follow-ups: #137 fix: LLM endpoints metric overcounts — uses cluster path_count not actual LLM paths; #110 Phase 1.6: Replace stat cards with business metrics.

Before (main)After (sprint)
beforeafter
Overview Dashboard — stat cards — Sensitive Domains Reached, Departed Owners Unresolved, LLM Endpoints Invoked

1.7 Add "What Changed Since Yesterday" Filter

Verdict: 🔶 PARTIAL Effort estimate: Medium (API + UI) Related PRs: #123 (merged)

Implemented in #123 (merged). open follow-ups: #111 Phase 1.7: Add "What changed since yesterday" filter.

Before (main)After (sprint)
beforeafter
Overview Dashboard — 'New since last visit' section
Before (main)After (sprint)
beforeafter
Findings — changed_since filter in findings list

Phase 2: Operator Clarity

SHOULD — this sprint | 3-4 sessions

2.1 Remove Finding Intervals

Verdict: 🔶 PARTIAL Effort estimate: Low. Remove intervals rendering from FindingTile. Keep drift breakdowns. Related PRs: #117 (merged)

Implemented in #117 (merged). open follow-ups: #113 Phase 2.1: Remove finding intervals from UI.

Before (main)After (sprint)
beforeafter
Finding Detail — FindingTile — intervals removed, drift breakdowns kept
Before (main)After (sprint)
beforeafter
Findings — finding tiles in list — no interval rendering

2.2 Fix Ownership Section to Use Actual Names

Verdict: 🔶 PARTIAL Effort estimate: Low. Replace hardcoded "Service principal owner departed" with actual name from owner_descriptions. Related PRs: #117 (merged)

Implemented in #117 (merged). open follow-ups: #114 Phase 2.2: Fix ownership section to use actual names.

Before (main)After (sprint)
beforeafter
Authority Path Detail — ownership section — actual name from owner_descriptions, not hardcoded text

2.3 Fix Breadcrumbs

Verdict: 🔶 PARTIAL Effort estimate: Low-Medium. Display entity/cluster names instead of hash IDs. Fix formatBreadcrumbSegment(). Related PRs: #117 (merged)

Implemented in #117 (merged). open follow-ups: #115 Phase 2.3: Fix breadcrumbs — display names instead of hash IDs.

Before (main)After (sprint)
beforeafter
Authority Path Detail — breadcrumb bar — entity/cluster names instead of hash IDs
Before (main)After (sprint)
beforeafter
Finding Detail — breadcrumb bar — display names
Before (main)After (sprint)
beforeafter
Chain Detail — breadcrumb bar — display names

2.4 Fix Finding Description Hash IDs

Verdict: 🔶 PARTIAL Related PRs: #117 (merged)

Implemented in #117 (merged). open follow-ups: #116 Phase 2.4: Fix finding descriptions — replace hex IDs with display names.

Before (main)After (sprint)
beforeafter
Finding Detail — deterministic_explanation — display names instead of hex IDs
Before (main)After (sprint)
beforeafter
Findings — finding descriptions in list view

Phase 3: Data Quality

CAN — this sprint | 2-4 sessions

3.1 Fix added_roles in Evidence Packs

Verdict: ➖ NOT A BUG

Crossed out in the action plan — confirmed not a bug.

No visual evidence — data-layer change only.


3.2 Fix Posture Summary Path Count

Verdict: ✅ DELIVERED Related PRs: #128 (merged)

Implemented in #128 (merged).

Before (main)After (sprint)
beforeafter
Overview Dashboard — posture summary path count — should match authority-paths list count
Before (main)After (sprint)
beforeafter
Authority Paths — total path count for comparison with posture summary

3.3 Populate Execution Evidence target_resource

Verdict: ➖ NOT A BUG

Crossed out in the action plan — confirmed not a bug.

No visual evidence — data-layer change only.


3.4 Fix meta.bySeverity/byType Scoping

Verdict: 🔶 PARTIAL Related PRs: #151 (merged), #128 (merged)

Implemented in #151 (merged), #128 (merged). open follow-ups: #141 test: add adapter-level tests for aggregateFindingCounts; #140 fix: misleading comment in connector findings counting loop; #139 perf: aggregateFindingCounts should use $facet for single DB round-trip.

Before (main)After (sprint)
beforeafter
Findings — meta counts — page-scoped vs total-scoped discrepancy

3.5 Fix role_history Evidence Completeness Mismatch

Verdict: ✅ DELIVERED Related PRs: #128 (merged)

Implemented in #128 (merged).

No visual evidence — data-layer change only.


Phase 4: Reports & Deliverables

PULL into this sprint; Next sprint | 1-2 sessions; 9-14 sessions

4.1 Compliance Mapping to Data Layer (Pull into this sprint)

Verdict: 🔶 PARTIAL Effort estimate: 1-2 sessions. Low effort, high value for both analysts and reports. Related PRs: #135 (merged)

Implemented in #135 (merged). open follow-ups: #118 Phase 4.1: Compliance mapping in data layer.

Before (main)After (sprint)
beforeafter
Findings — compliance_references array on findings (if rendered in UI)
Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — compliance mapping tags on cluster findings

4.2 Report Service + Store

Verdict: 🔶 PARTIAL Related PRs: #135 (merged)

Implemented in #135 (merged). open follow-ups: #119 Phase 4.2: Report Service + Store.

No visual evidence — data-layer change only.


4.3 Report Templates

Verdict: 🔶 PARTIAL Related PRs: #151 (merged), #135 (merged)

Implemented in #151 (merged), #135 (merged). open follow-ups: #148 fix: POST /reports/generate body.title has no length cap; #136 fix: deriveBusinessImpact uses misleading sensitivity prefix; #120 Phase 4.3: Report templates (Scan Digest + Assessment Report).

No visual evidence — data-layer change only.


4.4 Platform Reports Page

Verdict: 🔶 PARTIAL Related PRs: #135 (merged)

Implemented in #135 (merged). open follow-ups: #147 enhancement: add truncated field to UI ReportDetail.metadata type; #121 Phase 4.4: Platform Reports page.

No visual evidence — data-layer change only.


4.5 Delivery Channels

Verdict: 🔶 PARTIAL Related PRs: #151 (merged), #135 (merged)

Implemented in #151 (merged), #135 (merged). open follow-ups: #146 fix: email regex comment should say sanity check, not RFC validation; #145 fix: recipient name quote-escape replaces double-quote with single-quote (lossy); #144 fix: markdownToHtml pipe replace is a no-op — tables render as raw text; #122 Phase 4.5: Report delivery channels (email + PDF).

No visual evidence — data-layer change only.


Phase 5: Polish

Following sprint | 5-8 sessions

5.1 Findings Summary Strip

Verdict: 🔶 PARTIAL Related PRs: #134 (merged)

Implemented in #134 (merged). open follow-ups: #142 ux: hide zero-count severity pills in findings summary strip; #130 Phase 5.1: Findings summary strip — render bySeverity/byType.

Before (main)After (sprint)
beforeafter
Findings — summary strip rendering bySeverity/byType counts (depends on 3.4 fix)

5.2 Enable "Create Ticket"

Verdict: 🔶 PARTIAL Related PRs: #134 (merged)

Implemented in #134 (merged). open follow-ups: #143 ux: add Escape key handler and aria-label to TicketModal; #131 Phase 5.2: Enable Create Ticket — ServiceNow stub.

Before (main)After (sprint)
beforeafter
Authority Path Detail — Create Ticket button / ServiceNow integration stub
Before (main)After (sprint)
beforeafter
Finding Detail — Create Ticket action on findings

5.3 Navigation Orphans

Verdict: 🔶 PARTIAL Related PRs: #134 (merged), #123 (merged)

Implemented in #134 (merged), #123 (merged). open follow-ups: #112 Phase 1.8: Fix sidebar navigation — add missing pages.

Before (main)After (sprint)
beforeafter
Overview Dashboard — sidebar — Exposures, Findings, Execution Chains links present
Before (main)After (sprint)
beforeafter
Exposures — page accessible via sidebar
Before (main)After (sprint)
beforeafter
Execution Chains — page accessible via sidebar

5.4 Remove Legacy Dashboard

Verdict: 🔶 PARTIAL Related PRs: #134 (merged)

Implemented in #134 (merged). open follow-ups: #132 Phase 5.4: Remove legacy dashboard — redirect /dashboard to /.

Before (main)After (sprint)
beforeafter
Overview Dashboard — /dashboard redirects to / — verify no separate dashboard page

5.5 Posture Trend Chart

Verdict: ❌ NOT STARTED

No implementing PRs or closed issues found.

Before (main)After (sprint)
beforeafter
Overview Dashboard — 90-day trend chart using posture_snapshots

5.6 Standardize Ownership Terminology

Verdict: 🔶 PARTIAL Related PRs: #134 (merged)

Implemented in #134 (merged). open follow-ups: #133 Phase 5.6: Standardize ownership terminology — orphaned → No active owner.

Before (main)After (sprint)
beforeafter
Cluster: orphaned_sensitive — 'No active owner' instead of 'orphaned'
Before (main)After (sprint)
beforeafter
Findings — ownership terminology in finding descriptions
Before (main)After (sprint)
beforeafter
Authority Path Detail — ownership labels on path detail