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
| Verdict | Count |
|---|---|
| --------- | ------: |
| ✅ DELIVERED | 14 |
| 🔶 PARTIAL | 19 |
| ❌ NOT STARTED | 1 |
| ➖ NOT A BUG | 3 |
| ⏭️ SKIPPED | 0 |
| Total | 37 |
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.
Related Documents
Feedback & Direction
| Document | Purpose |
|---|---|
| ---------- | --------- |
| Sergey Feedback — March 26 | Latest founder directives: evidence classes, ownership workflows, access path grouping, Wiz research |
| Sergey Feedback — March 20 | Prior founder decisions and locked principles |
| Consolidated Action Plan | Single source of truth — 37 items (30 original + 7 Sergey feedback response) |
Research Documents
| Document | Purpose |
|---|---|
| ---------- | --------- |
| Evidence Classification Model | 5-way classification, two-layer confidence, per-rule analysis (869 lines) |
| Ownership Workflow & Mitigation Tracking | 4 data models, API contracts, staleness design (1,291 lines) |
| Access Path Grouping | Noise analysis, identity-scoped grouping, implementation phases (411 lines) |
| Wiz UX Pattern Analysis | Competitive UX analysis — 5 patterns to borrow, 3 to avoid (629 lines) |
| Access Paths Architecture | Path materialization, identity grouping, graph-to-path model |
Acceptance & QA
| Document | Purpose |
|---|---|
| ---------- | --------- |
| Stakeholder Review — Round 8 | 7-role acceptance scoring (4/7 targets met) |
| QA Report — Full Retest | 30 screenshots + 1 video, verdict: Ready for design partner demo |
| CEO Final Report | Business context and market positioning |
| RSAC Competitor Analysis | Competitive positioning context |
Stakeholder Acceptance Scores
| Role | Round 1 (Mar 15) | Round 2 (Mar 19) | Round 4 (Mar 22) | Round 8 (Mar 30) | Target | Target Met? | How to Measure |
|---|---|---|---|---|---|---|---|
| ------ | ----------------- | ----------------- | ----------------- | ----------------- | -------- | ------------- | ---------------- |
| CISO Executive | 70% | 68% | 62% | 74% | ≥85% | No (-11%) | Re-run ciso-reviewer agent |
| SecOps Analyst | 70% (NEEDS WORK) | 74% | 72% | 81% | ≥80% | Yes | Re-run secops-analyst agent |
| Product QA | 8 partial, 2 missing | 6 partial, 1 missing, 2 diverged | 57% | 72% | ≤2 partial, 0 missing | No | Re-run product-qa agent |
| UX Critic | B- / 23 terms | B / 19 terms | B+ / 11 terms | B+ / 7 terms | A- / ≤5 terms | No | Re-run ux-critic agent |
| Security Auditor | Multiple issues | 0 CRITICAL, 2 HIGH | 0C, 0H, 1M, 4L | 0C, 0H, 2M, 3L | Zero critical | Yes | Re-run security-auditor agent |
| Enterprise Executive | 1.8/5 | 2.1/5 | 3.2/5 | 3.7/5 | ≥3.5/5 | Yes | Re-run enterprise-executive agent |
| CEO (Sergey) | 18/28 (64%) | ~19/28 (68%) | 22/30 (73%) | 28/30 (93%) | ≥24/28 (86%) | Yes | Sergey review |
Sergey Feedback Response
DELIVERED S.1 Evidence Classification — 5-Way Claim Model
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 4-5 days Related PRs: #242 (merged), #228 (merged)
Implemented in #242 (merged), #228 (merged).
Findings — Evidence column with color-coded badges (green/blue/gray/amber)
Finding Detail — evidence confidence badge next to severity in header
Access Paths — evidence classification visible in path context
DELIVERED S.2 Access Path Identity-Scoped Grouping
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 5-7 days Related PRs: #230 (merged)
Implemented in #230 (merged).
Access Paths — Group by Identity toggle — 76 flat rows → 13 surfaces, cross-workload badges, [Unbound] labels
Cluster: orphaned_sensitive — identity aggregation context in cluster paths
DELIVERED S.3 Persistent Mitigation Tracking
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 5-7 days Related PRs: #229 (merged)
Implemented in #229 (merged).
Authority Path Detail — Track button on remediation actions, Tracked Actions section with lifecycle status
DELIVERED S.4 Ownership Assignment UI
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #243 (merged)
Implemented in #243 (merged).
Authority Path Detail — Platform Owner row with assign/reassign/revoke form, Source System Owner read-only row
DELIVERED S.5 Attestation & Review Cadence
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #231 (merged)
Implemented in #231 (merged).
No visual evidence — data-layer change only.
DELIVERED S.6 UX Improvements from Wiz Research
DELIVERED Verdict: ✅ DELIVERED Effort estimate: 3-4 days Related PRs: #242 (merged)
Implemented in #242 (merged).
Findings — smart default sort (severity-descending), preset filter buttons, cell-value quick filtering
Finding Detail — inline path visualization (workload → identity → destination chain)
Overview Dashboard — trend direction arrows (↑/↓/→) on metric cards
DELIVERED S.7 Visual & Terminology Fixes
DELIVERED 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).
Risk Clusters — metric card labels readable at all viewports (no truncation)
Cluster: orphaned_sensitive — paths table expanded by default, Orphaned terminology (not Unowned)
Finding Detail — remediation promoted above Evidence Pack, 3 sections open by default
Findings — descriptions wrap to 2 lines, not truncated
Phase 0: Demo Blockers
MUST — this sprint | 3-5 sessions
PARTIAL 0.1 Remediation Must Name Specific Objects
PARTIAL 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:
applies_to includes named entities/roles from the pathAuthority Path Detail — remediation section — check applies_to includes named entities/roles
Cluster: orphaned_sensitive — cluster-level remediation — cross-cluster deduplication, choke point impact
Cluster: orphaned_external — remediation actions — verify named objects, no generic terms
Cluster: orphaned_sensitive_llm — remediation actions — verify business-impact detail per action
PARTIAL 0.2 Access Path Role Visibility
PARTIAL 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:
Authority Paths — path table rows — role count badge visible without expanding
Authority Path Detail — expanded view — identity total role scope, Standing Authority panel (no truncation)
DELIVERED 0.3 Remove Impact Scores Entirely
DELIVERED Verdict: ✅ DELIVERED Related PRs: #89 (merged), #86 (merged)
Marked done in the action plan.
Implemented in #89 (merged), #86 (merged).
Overview Dashboard — confirm ImpactBar component removed, remediation is sorted list
Cluster: orphaned_sensitive — confirm no impact score display
Phase 1: CISO Clarity
SHOULD — this sprint | 7-9 sessions
DELIVERED 1.1 Invert Visual Hierarchy on Cluster Cards
DELIVERED Verdict: ✅ DELIVERED Effort estimate: Low (CSS/layout) Related PRs: #123 (merged)
Implemented in #123 (merged).
Risk Clusters — cluster cards — verdict sentence is dominant text, path count is secondary badge
Overview Dashboard — cluster summary cards if shown on overview
NOT A BUG 1.2 Add Execution Confidence Labels (Plain English)
NOT A BUG Verdict: ➖ NOT A BUG Related PRs: #123 (merged)
Crossed out in the action plan — confirmed not a bug.
Authority Paths — path rows — Execution Confirmed / Previously Active / Standing Authority Only labels
Risk Clusters — cluster summary counts by confidence tier
Cluster: orphaned_sensitive — path rows within cluster — confidence labels
DELIVERED 1.3 Add OWASP/Business Relevance Tags
DELIVERED Verdict: ✅ DELIVERED Effort estimate: Low Related PRs: #135 (merged), #123 (merged)
Implemented in #135 (merged), #123 (merged).
Risk Clusters — cluster cards — small OWASP ASI tags (e.g. ASI03, ASI10, ASI02, ASI08)
Cluster: llm_egress — OWASP tag ASI02 on cluster detail
Cluster: orphaned_sensitive — OWASP tag ASI03/ASI10 on cluster detail
DELIVERED 1.4 Fix Governance Checklist Deduplication
DELIVERED Verdict: ✅ DELIVERED Effort estimate: Low Related PRs: #123 (merged)
Implemented in #123 (merged).
Cluster: orphaned_sensitive — governance checklist — distinct labels per finding type, path counts
Cluster: unbound_sensitive — governance checklist — verify deduplication
DELIVERED 1.5 Promote Highest-Risk Path + Global Risk Ranking
DELIVERED Verdict: ✅ DELIVERED Effort estimate: Low-Medium Related PRs: #123 (merged)
Implemented in #123 (merged).
Overview Dashboard — global top 3 absolute risks across all clusters
Cluster: orphaned_sensitive — Section A callout — highest risk path within cluster
PARTIAL 1.6 Replace Secondary Stat Cards with Business Metrics
PARTIAL 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.
Overview Dashboard — stat cards — Sensitive Domains Reached, Departed Owners Unresolved, LLM Endpoints Invoked
PARTIAL 1.7 Add "What Changed Since Yesterday" Filter
PARTIAL 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.
Overview Dashboard — 'New since last visit' section
Findings — changed_since filter in findings list
Phase 2: Operator Clarity
SHOULD — this sprint | 3-4 sessions
PARTIAL 2.1 Remove Finding Intervals
PARTIAL 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.
Finding Detail — FindingTile — intervals removed, drift breakdowns kept
Findings — finding tiles in list — no interval rendering
PARTIAL 2.2 Fix Ownership Section to Use Actual Names
PARTIAL 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.
Authority Path Detail — ownership section — actual name from owner_descriptions, not hardcoded text
PARTIAL 2.3 Fix Breadcrumbs
PARTIAL 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.
Authority Path Detail — breadcrumb bar — entity/cluster names instead of hash IDs
Finding Detail — breadcrumb bar — display names
Chain Detail — breadcrumb bar — display names
PARTIAL 2.4 Fix Finding Description Hash IDs
PARTIAL 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.
Finding Detail — deterministic_explanation — display names instead of hex IDs
Findings — finding descriptions in list view
Phase 3: Data Quality
CAN — this sprint | 2-4 sessions
NOT A BUG 3.1 Fix added_roles in Evidence Packs
NOT A BUG Verdict: ➖ NOT A BUG
Crossed out in the action plan — confirmed not a bug.
No visual evidence — data-layer change only.
DELIVERED 3.2 Fix Posture Summary Path Count
DELIVERED Verdict: ✅ DELIVERED Related PRs: #128 (merged)
Implemented in #128 (merged).
Overview Dashboard — posture summary path count — should match authority-paths list count
Authority Paths — total path count for comparison with posture summary
NOT A BUG 3.3 Populate Execution Evidence target_resource
NOT A BUG Verdict: ➖ NOT A BUG
Crossed out in the action plan — confirmed not a bug.
No visual evidence — data-layer change only.
PARTIAL 3.4 Fix meta.bySeverity/byType Scoping
PARTIAL 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.
Findings — meta counts — page-scoped vs total-scoped discrepancy
DELIVERED 3.5 Fix role_history Evidence Completeness Mismatch
DELIVERED 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
PARTIAL 4.1 Compliance Mapping to Data Layer (Pull into this sprint)
PARTIAL 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.
Findings — compliance_references array on findings (if rendered in UI)
Cluster: orphaned_sensitive — compliance mapping tags on cluster findings
PARTIAL 4.2 Report Service + Store
PARTIAL 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.
PARTIAL 4.3 Report Templates
PARTIAL 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.
PARTIAL 4.4 Platform Reports Page
PARTIAL 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.
PARTIAL 4.5 Delivery Channels
PARTIAL 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
PARTIAL 5.1 Findings Summary Strip
PARTIAL 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.
Findings — summary strip rendering bySeverity/byType counts (depends on 3.4 fix)
PARTIAL 5.2 Enable "Create Ticket"
PARTIAL 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.
Authority Path Detail — Create Ticket button / ServiceNow integration stub
Finding Detail — Create Ticket action on findings
PARTIAL 5.3 Navigation Orphans
PARTIAL 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.
Overview Dashboard — sidebar — Exposures, Findings, Execution Chains links present
Exposures — page accessible via sidebar
Execution Chains — page accessible via sidebar
PARTIAL 5.4 Remove Legacy Dashboard
PARTIAL Verdict: 🔶 PARTIAL Related PRs: #134 (merged)
Implemented in #134 (merged). open follow-ups: #132 Phase 5.4: Remove legacy dashboard — redirect /dashboard to /.
Overview Dashboard — /dashboard redirects to / — verify no separate dashboard page
NOT STARTED 5.5 Posture Trend Chart
NOT STARTED Verdict: ❌ NOT STARTED
No implementing PRs or closed issues found.
Overview Dashboard — 90-day trend chart using posture_snapshots
PARTIAL 5.6 Standardize Ownership Terminology
PARTIAL Verdict: 🔶 PARTIAL Related PRs: #134 (merged)
Implemented in #134 (merged). open follow-ups: #133 Phase 5.6: Standardize ownership terminology — orphaned → No active owner.
Cluster: orphaned_sensitive — 'No active owner' instead of 'orphaned'
Findings — ownership terminology in finding descriptions
Authority Path Detail — ownership labels on path detail